{"id":34,"date":"2014-03-19T00:03:40","date_gmt":"2014-03-18T16:03:40","guid":{"rendered":"http:\/\/vinta.ws\/code\/?p=34"},"modified":"2026-02-18T01:20:37","modified_gmt":"2026-02-17T17:20:37","slug":"coverage-py-python-code-coverage","status":"publish","type":"post","link":"https:\/\/vinta.ws\/code\/coverage-py-python-code-coverage.html","title":{"rendered":"coverage.py: Python code coverage"},"content":{"rendered":"<p>coveralls.io \u8dd1 python project \u7684\u8986\u84cb\u7387\u5c31\u662f\u7528 coverage.py<br \/>\nnose \u4e5f\u662f\u7528 coverage.py<br \/>\n\u57fa\u672c\u4e0a Python \u793e\u7fa4\u5e7e\u4e4e\u90fd\u662f\u7528\u9019\u500b<\/p>\n<p>ref:<br \/>\n<a href=\"http:\/\/nedbatchelder.com\/code\/coverage\/\">http:\/\/nedbatchelder.com\/code\/coverage\/<\/a><br \/>\n<a href=\"http:\/\/www.cnblogs.com\/coderzh\/archive\/2009\/12\/01\/1614874.html\">http:\/\/www.cnblogs.com\/coderzh\/archive\/2009\/12\/01\/1614874.html<\/a><\/p>\n<h2>Install<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ pip install coverage<\/code><\/pre>\n<h2>Configuration<\/h2>\n<p>in .coveragerc<\/p>\n<pre class=\"line-numbers\"><code class=\"language-ini\">[run]\nbranch = True\nsource = email_confirm_la\nomit =\n    email_confirm_la\/migrations\/*\n    email_confirm_la\/south_migrations\/*\n    email_confirm_la\/tests\/*<\/code><\/pre>\n<p>[run] \u5e95\u4e0b\u7684 include \u548c omit \u662f\u7528\u4f86\u6307\u5b9a filename pattern<br \/>\n\u800c source \u662f\u7528\u4f86\u6307\u5b9a package \u6216\u76ee\u9304<\/p>\n<p>omit \u662f\u300c\u5ffd\u7565\u300d\u7684\u610f\u601d<\/p>\n<p>ref:<br \/>\n<a href=\"http:\/\/nedbatchelder.com\/code\/coverage\/config.html\">http:\/\/nedbatchelder.com\/code\/coverage\/config.html<\/a><\/p>\n<h2>Usage<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-bash\"># \u6703\u81ea\u52d5\u5957\u7528\u7576\u524d\u76ee\u9304\u4e0b\u7684 .coveragerc\n$ coverage run setup.py test\n$ coverage report\n$ coverage html\n\n# \u9ed8\u8a8d\u6703\u4e00\u4f75\u6e2c\u8a66\u6240\u6709\u5305\u542b\u7b2c\u4e09\u65b9 lib \u5728\u5167\u7684 Python \u7a0b\u5f0f\u78bc\uff08\u5982\u679c\u4f60\u6c92\u6709\u5beb .coveragerc \u7684\u8a71\uff09\n$ coverage run test.py\n\n# \u4f60\u53ef\u4ee5\u7528 --source \u6307\u5b9a\u53ea\u6e2c\u8a66\u67d0\u500b packages \u6216\u76ee\u9304\n$ coverage run --source=haul setup.py test\n$ coverage run --source=haul tests\/test.py\n$ coverage run --source=. manage.py test\n\n# show report in terminal\n$ coverage report\n\n# generate html report in the same dir\n$ coverage html<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"http:\/\/nedbatchelder.com\/code\/coverage\/cmd.html\">http:\/\/nedbatchelder.com\/code\/coverage\/cmd.html<\/a><br \/>\n<a href=\"http:\/\/nedbatchelder.com\/code\/coverage\/source.html\">http:\/\/nedbatchelder.com\/code\/coverage\/source.html<\/a><\/p>\n<h2>Usage with nose<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-bash\">$ pip install nose nose-cov\n\n# output terminal\n$ nosetests --with-cov --cov haul tests\/\n\n# output html\n$ nosetests --with-cov --cov-report html --cov haul tests\/ <\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>coveralls.io \u8dd1 python project \u7684\u8986\u84cb\u7387\u5c31\u662f\u7528 coverage.py nose \u4e5f\u662f\u7528 coverage.py \u57fa\u672c\u4e0a Python \u793e\u7fa4\u5e7e\u4e4e\u90fd\u662f\u7528\u9019\u500b ref: http:\/\/nedbatchelder.com\/code\/coverage\/ http:\/\/www.cnblogs.com\/coderzh\/archive\/2009\/12\/01\/1614874.html Install $ pip install coverage Configuration in .coveragerc [run] branch = True source = email_confirm_la omit = email_confirm_la\/migrations\/* email_confirm_la\/south_migrations\/* email_confirm_la\/tests\/* [run] \u5e95\u4e0b\u7684 include \u548c omit \u662f\u7528\u4f86\u6307\u5b9a filename pattern \u800c source \u662f\u7528\u4f86\u6307\u5b9a package \u6216\u76ee\u9304 omit \u662f\u300c\u5ffd\u7565\u300d\u7684\u610f\u601d ref: http:\/\/nedbatchelder.com\/code\/coverage\/config.html Usage # \u6703\u81ea\u52d5\u5957\u7528\u7576\u524d\u76ee\u9304\u4e0b\u7684&hellip; <a href=\"https:\/\/vinta.ws\/code\/coverage-py-python-code-coverage.html\" class=\"more-link\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":773,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[2,45],"class_list":["post-34","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-about-python","tag-python","tag-testing"],"_links":{"self":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":0,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/34\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media\/773"}],"wp:attachment":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/categories?post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/tags?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}