nodep测试依赖工具,移植到nose2
nose2dep的Python项目详细描述
用于测试依赖项的nose2插件
这是基于https://github.com/zitrax/nose-dep/,移植到nose2并稍加调整。
此插件允许您表示测试之间的依赖关系,或测试的首选运行顺序。尽管这违反了最佳实践(单元测试应该是独立的,并且可以独立运行的——ruby的minitest正是出于这个原因随机化了测试顺序),但它在某些情况下可能是有用的:
- 您可能会有非常慢的集成测试,在这种情况下,重做测试A所做的只是为了运行测试B,成本太高
- 您可能有“冒烟测试”,该测试应首先运行,以便在这些测试失败时可以跳过其余的测试—例如,如果您正在编写乘法库,而2*2不工作,则没有测试任何更复杂的内容的点
要使用它,请导入dependents decorator(from nose2dep.core import depends)并用@depends(before="test_name")、@depends(after=["test_name","test_name2"])或@depends(priority=6)(或这些参数的某些组合,例如@depends(before="test_name",after="test_other", priority=100))装饰测试用例。
依赖关系
若要声明测试需要在其他特定测试之前或之后运行,请将before=或after=参数传递给@depends。参数可以是:
- 另一个测试方法的名称作为字符串
- 另一个测试方法对象本身
- 以上任一项的列表
如果测试B依赖于测试A,并且测试A失败,那么B将被跳过(允许上面的“冒烟测试”用例)。
请注意,与原始nodep不同,所有依赖项都被视为软的。它们只会影响测试顺序,而不会强制包含。例如,如果我们有:
@depends(after=test_b) def test_a: pass def test_b: pass
并按b,a的顺序运行所有测试。但是,如果您只运行test_a,它将不会拉入test_a以满足依赖性-它将只运行test_a。
优先级
每个测试可以被赋予整数优先级(默认为50),并且测试将按从低到高的顺序运行。依赖项优先,因此总的顺序为:
- 优先级低于或等于默认值的所有测试,这些测试不属于按优先级先排序后按名称排序的任何依赖关系链的一部分。
- 按顺序排列优先级组,而每个优先级组的内部顺序与点1相同。
- 优先级高于默认值的所有测试,这些测试不属于按优先级先排序后按名称排序的任何依赖关系链。
注意:目前不支持python 2.6和3.2。适用于2.7和3.3+。