[OpenStack UT]单元测试之testscenarios

看heat code, 看到testscenarios的使用, 好奇的研究了下

testscenarios 其实实现的就是这样一种框架,在class中给scenarios赋值,描述出不同场景, 测试case就可以通过testscenarios框架自动生成针对这些scenarios不同test, 从而达到测试不同场景的目的。

建议直接从https://pypi.python.org/pypi/testscenarios/ 下载最新的testscenarios code看, code结构非常简单.

Code中主要就两个文件lib/testscenarios/scenarios.py和lib/testscenarios/testcase.py 


scenarios.py 是core部分,讲的是如何生成scenarios cases的一些function, 下面例子中load_tests_apply_scenarios 就是其中一种对测试加载protocol进行适配来生成scenarios cases的一种方法, 如下例中, 把它赋给load_tests, 实现了load_tests protocol 的测试加载器就可以自动的把生成的scenarios cases加载到测试中.

testcase.py  讲述的是TestWithScenarios, TestWithScenarios可以说是对WithScenarios, unittest.TestCase组合封装, 可以更方便供使用者使用, 就是加了封装, testscenarios 在pypi上发布的包中doc目录下example.py就是一个使用TestWithScenarios很好的例子.  这里没有贴出来, 非常简单。

下面看看testscenarios在OpenStack项目里的使用,下面code摘自python-heatclient/heatclient/tests/test_template_format.py,用于示例讲述用法

load_tests = testscenarios.load_tests_apply_scenarios


class YamlParseExceptions(testtools.TestCase):

    scenarios = [
        ('scanner', dict(raised_exception=yaml.scanner.ScannerError())),
        ('parser', dict(raised_exception=yaml.parser.ParserError())),
        ('reader',
         dict(raised_exception=yaml.reader.ReaderError('', '', '', '', ''))),
    ]

    def test_parse_to_value_exception(self):
        text = 'not important'

        with mock.patch.object(yaml, 'load') as yaml_loader:
            yaml_loader.side_effect = self.raised_exception

            self.assertRaises(ValueError,
                              template_format.parse, text)

 关于本例中的mock.patch.object 和side_effect用法, 可参考我的另一博文http://blog.csdn.net/juvxiao/article/details/21562325

Line 1: load_tests 是unittest 库中的一个function,  它负责定制测试用例加载的方式,

class 中会对scenarios赋值, 为key-value组成的列表, value为dict。可像test传递一些值, 比如本例中的raised_exception

 这个例子实现的效果是会形成三个test case来运行, ‘scanner’ case 运行时 测试function中mock对象的side_effect为yaml.scanner.ScannerError();

‘parser’ case 运行时 测试function中mock对象的side_effect为yaml.scanner.ParserError(); ‘reader’ case 运行时 测试function中mock对象的side_effect为yaml.reader.ReaderError('', '', '', '', ''),


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值