Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
支持非致命故障的Python测试框架_Python_Testing_Assert_Nose - Fatal编程技术网

支持非致命故障的Python测试框架

支持非致命故障的Python测试框架,python,testing,assert,nose,Python,Testing,Assert,Nose,我正在评估自动化系统测试的“测试框架”;到目前为止,我正在寻找一个python框架。 在py.test或nose中,我看不到类似于我从google测试框架中知道的EXPECT宏的东西。 我希望在一个测试中做出几个断言,同时不要在第一次失败时中止测试。 我是否在这些框架中遗漏了一些东西,或者这不起作用? 有人对可用于自动系统测试的python测试框架有什么建议吗?如果您在命令行中通过-x选项,nose只会在第一次失败时中止 test.py: def test1(): assert Fals

我正在评估自动化系统测试的“测试框架”;到目前为止,我正在寻找一个python框架。 在py.test或nose中,我看不到类似于我从google测试框架中知道的EXPECT宏的东西。 我希望在一个测试中做出几个断言,同时不要在第一次失败时中止测试。 我是否在这些框架中遗漏了一些东西,或者这不起作用?
有人对可用于自动系统测试的python测试框架有什么建议吗?

如果您在命令行中通过
-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) 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) C:\temp\py>C:\Python26\Scripts\nostests.exe test.py FF ====================================================================== 失败:test.test1 ---------------------------------------------------------------------- 回溯(最近一次呼叫最后一次): 文件“C:\Python26\lib\site packages\nose-0.11.1-py2.6.egg\nose\case.py”,第行 183,运行测试中 自检(*self.arg) test1中第2行的文件“C:\temp\py\test.py” 断言错误 断言错误 ====================================================================== 失败:test.test2 ---------------------------------------------------------------------- 回溯(最近一次呼叫最后一次): 文件“C:\Python26\lib\site packages\nose-0.11.1-py2.6.egg\nose\case.py”,第行 183,运行测试中 自检(*self.arg) test2中第5行的文件“C:\temp\py\test.py” 断言错误 断言错误 ---------------------------------------------------------------------- 在0.031s内运行了2次测试 失败(失败=2) 使用-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) 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) C:\temp\py>C:\Python26\Scripts\nostests.exe test.py-x F ====================================================================== 失败:test.test1 ---------------------------------------------------------------------- 回溯(最近一次呼叫最后一次): 文件“C:\Python26\lib\site packages\nose-0.11.1-py2.6.egg\nose\case.py”,第行 183,运行测试中 自检(*self.arg) test1中第2行的文件“C:\temp\py\test.py” 断言错误 断言错误 ---------------------------------------------------------------------- 在0.047秒内运行了1次测试 失败(失败=1)
<>你可能想考虑复习.

我想用类似的函数来测试我用鼻子做的测试。我终于想到了这个:

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测试框架可以处理这种测试。我也没有想到如何编写一个nose插件来完成这类工作-/

你征求了我的建议,所以我会提出建议

奇怪的是,听起来您正在寻找类似my(命令行和过滤器测试仪)的东西。有点像,但要成熟得多

到目前为止,
claft
只是我为帮助学生进行编程练习而编写的一个玩具。其思想是为练习提供简单的配置文件,这些文件代表程序的需求,具有合理的可读性(声明性而非编程性),同时也适用于自动化测试

claft
运行所有定义的测试,为每个测试提供参数和输入,检查返回代码,并根据正则表达式模式匹配输出(
stdout
)和错误消息(
stderr
)。它收集列表中的所有故障,并在每个套件的末尾打印整个列表

它还不能对输入/输出序列进行任意对话。到目前为止,它只是输入数据,然后读取所有数据/错误。它也不实现超时,事实上,甚至不捕获失败的执行尝试。(到目前为止,我确实说过这只是一个玩具,不是吗?)。我还没有实现对安装、拆卸和外部检查脚本的支持(尽管我计划这样做)

布莱恩关于“机器人框架”的建议可能更符合你的需要;尽管快速浏览一下它表明它比我想要的要复杂得多。(我需要让事情变得足够简单,让刚接触编程的学生能够专注于他们的练习,而不是花很多时间在设置测试工具上)

欢迎您查看
claft
并使用它或从中派生出您自己的解决方案(它是BSD许可的)。很明显,欢迎你回馈。(它位于[bitbucket]:()上,因此您可以使用Mercurial进行克隆,并提供您自己的响应…如果您希望我考虑将您的更改合并回我的repo,请提交“拉请求”)

那么,也许我又误解了你的问题。

为什么不(在
unittest
中,但这在任何框架下都应该有效):

假设实现了MyTestCase,以便将函数包装到

testlist = []
x.testMulti(testlist.append)
assert all(testlist)

问题是关于一个测试中的多个断言,有些可能会失败,而不是关于多个测试。看到了你对我答案的评论。我不明白你到底想做什么-我回答说“我想在一个测试中做几个断言,而不是在第一次失败时中止测试。”我只是给出了一个框架方法,显然你可以在一个列表中捕获所有异常信息,如果你想在异常处理程序中捕获的话。我更新了我的答案。你的答案到哪里去了?你删除了吗?还有对它的评论(如果我没记错的话,来自多个用户),好主意。既然我们决定使用nose,插件就太好了。由于某些原因,我不能使用关键字驱动的测试框架。但对于未来的项目,我会记住这一点。谢谢