接口测试之DDT,纯代码实战,学起来
2020-12-09 09:45
1451 查看
DDT,即数据驱动测试,简单的理解为数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。使用外部数据源实现对输入输出与期望值的参数化,避免在测试中使用硬编码的数据。
一、安装ddt模块
pip install ddt
ddt有四种模式:引入装饰器@ddt;导入数据@data;拆分数据@unpack;导入外部数据@file_data
二、参数化实现的方式
1、读取元组数据
#一定要和单元测试框架一起用 import unittest,os from ddt import ddt,data,unpack,file_data '''NO.1单组元素''' @ddt class Testwork(unittest.TestCase): @data(1,2,3) def test_01(self,value): #value用来接收data的数据 print(value) if __name__ == '__main__': unittest.main() 结果: =>1 2 3 '''NO.2多组未分解元素''' @ddt class Testwork(unittest.TestCase): @data((1,2,3),(4,5,6)) def test_01(self,value): print(value) if __name__ == '__main__': unittest.main() 结果: =>(1, 2, 3) (4, 5, 6) '''NO.3多组分解元素''' @ddt class Testwork(unittest.TestCase): @data((1,2,3),(4,5,6)) @unpack #拆分数据 def test_01(self,value1,value2,value3): #每组数据有3个值,所以设置3个形参 print(value) if __name__ == '__main__': unittest.main() 结果: =>1 2 3 4 5 6
2、读取列表数据
import unittest,os from ddt import ddt,data,unpack,file_data '''NO.1多组元素未分解''' @ddt class Testwork(unittest.TestCase): @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}]) def test_01(self,a): print(a) if __name__ == '__main__': unittest.main() 结果: =>[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}] ※上面结果可以看出:无法运用到requests数据请求中,所以不是很实用※ '''NO.2多组元素分解''' @ddt class Testwork(unittest.TestCase): @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}]) @unpack def test_01(self,a,b): print(a,b) if __name__ == '__main__': unittest.main() 结果: =>{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'} ※拆分后的运行结果,不带有[ ],拆分是将列表中的2个字典拆分,所以有2个数据※
3、读取字典数据
import unittest,os from ddt import ddt,data,unpack,file_data '''※字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就报错※''' '''NO.1单组数据未分解''' @ddt class Testwork(unittest.TestCase): @data({'name':'lili','age':'16'},{'sex':'female','job':'nurser'}) def test_01(self,a): print(a) if __name__ == '__main__': unittest.main() 结果: =>{'name': 'lili', 'age': '16'} {'sex': 'female', 'job': 'nurser'} ※以上运行的结果数据,就可以用来作为requests的请求参数~!※ '''NO.2多数据拆分,重点来了''' @ddt class Testwork(unittest.TestCase): @data({'name':'lili','age':'16'},{'name':'female','age':'nurser'}) @unpack def test_01(self,name,age): print(name,age) if __name__ == '__main__': unittest.main() 结果: =>lili 16 female nurser ※重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次@data里的数据key值和def方法里的形参名称一定要一致,否则,打印的时候,就会报莫名的参数错误。※
4、读取json文件数据
# data_json.json文件 { "test_case1": { "key": "value1", "status_code": 200 }, "test_case2": { "key": "value2", "status_code": 200 }, "test_case3": { "key": "value3", "status_code": 200 } } # python读取json文件 @ddt class InterfaceTest(unittest.TestCase): def setUp(self): self.url = "http://httpbin.org/get" def tearDown(self): print(self.result) @file_data("data_json.json") #如不在同一级目录下需另做处理 def test_get_request(self, key, status_code): r = requests.get(self.url, params={"key": key}) self.result = r.json() self.assertEqual(r.status_code, status_code) if __name__ == '__main__': unittest.main()
相关文章推荐
- mysql锁 实战测试代码
- 300行Python代码打造实用接口测试框架
- Jmeter之接口测试实战项目运用操作(七)
- Java接口测试java代码
- mysql锁 实战测试代码
- 视频教程-jmeter接口自动化测试实战-软件测试
- Python实战(2)re编译代码性能测试
- 【软件自动化测试-QTP实战技能 5】== QTP中一些基础性代码结构
- 微信公众号开发(十六):微信的一些其他的常用接口测试代码
- jmeter测试实战二:接口测试 压力 数据库 脚本
- C#版本的备案接口pwdHash生成代码(测试通过)
- 接口的客户端测试代码
- python3.6+selenium3.13 自动化测试项目实战一(增加自动发送邮件报告接口)
- 2018最全面的Java接口自动化测试实战视频课程 接口测试教程 (最全)
- Jmeter接口测试项目实战
- maven3实战之maven使用入门(编写测试代码)
- 【WEB API项目实战干货系列】- 接口文档与在线测试(二)
- 基于webrtc的媒体库测试代码以及接口介绍
- Java代码实现接口测试
- 最新Java接口自动化测试实战接口测试全套分享