繁体   English   中英

Python运行连续测试或每次测试多次

[英]Python run unittests continuously or each test multiple times

我编写了单元测试用例来测试我的应用程序。 它正在按预期工作,没有问题。

下面是一些示例测试用例

import os
import unittest

class CreateUser(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass
    def test_send_message(self):
        #my script goes here
        print "success"
if __name__ == '__main__':
    unittest.main()

如果我运行此测试它按预期执行但我想要运行此测试用例'N'没有时间

因为我在main函数中添加了for循环,也只运行了一次,代码我使用如下

 if __name__ == '__main__':
    for i in range(1, 5):
         unittest.main()  

我还使用schedule lib每10分钟运行一次测试,但没有运气

有没有办法多次运行这个测试用例或任何其他我缺少的工作或任何其他连续构建工具来实现这个?

提前致谢

首先,一点点谨慎。

为什么要运行相同的测试五次? 我不想在没有看到你的代码的情况下做出假设,但这是一个非常严重的代码味道。 单元测试必须是可重复的 ,如果连续运行五次并不会产生与运行一次相同的结果,那么测试中的某些内容是不可重复的。 特别是,如果测试的早期运行会产生后续运行所使用的副作用,或者如果涉及某种随机数,则这两种情况都是非常糟糕的情况需要修复而不是多次运行测试。 鉴于我们在这里提供的信息,最好的建议似乎不是多次运行该测试!

话虽如此,你有几个不同的选择。

  1. 把循环放在测试中

假设有五次调用函数有一些有意义的事情,那么执行以下操作是完全合理的:

def test_function_calls(self):
    for _ in xrange(1, 5):
        self.assertTrue(f())
  1. 由于您提到了nose标记,因此您有一些参数化测试选项,通常包括对不同的输入值运行相同的(代码)测试。 如果你使用像https://github.com/wolever/nose-parameterized这样的东西,那么你的结果可能是这样的:
@parameterized.expand([('atest', 'a', 1), ('btest', 'b', 2)])
def test_function_calls(self, name, input, expected):
    self.assertEqual(expected, f(input))

顾名思义,参数化测试通常用于检查具有多个数据的一个代码测试。 如果您只想让测试运行几次,那么您可以拥有一个包含虚拟数据的列表,但这是另一个可疑的代码结构,可以追溯到我的原始点。

附加说明:几乎所有“连续”构建工具都设置为触发构建/测试/等。 在特定条件或事件上,例如将代码提交到存储库时。 他们只是不断地进行测试是非常不寻常的。

我已尽力在这里回答你的问题,但我觉得缺少了一些东西。 您可能想要明确说明您要完成的工作以获得最佳答案。

我喜欢在一个简单的bash循环中运行这种东西。 当然,这只适用于你使用bash:

while true; do python setup.py test ; done

道歉,作为新用户,我无法评论。 我只想回应GrandOpener对你想要重新执行测试的担忧。 我本人处于类似的情况,我有'不可靠'的测试。 我用不可靠或不确定的测试看到的问题是,很难证明你已经修复它们,因为它们可能只会失败1/100次。

我的想法是,我将执行有问题的测试X次,建立一个在失败之前发生了多少次测试迭代的分布。 有了这个我认为我要么能够a)使用失败前的最大迭代次数作为检查后不可靠性'修复'的迭代次数或b)使用一些花哨的统计方法来证明可靠性'修复'可能是Y%解决了这个问题。

没有恶意或屈尊俯就,GrandOpener如何证明他想象中的不可靠测试已被修复?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM