ale*_*cxe 11 python testing django nose pytest
我们有一个庞大的测试代码库,其中包含超过1500个Python/Django应用程序测试.大多数测试用于factory-boy为项目模型生成数据.
目前,我们正在使用nose测试运行器,但是可以切换到py.test.
问题是,当运行部分测试时,测试组合会遇到意外的测试失败,这些失败在单独运行所有测试或这些测试时都不会被重现.
看起来测试实际上是耦合的.
问题:是否可以自动检测项目中的所有耦合测试?
我目前的想法是以不同的随机组合或顺序运行所有测试并报告失败,可以nose或py.test帮助吗?
要获得明确答案,您必须完全隔离其他测试.
使用pytest,这是我使用的,您可以实现首先运行它的脚本,--collect-only然后使用返回的测试节点ID pytest为每个脚本启动单独运行.对于1500次测试,这将花费很长时间,但只要您在每次单独测试之间完全重新创建系统状态,它就应该完成工作.
对于近似答案,您可以尝试以随机顺序运行测试,并查看有多少开始失败.我最近有一个类似的问题,所以我尝试了两个pytest插件 - pytest-randomly和pytest-random:https
:
//pypi.python.org/pypi/pytest-randomly/ https://pypi.python.org/pypi/pytest-random/
从两者pytest-randomly看起来,看起来更成熟,甚至支持通过接受seed参数重复某个顺序.
这些插件在测试顺序随机化方面做得很好,但是对于大型测试套件来说,完全随机化可能不是很有效,因为你有太多的失败测试但你不知道从哪里开始.
我编写了自己的插件,允许我控制测试可以随机改变顺序的级别(模块,包或全局).它被称为pytest-random-order:https://pypi.python.org/pypi/pytest-random-order/
更新.在你的问题中,你说在单独运行测试时无法重现失败.可能是您没有完全重新创建单个测试运行的环境.我认为一些测试可以让状态变脏.每个测试用例都有责任根据需要设置环境,并且由于性能开销而不一定要在之后进行清理,这会导致后续测试或仅仅因为这样做的负担.
如果测试X作为较大测试套件的一部分失败,然后在单独运行时不会失败,那么此测试X在为测试设置环境方面做得不够好.
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |