我正在评估自动化系统测试的“测试框架”,目前我正在寻找一个Python框架。 在py.test或nose中,我看不到类似于我从谷歌测试框架中了解的EXPECT宏。 我想在一个测试中进行多个断言,而不会在第一个失败时终止测试。 这些框架中是否有我遗漏的东西或者这不起作用? 有没有人对可用于自动化系统测试的Python测试框架有建议?
我正在评估自动化系统测试的“测试框架”,目前我正在寻找一个Python框架。 在py.test或nose中,我看不到类似于我从谷歌测试框架中了解的EXPECT宏。 我想在一个测试中进行多个断言,而不会在第一个失败时终止测试。 这些框架中是否有我遗漏的东西或者这不起作用? 有没有人对可用于自动化系统测试的Python测试框架有建议?
我希望能够找到类似的东西来进行使用nose进行功能测试。最终,我想出了以下解决方案:
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
你提到了需要建议,那我就给你推荐一下机器人框架。
奇怪的是,你似乎在寻找类似于我的claft
(命令行和过滤器测试工具)的东西。它与之类似但更加成熟。
claft
(到目前为止)只是我为帮助学生完成编程练习而编写的玩具。其想法是提供简单的配置文件来表示程序要求的术语,这些术语相对人类可读(而不是程序化),同时也适合自动化测试。
claft
运行所有定义的测试,为每个测试提供参数和输入,检查返回代码,并将输出(stdout
)和错误消息(stderr
)与正则表达式模式匹配。它将所有失败项收集到列表中,并在每个测试套件结束时打印整个列表。
目前它还不能执行任意的输入/输出序列对话。到目前为止,它只是将数据输入,然后读取所有的数据/错误信息。它也没有实现超时功能,事实上,它甚至没有捕获失败的执行尝试。(我说过它只是一个玩具,到目前为止,是吗?)我还没有实现支持设置、拆卸和外部检查脚本的功能(虽然我有计划这样做)。
Bryan提出的“机器人框架”可能更适合您的需求;不过快速浏览一下,它似乎比我想要的要复杂得多。(我需要保持足够简单,以便新手编程的学生可以专注于他们的练习,而不是花费大量时间来设置他们的测试工具)。
您可以查看claft并使用它或从中派生自己的解决方案(它是BSD许可证)。显然,您可以贡献回来。(它在[bitbucket]上:(http://www.bitbucket.org/),所以您可以使用Mercurial克隆和分叉您自己的存储库...如果您希望我查看将您的更改合并回我的存储库,请提交“拉取请求”)。
不过也许我误解了你的问题。
class multiTests(MyTestCase):
def testMulti(self, tests):
tests( a == b )
tests( frobnicate())
...
testlist = []
x.testMulti(testlist.append)
assert all(testlist)
如果您在命令行中传递了-x
选项,那么nose将只会在第一个失败时终止。
test.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)
您可能需要考虑查看nose文档。