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

11
我还没有看到关于这个具体问题(Behave测试框架的测试覆盖工具)的答案,也没有看到任何谷歌搜索结果提供足够的答案。因此...
如何从Behave获取代码覆盖率报告?我很难相信没有Python开发者使用BDD方法论,更难以相信那些正在使用BDD的Python开发者没有从功能测试中获得代码覆盖率统计数据。Coverage.py能否用于驱动Behave生成代码覆盖率? 如何实现?

你好 @fenreer,你解决了如何让 behave 与覆盖率一起工作的问题吗?被接受的答案对我没有帮助。 - José María
4个回答

2

继David上面的建议之后。

假设要测试的代码在一个应用程序目录中,请将以下内容添加到您的.coveragerc文件中:

[run]
source=app/

从终端执行:

coverage run $(which behave);

您可以像平常一样使用覆盖率报告或覆盖率HTML。 如果您未在.coveragerc文件中指定应用程序目录,则覆盖范围将测试所有与您的behave安装本地Python库。


2
我不知道如何使用behave,但是我使用Cucumber进行BDD,我认为它们可能非常相似。因此,我认为您应该能够在测试覆盖率方面使用behave。您需要指定要包含在文件中的哪个文件。(我用cucumber)。请查看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

Behave可以生成Junit覆盖率数据,覆盖率包可以将多个测试运行的数据组合起来,并生成HTML报告供您查看或自动发布到您的CI环境。

以下是我目前用于生成、组合和报告Behave覆盖率的语句:

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 报告,其中包括所有组合覆盖数据。

"

0

另一个选项是使用覆盖率来运行behave的主脚本:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接