zoukankan      html  css  js  c++  java
  • 20190705-Python数据驱动之DDT

    DDT

    ddt 是第三方模块,需安装, pip install ddt

    DDT包含的装饰器

    包含一个类装饰器@ddt和两个方法装饰器@data和@file_data

    通常情况下,@data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

    @data([a,b],[c,d])

    那么[a,b]和[c,d]各运行一次用例

    @data([a,b],[c,d])

    如果没有@unpack,那么[a,b]当成一个参数传入用例运行

    如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递,具体情况实例

    import unittest
    from ddt import ddt,data,unpack,file_data
    #data([a,b],[c,d])
    #如果没有@unpack,那么[a,b]当成一个参数传入用例运行
    
    #如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
    @ddt#类装饰器
    class MyTesting(unittest.TestCase):
        def setUp(self):
            print('this is the setUp')
        @data([1,2,3])#方法装饰器
        def test_1(self,value):
            print('value=',value)
    
        @data([3,2,1],[5,3,2],[10,4,2])
        @unpack
        def test_2(self,a,b,c):
            print('a=%s,b=%s,expected=%s'%(a,b,c))
            actual = int(a) - int(b)
            expected = int(c)
            self.assertEqual(actual, expected)
    
        @data([2,3],[4,5])
        def test_3(self,a,b):
            self.assertEqual(a,b)
    
        @data({'a':'first','b':'second'})
        @unpack
        def test_4(self,a,b):
            print('test_4',a,b)
    
        @file_data("test_data_list.json")#方法装饰器
        def test_5(self,value):
            print('test_5_file_data,value=',value)
    
        def tearDown(self):
            print('this is tearDown')
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)

    执行分析

    test_1

    1. 执行次数:1次
    2. 参数值:value=[1,2,3]
    3. 执行结果:pass

    test_2

    1. 执行次数:3次
    2. 参数值:第一轮a=3,b=2,c=1;第二轮a=5,b=3,c=2;第三轮a=10,b=4,c=2
    3. 执行结果:第一轮、第二轮通过,第三轮失败FAIL
    4. 失败原因:self.assertEqual(a-b = c)失败

    test_3

    1. 执行次数:2次
    2. 参数值:第一轮a=[2,3];第二轮a=[4,5]
    3. 执行结果:执行错误ERROR
    4. 失败原因:缺少参数b

                         i.            由于没有加@unpack, 虽然还是会被理解成2组测试数据,但是[2,3]作为一个整体被传给了a, 因为b就没有值传入了,所以一执行后报了  TypeError: test_compare() missing 1 required positional argument: 'b'  这句错

    test_4

    1. 执行次数:1次
    2. 参数值:a = first,b=second
    3. 执行结果:pass

    test_5

    1. 执行次数:test_data_list.json文件里面的数据数
    2. 参数值:每次value = test_data_list.json里面的一条数据
    3. 执行结果:pass

    @data里面的数据格式

    @data里面的数据可以是字典,列表,字典(注意字典的key值一定要跟参数名对应)

    Json文件创建内容参考如下(tip,将文件的后缀名改为.json):

    [
            "邓肯||蒂姆",
            "乔丹||迈克尔",
            "库里||斯蒂芬",
            "杜兰特||凯文",
            "詹姆斯||勒布朗"
        ]

    原文参考:https://www.cnblogs.com/nancyzhu/p/8563884.html

  • 相关阅读:
    Apache服务器的简单配置与安全策略
    Linux下的ICMP反弹后门:PRISM
    项目年度任务失败总结
    SpringBoot下配置Druid
    ftm国际化解决方案
    SpringBoot自动装配源码解析
    log4j到log4j2升级迁移方案
    Linux常用命令记录
    MySQL安装后无法用root用户访问的问题
    html实体命名
  • 原文地址:https://www.cnblogs.com/hyj691001/p/11138339.html
Copyright © 2011-2022 走看看