zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    linux sar 命令详解
    linux perf
    Linux下的内核测试工具——perf使用简介
    系统级性能分析工具 — Perf
    使用truss、strace或ltrace诊断软件的“疑难杂症”
    6.数组类型和数组指针类型
    5.二级指针
    4.const
    3.字符串
    C/C++ 错误笔记-如果要释放内存,必须拿到内存的首地址进行释放
  • 原文地址:https://www.cnblogs.com/laosun0204/p/12018046.html
Copyright © 2011-2022 走看看