接口测试(Python)之DDT
一、安装ddt模块 1 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()
黑莓5G新机首曝!依旧采用实体键盘设计,还有7050mAh超大电池,黑莓似乎当下已经在手机市场上销声匿迹了,就在很多人都以为黑莓要暂停手机业务时,近日一组黑莓新机的渲染图,吸引了很多网友关注。据悉,这款新机命名为黑莓Arezzo5G。从曝光的渲染图
杰美特手机壳第一股开启智造新跨越深圳市杰美特股份有限公司(下称杰美特)数字化工厂位于深圳龙华。在这里,模具制造实现了从来料生产搬运存储到送货的全流程自动化。车间里基本不见工人身影,取而代之的是挥舞的机械臂与高度智
苹果下一代芯片将采用Chiplet设计?来源本文由半导体行业观察编译自tomshardware。苹果似乎对其新的M1Max芯片进行了严格的保密。但最新的dieshot新照片显示,它实际上可能有一个互连总线,支持多芯片模块
跌至5499元,华为P50Pro无奈降价,4G手机还值得购买吗?关于华为手机,网络上的争议一直比较大,遭到限制后它很多东西都无法使用,产品的配置和价格并不吻合,加上新机不能支持5G网络,今年发布的P50系列也是姗姗来迟,销量完全不能和去年的Ma
2000元内国产手机有哪些好的推荐?如果价格在2000以内的话,新手机的话基本上能买到的都是属于千元机的范畴了,而选择中端手机会有更好的体验,至于vivo和华为两个品牌哪个好的话,主要还是看你对于手机的要求是什么样的
国产高端旗舰上架秒光,2亿像素181TB,只要6998元如何把自家的手机价格做到高端级别。对于很多厂商来说堆料是一个不错的选择。但是真正做到超高端市场的很少有吹硬件的,更多的是主打体验,特色以及品牌魅力。从去年开始国内很多安卓厂商也都开
一路飙价的WiFi6芯片近段时间,WiFi6芯片价格上涨,让本就热闹的WiFi6赛道新添了不少看点。在今年3月份,博通通知客户,旗下通信芯片交期拉长至50周,到目前博通的交期拉长到52周。中国台湾经济日报
华为matex2,折叠屏麒麟90005nm,办公的好助手华为的折叠屏手机已经更新三代了,但是技术还停留在第一代,没有很大的技术突破,最近有爆料称华为的手机可能会带来新的技术突破,带给大家新的高科技,这款折叠屏手机被称为华为matev,定
什么抠图软件比较好用?如果复杂一点,需要专业一点的抠图建议photoshop!AdobePhotoshop,简称PS,是由AdobeSystems开发和发行的图像处理软件。Photoshop主要处理以像
你在开车的时候有遇到过被吓一跳的经历吗?是怎样的呢?被自己手机吓一跳。中午把微信提示音设置成汽车喇叭声,又自动和车载篮牙连接,正开车时突然叭叭两声。一直到现在还用的。这个事情经常会遇到!开车的时候,遇到的突发情况还是比较多的。比如你
扫地拖地杀菌湿垃圾顽固污渍一机搞定实话说,现在年轻人没有多少喜欢做家务的了,许多小两口一年也不开几次火,饭可以出去吃吃食堂吃外卖。扫地拖地这种日常家务工作那就没有办法假手他人了(请得起家政的除外)。所以扫地拖地的懒