用于在多个fixture上重复测试函数的快速unittest兼容框架

repeated-test的Python项目详细描述


Join the chat at https://gitter.im/epsy/repeated_testhttps://travis-ci.org/epsy/repeated_test.svg?branch=masterhttps://coveralls.io/repos/github/epsy/repeated_test/badge.svg?branch=master

repeated_test允许您很好地编写将相同函数应用于 多组参数。

例如:

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,expected,*terms):self.assertEqual(expected,sum(terms))a=10,5,5b=15,7,8c=42,1,1

结果与unittest兼容,并在 出错时的回溯:

$ python -m unittest my_tests
..F
======================================================================
FAIL: test_c (my_tests.my_fixtures)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "my_tests.py", line 9, in my_fixtures
    c = 42, 1, 1
  File "my_tests.py", line 5, in _test
    self.assertEqual(expected, sum(terms))
AssertionError: 42 != 2

----------------------------------------------------------------------
Ran 3 tests in 0.002s

FAILED (failures=1)

您可以使用:

$ pip install --user repeated_test

帮助/问题

你可以在 gitter.im chatroom

如果您发现任何问题或有任何请求,请使用 GitHub Issues

参考

简介

python的unittest模块有助于执行各种形式的自动化测试。 一个编写从unittest.TestCase派生的类,并添加各种test_xyz方法, 测试运行者运行这些测试,记录成功的测试,失败的 测试并跟踪这些失败的原因。

有时进行一次大规模的测试是有意义的 不同的输入。本单元旨在提供处理 这种情况。

它允许您将fixture(输入)作为 类,并将测试函数绑定到它们。对每个 你将看到下面的固定装置。生成的类是一个unittest.TestCase子类,所以它是 与unittest和其他unittest兼容的测试运行程序兼容。

构建测试用例

为了生成unittest.TestCaserepeated_test要求您:

  • 子类repeated_test.Fixtures
  • 编写一个_test方法,它使用一些参数 unittest.TestCase它需要的方法
  • 直接在类主体中分配fixture,然后将其解包为 _test方法的参数

您可以在测试函数中使用任何unittest.TestCase方法,例如assertEqual() 诸如此类。

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,arg1,arg2,arg3):self.assertEqual(...,...)Ps='p1','p2','p3'# _test(*Ps) will be called, ie. _test('p1', p2', 'p3')Qs='q1','q2','q3'# _test(*Qs) will be called, ie. _test('q1', q2', 'q3')

确保fixture元组提供正确数量的参数 对于您的_test方法,除非它有一个*args参数。

命名和转义

您可以根据自己的喜好命名测试元组,尽管它们可能不是以 test__。它们被复制到生成的unittest.TestCase类中,并测试 为它们创建方法。它们的名字是元组的名字,前缀是 test_

test__开头的成员直接复制到 生成的unittest.TestCase类,而不被视为fixture。你可以用这个 在您的fixture或您不希望的常量中插入常规测试 作为测试:

fromrepeated_testimportFixturesclassmy_fixtures(Fixtures):def_test(self,arg1,arg2,arg3):self.assertEqual(...,...)deftest_other(self):self.assertEqual(3,1+2)_spam='spam, bacon and eggs'# _spam won't be treated as a fixture, so _test(*_spam) won't be calledham=_spam,_spam,_spam

如果需要,甚至可以使用self._test(...)调用测试函数。

分离测试和设备

可以使用fixtures类 with_test方法:

classmy_fixtures(Fixtures):_test=None...@my_fixtures.with_testdefother_test(self,arg1,arg2,arg3):self.assertEqual(...,...)

当函数出现在任何类之外时,它将用作 生成的unittest.TestCase类,因此请记住它需要一个self参数。

您可以任意多次重用fixture类。

如果这样指定测试函数,则可以设置_test = None 在你的装置定义中。但是,它不会被unittest发现, 所以regular test methods不会运行。 省略_test会完全引发错误,以防止意外发生 禁用测试。

将函数用作fixture

在fixture元组中使用函数 计划。如果fixture元组中有一个函数,则可以 使用tupdecorator:

fromrepeated_testimportFixtures,tupclassmy_tests(Fixtures):def_test(self,func,arg1,arg2):self.assertEqual(...,...)@tup('arg1','arg2')defham():pass# equivalent todef_ham():passham=_ham,'arg1','arg2'
用另一个类替换unittest.testcase

可以使用WithTestClass(cls)将unittest.testcase替换为另一个类。

例如,如果您想使用unittest2

importunittest2fromrepeated_testimportWithTestClassclassmy_tests(WithTestClass(unittest2.TestCase)):...

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java中使用ENUM生成随机数   Spring4REST应用程序使用Java配置(无xml)IllegalArgumentException   java在Jar中加载新的FXML   java无法将字符串转换为long(时间戳)或long转换为字符串   流我如何通过Java中的grpc(如broadcase)将持续响应从服务器发送到客户端?   java类型不匹配:无法从一个连接转换到另一个连接   带有组织名称、用户名和密码的java Spring引导登录页面   java从Android设备向Windows CE设备发送/获取字符串数据?   java Selenium代码在localhost上运行良好,但无法捕获Jenkins上的StaleElementReferenceException   jodatime如何获取与下一个小时、分钟对应的日期时间?   java在一个int数组中,如何返回对应于最低值的索引?   在web3j中,如何为运行时发现的数组类型创建TypeReference?   java如何仅在Spring Security上对特定URL强制使用https?   java如何添加全局动作事件侦听器?