gpt4 book ai didi

python - 用 Nose 重复单次或多次测试

转载 作者:太空狗 更新时间:2023-10-29 19:36:04 25 4
gpt4 key购买 nike

类似于this question ,我想让 Nose 运行一个测试(或所有测试)n 次——但不是并行。

我在一个项目中有几百个测试;有些是一些简单的单元测试。其他是具有一定程度并发性的集成测试。在调试测试时,我经常想更努力地“打击”测试; bash 循环有效,但会产生大量困惑的输出——不再是漂亮的单个“。”对于每个通过的测试。能够在某些试验中击败选定的测试似乎是要求 Nose 做的一件很自然的事情,但我在文档中的任何地方都找不到它。

让 Nose 执行此操作的最简单方法是什么(除了 bash 循环)?

最佳答案

您可以 write a nose test as a generator ,然后 nose 将运行每个函数产生了:

def check_something(arg):
# some test ...

def test_something():
for arg in some_sequence:
yield (check_something, arg)

使用 nose-testconfig ,您可以将测试运行次数设为命令行参数:

from testconfig import config

# ...

def test_something():
for n in range(int(config.get("runs", 1))):
yield (check_something, arg)

您可以从命令行调用,例如

$ nosetests --tc=runs:5

...不止一次运行。

或者(但也使用 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 ...

然后,如果您想将测试分成不同的组,每个组都有自己的运行次数命令行参数:

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 ...

你可以这样调用:

$ nosetests --tc=foo:3 --tc=bar:7

关于python - 用 Nose 重复单次或多次测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com