继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

萌萌小温柔
关注TA
已关注
手记 306
粉丝 56
获赞 401

安装: pip install ddt

测试:import 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-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitimport 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 + bclass 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()

使用之后:


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

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


使用方法:

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

新建一个文件 test_data.json


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

引用


结果:


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

原文出处

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP