与支持的非致命性故障的Python测试框架(Python test framework with s

2019-08-01 22:53发布

我自动化系统测试评估“测试框架”; 到目前为止,我在寻找一个Python框架。 在py.test或鼻子,我不能看到像从谷歌测试框架的处置宏,我知道。 我想提出几个断言在一个测试,而不是在第一次失败中止测试。 我失去了在这些框架的东西或者这是否不行? 是否有人对可用于自动化系统测试蟒蛇测试framworks建议?

Answer 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测试框架,可以处理这种测试。 我也没有得到解决,以搞清楚如何写一个鼻子插件做这种事情。 : - /



Answer 2:

你问的建议,所以我会建议机器人框架 。



Answer 3:

奇怪的是,它听起来就像你正在寻找的东西像我claft (命令行和过滤器测试仪)。 类似的东西,但更为成熟。

claft是(到目前为止)只是一个玩具,我写来帮助学生与编程练习。 我们的想法是提供练习与表示在其是合理的人类可读的(和声明,而不是编程),同时也适合于自动化测试方面程序的要求简单的配置文件。

claft运行所有定义的测试中,提供参数和输入到每个,检查返回代码,和匹配输出( stdout )和错误消息( stderr针对正则表达式模式)。 它收集列表中的所有失败的,在每套房的最后打印的整个列表。

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

“机器人框架”的布赖恩的建议可能是您的需求更好; 虽然遍览它表明,这是相当多的参与比我要为我的目的。 (我需要保持的东西很简单,学生新的节目可以专注于自己的训练,而不是花费大量的时间与建立自己的测试工具的战斗)。

欢迎你来看看claft和使用它或从那里获得自己的解决方案(这是BSD许可)。 很明显,你会很欢迎回来贡献。 (这是对[到位桶] :( http://www.bitbucket.org/ ),所以你可以使用水银克隆,和叉子自己的程序存储库......并提交“拉入请求”如果你想让我看看合并更改回我的回购)。

话又说回来也许我误解你的问题。



Answer 4:

为什么不(在unittest ,但这应该在任何框架的工作):

class multiTests(MyTestCase):
    def testMulti(self, tests):
        tests( a == b )
        tests( frobnicate())
        ...

假设你实现MyTestCase中,这样的功能被包裹成

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


Answer 5:

如果你通过鼻子将只在第一次失败中止-x在命令行选项。

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)

您可能要考虑审查的鼻子文档 。



文章来源: Python test framework with support of non-fatal failures