如何使用Behave从Python BDD功能测试中获取代码覆盖率数据?

时间:2014-04-11 18:10:21

标签: python code-coverage bdd coverage.py python-behave

我还没有看到这个具体问题(Test coverage tool for Behave test framework)的答案,我还没有看到任何谷歌搜索结果产生足够的答案。因此...

如何从Behave获取代码覆盖率报告?我发现很难相信没有使用BDD方法的Python开发人员,我发现更难以相信那些使用BDD的Python开发人员在没有功能测试的代码覆盖统计数据的情况下这样做。可以使用Coverage.py来驱动Behave以产生代码覆盖吗?怎么样?

4 个答案:

答案 0 :(得分:2)

我不知道如何使用行为,但我使用Cucumber用于BDD,我认为可能几乎相似。所以我认为你应该能够使用覆盖范围的行为。你必须指定要包含在文件中的文件..(我用它和黄瓜一起使用)。看看this是否有帮助。

希望这能回答你的问题:)

# .coveragerc to control coverage.py
[run]
parallel = True

# if you want to include tests append tests/*
include =
    src/*
    *src*

[paths]
source =
    src/
    */src

tests =
    tests/
    */tests

答案 1 :(得分:1)

继David的建议之后。

假设要测试的代码位于app目录中,请将以下内容添加到 .coveragerc 文件中:

[run]
source=app/

从终端:

coverage run $(which behave);

然后您可以正常使用覆盖率报告或覆盖率html。如果您未在 .coveragerc 文件中指定app dir,则coverage将测试您的行为安装本地的所有Python库。

答案 2 :(得分:0)

Behave可以生成junit覆盖数据,coverage package可以组合来自多个测试运行的数据,也可以生成HTML报告,您可以在CI环境中仔细阅读或自动发布。

以下是我目前用于生成,组合和报告coverage的语句:

cd your/repo/tests  # <-- Make sure you're inside your tests dir!
rm -rf behave-reports/*
behave --junit --junit-directory behave-reports
coverage combine
coverage html

rm -rf behave-reports/*强制删除了behave-reports /目录中的所有内容,这样我就可以保证获得新的覆盖率报告,或者根本不保证(在我的情况下会导致CI失败)。请注意,如果您在本地运行测试,则需要在.gitignore文件(或等效文件)中添加一个条目,这样您就不会添加和提交测试结果。

使用--junit运行行为将生成junit输出,而--junit-directory标志告诉您在磁盘上写入该junit数据的位置。

运行coverage combine会占用所有代码覆盖率并将其合并到一个覆盖文件中。

最后,coverage html会生成一个包含所有合并覆盖数据的漂亮html报告。

答案 3 :(得分:0)

另一个选项,使用coverage来运行behave的主脚本:

coverage run /path/to/lib/python2.7/site-packages/behave/__main__.py

当然,您需要在.coveragerc中指定要包含的源文件。