与这个问题类似,我想让Nose运行一次测试(或所有测试)n- 但不是并行运行.
我在一个项目中有几百个测试; 一些是一些简单的单元测试.其他是具有某种程度并发性的集成测试.经常在调试测试时我想更"努力"地测试一下; 一个bash循环工作,但会产生很多杂乱的输出 - 没有更好的单一"." 每次通过测试.有能力在一定数量的试验中击败所选择的测试似乎是让Nose做的自然事情,但我没有在文档的任何地方找到它.
让Nose做到这一点最简单的方法是什么(除了bash循环)?
Zer*_*eus 16
您可以将鼻子测试作为生成器编写,然后鼻子将运行每个函数:
def check_something(arg):
# some test ...
def test_something():
for arg in some_sequence:
yield (check_something, arg)
Run Code Online (Sandbox Code Playgroud)
使用nose-testconfig,您可以使测试运行的数量成为命令行参数:
from testconfig import config
# ...
def test_something():
for n in range(int(config.get("runs", 1))):
yield (check_something, arg)
Run Code Online (Sandbox Code Playgroud)
您可以从命令行调用例如
$ nosetests --tc=runs:5
Run Code Online (Sandbox Code Playgroud)
......不止一次跑.
或者(也可以使用nose-testconfig),你可以编写一个装饰器:
from functools import wraps
from testconfig import config
def multi(fn):
@wraps(fn)
def wrapper():
for n in range(int(config.get("runs", 1))):
fn()
return wrapper
@multi
def test_something():
# some test ...
Run Code Online (Sandbox Code Playgroud)
然后,如果您想将测试划分为不同的组,每个组都有自己的命令行参数来表示运行次数:
from functools import wraps
from testconfig import config
def multi(cmd_line_arg):
def wrap(fn):
@wraps(fn)
def wrapper():
for n in range(int(config.get(cmd_line_arg, 1))):
fn()
return wrapper
return wrap
@multi("foo")
def test_something():
# some test ...
@multi("bar")
def test_something_else():
# some test ...
Run Code Online (Sandbox Code Playgroud)
你可以这样打电话:
$ nosetests --tc=foo:3 --tc=bar:7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6677 次 |
| 最近记录: |