python+selenium2.53.6学习(5)之数据驱动模块ddt

安装: pip install ddt

测试:import ddt

python+selenium2.53.6学习(5)之数据驱动模块ddt

DDT是 “Data-Driven Tests”的缩写

DDT: 包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(获取测试数据)

ddt.ddt:装饰类,也就是继承自TestCase的类

ddt.data:装饰测试方法。参数是一系列的值

ddt.file_data:装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型

ddt.unpack:传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上

先看不适用ddt的例子

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest

data = [
    {'sum_a': 2, 'sum_b': 3, 'result': 5},
    {'sum_a': 2, 'sum_b': 3, 'result': 6},
    {'sum_a': 5, 'sum_b': 10, 'result': 4}
]


def sum(a, b):
    return a + b


class TestDDT(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.data = data
        print
        '验证a+b,a-b结果'

    def test_01(self):
        self.assertTrue(sum(self.data[0]['sum_a'], self.data[0]['sum_b']) == self.data[0]['result'])

    def test_02(self):
        self.assertTrue(sum(self.data[1]['sum_a'], self.data[1]['sum_b']) == self.data[1]['result'])

    def test_03(self):
        self.assertTrue(sum(self.data[2]['sum_a'], self.data[2]['sum_b']) == self.data[2]['result'])

    def test_04(self):
        for i in self.data:
            self.assertEqual(sum(i['sum_a'], i['sum_b']), i['result'])

    @classmethod
    def tearDownClass(cls):
        print
        '验证结束'


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

使用之后:

python+selenium2.53.6学习(5)之数据驱动模块ddt

使用之后,代码一方面简洁了很多,在一个测试方法中执行多条测试用例,和图1的test_04相比,如果断言异常也会继续执行(因为是不同的case)

结果(unittest.main(verbosity=2)执行):

python+selenium2.53.6学习(5)之数据驱动模块ddt

使用方法:

首先在Class上添加装饰器@ddt.ddt,其次在调用的方法上引入测试数据data('数据')

新建一个文件 test_data.json

{
    "list_num": [ 10, 12, 15 , 23 ],
    "tuple_num": [ 15, 12, 50 ],
   "str_num": "welcome"
}

引用

python+selenium2.53.6学习(5)之数据驱动模块ddt

结果:

python+selenium2.53.6学习(5)之数据驱动模块ddt

注: 对json格式不太熟悉,不知道元祖为什么不行