[英]Python test framework with support of non-fatal failures
我正在评估用于自动化系统测试的“测试框架”; 到目前为止,我正在寻找一个 python 框架。 在 py.test 或nose 中,我看不到我从谷歌测试框架中知道的 EXPECT 宏之类的东西。 我想在一个测试中做出几个断言,而不是在第一次失败时中止测试。 我是否在这些框架中遗漏了一些东西,或者这不起作用? 有人对可用于自动化系统测试的 python 测试框架有什么建议吗?
我想要类似的功能测试,我正在使用鼻子。 我最终想出了这个:
def raw_print(str, *args):
out_str = str % args
sys.stdout.write(out_str)
class DeferredAsserter(object):
def __init__(self):
self.broken = False
def assert_equal(self, expected, actual):
outstr = '%s == %s...' % (expected, actual)
raw_print(outstr)
try:
assert expected == actual
except AssertionError:
raw_print('FAILED\n\n')
self.broken = True
except Exception, e:
raw_print('ERROR\n')
traceback.print_exc()
self.broken = True
else:
raw_print('PASSED\n\n')
def invoke(self):
assert not self.broken
换句话说,它打印出指示测试是通过还是失败的字符串。 在测试结束时,您调用实际执行真正断言的 invoke 方法。 这绝对不是可取的,但我还没有看到可以处理这种测试的 Python 测试框架。 我也没有想出如何编写鼻子插件来做这种事情。 :-/
你征求了建议,所以我会建议机器人框架。
奇怪的是,听起来您正在寻找类似于我的claft
(命令行和过滤器测试器)的东西。 类似的东西,但要成熟得多。
claft
(到目前为止)只是我写的一个玩具,用来帮助学生进行编程练习。 这个想法是为练习提供简单的配置文件,这些文件以合理的人类可读(和声明性而非程序化)的方式表示程序的需求,同时也适合自动化测试。
claft
运行所有定义的测试,为每个测试提供参数和输入,检查返回代码,并根据正则表达式模式匹配输出 ( stdout
) 和错误消息 ( stderr
)。 它收集列表中的所有故障,并在每个套件的末尾打印整个列表。
它尚未对输入/输出序列进行任意对话。 到目前为止,它只是输入数据,然后读取所有数据/错误。 它也不实现超时,事实上,甚至不捕获失败的执行尝试。 (到目前为止,我确实说过它只是一个玩具,不是吗?)。 我还没有实现对安装、拆卸和外部检查脚本的支持(尽管我有这样做的计划)。
布莱恩对“机器人框架”的建议可能更适合您的需求; 尽管快速浏览它表明它比我想要的要复杂得多。 (我需要让事情足够简单,这样刚接触编程的学生可以专注于他们的练习,而不是花很多时间来设置他们的测试工具)。
欢迎您查看claft
并使用它或从中导出您自己的解决方案(它是 BSD 许可的)。 显然,欢迎您回馈。 (它在 [bitbucket]:( http://www.bitbucket.org/ )上,所以你可以使用 Mercurial 来克隆,并分叉你自己的存储库......如果你想让我看看,并提交一个“拉请求”将您的更改合并回我的仓库)。
再说一次,也许我误读了您的问题。
为什么不(在unittest
,但这应该适用于任何框架):
class multiTests(MyTestCase):
def testMulti(self, tests):
tests( a == b )
tests( frobnicate())
...
假设您实现了 MyTestCase 以便将函数包装到
testlist = []
x.testMulti(testlist.append)
assert all(testlist)
如果您在命令行中传递-x
选项,nose 只会在第一次失败时中止。
测试.py:
def test1():
assert False
def test2():
assert False
没有 -x 选项:
C:\temp\py>C:\Python26\Scripts\nosetests.exe test.py FF ====================================================================== FAIL: test.test1 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 2, in test1 assert False AssertionError ====================================================================== FAIL: test.test2 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 5, in test2 assert False AssertionError ---------------------------------------------------------------------- Ran 2 tests in 0.031s FAILED (failures=2)
使用 -x 选项:
C:\temp\py>C:\Python26\Scripts\nosetests.exe test.py -x F ====================================================================== FAIL: test.test1 ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Python26\lib\site-packages\nose-0.11.1-py2.6.egg\nose\case.py", line 183, in runTest self.test(*self.arg) File "C:\temp\py\test.py", line 2, in test1 assert False AssertionError ---------------------------------------------------------------------- Ran 1 test in 0.047s FAILED (failures=1)
您可能需要考虑查看鼻子文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.