如何使用Behave从Python BDD功能测试获取代码覆盖率数据?
我没有找到这个具体问题的答案(Behave测试框架的测试覆盖工具),而且在谷歌搜索中也没有找到足够的答案。所以……
我该如何从Behave获取代码覆盖报告呢?我很难相信没有Python开发者在使用BDD方法论,更难相信那些使用BDD的Python开发者在进行功能测试时没有代码覆盖的统计数据。Coverage.py可以用来驱动Behave生成代码覆盖吗?怎么做呢?
4 个回答
还有一个选择,就是用覆盖率工具来运行behave的主脚本:
coverage run /path/to/lib/python2.7/site-packages/behave/__main__.py
当然,你需要在你的.coveragerc
文件中指定你想要包含哪些源文件。
接着David上面的建议。
假设你要测试的代码在一个应用程序的文件夹里,你需要在你的.coveragerc文件中添加以下内容:
[run]
source=app/
在终端中输入:
coverage run $(which behave);
然后你可以像平常一样使用coverage report或者coverage html。如果你在.coveragerc文件中没有指定应用程序的文件夹,coverage就会测试你安装的behave相关的所有Python库。
Behave可以生成JUnit的覆盖率数据,而coverage包可以把多次测试运行产生的数据合并起来,并生成一个HTML报告,你可以查看这个报告,或者在你的持续集成(CI)环境中自动发布。
下面是我目前用来生成、合并和报告覆盖率的命令:
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
选项运行behave会生成JUnit格式的输出,而--junit-directory
这个选项则告诉behave把这些JUnit数据存储到哪个地方。
运行coverage combine
命令会把所有的代码覆盖率数据合并成一个文件。
最后,运行coverage html
会生成一个漂亮的HTML报告,里面包含了所有合并后的覆盖率数据。
我不知道怎么用behave,但我用过Cucumber来做行为驱动开发(BDD),我觉得这两个应该差不多。所以我认为你应该可以在behave中使用覆盖率功能。你需要指定要包含哪个文件……(我在用Cucumber的时候是这样做的)。看看这个链接,也许对你有帮助。
希望这个能回答你的问题 :)
# .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