• python ddt实现数据驱动一


    ddt是第三方模块,需安装,pip install ddt,ddt包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,如元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据

    import unittest
    from ddt import data, unpack, ddt


    @ddt
    class MyTesting(unittest.TestCase):
    def setUp(self):
    print('this is setUp')

    # @data(a,b),那么a和b各运行一次用例,下面的代码会打印出this is setUp,1,this is setUp,2,this is setUp,3
    @data(1, 2, 3)
    def test_1(self, value):
    print(value)

    # 如果没有@unpack,那么[a,b]当成一个参数传入用例运行,如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
    @data([3, 2, 1], [5, 3, 2], [10, 4, 6])
    @unpack
    def test_minus(self, a, b, expected):
    actual = int(a) - int(b)
    expected = int(expected)
    self.assertEqual(actual, expected)

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

    def tearDown(self):
    print('this is tearDown')


    # 这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值
    # 0 (静默模式) 1 (默认模式) 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
    if __name__ == '__main__':
    unittest.main(verbosity=2)

    @ddt
    class MyTest(unittest.TestCase):
    # @data()里的数据组可以为元组,list,字典
    @data((8, 6), (4, 0), (15, 6))
    @unpack
    def test_tuples(self, first, second):
    self.assertTrue(first > second)

    @data([30, 29], [40, 30], [5, 3])
    @unpack
    def test_list(self, first, second):
    self.assertTrue(first > second)

    @data({'first': 1, 'second': 3, 'third': 5},
    {'first': 4, 'second': 7, 'third': 8})
    @unpack
    def test_dicts(self, first, second, third):
    self.assertTrue(first < second < third)


    if __name__ == '__main__':
    unittest.main(verbosity=2)

    import unittest, csv
    from ddt import ddt, data, unpack

    def get_csv(filename):
    rows = []
    with open(filename, encoding='utf8') as f:
    readers = csv.reader(f)
    for row in readers:
    rows.append(row)
    return rows


    @ddt
    class MyTest(unittest.TestCase):
    # *get_csv('new.csv')是一个二维list,通过unpack分解成多个一维list
    @data(*get_csv('new.csv'))
    @unpack
    def test_data_csv(self, v1, v2, v3):
    print(v1)
    print(v2)
    print(v3)


    if __name__ == '__main__':
    unittest.main(verbosity=2)
  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/laosun0204/p/12018046.html
Copyright © 2020-2023  润新知