一、总结说明
Windows环境安装:paramunittest cmd输入命令:pip install paramunittest
总结说明:
1.paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例
2.导入paramunittest:import paramunittest
3.paramunittest支持字典、元组、列表作为入参
列表格式:[["vaule"],["vaule2"]],setParameters赋值的个数与列值一一对应,例如此列表格式列值只有一个,赋值时只能自定义一个值
元组格式:(("pwd","vaule"),("pwd","vaule2")),元组列值必须保证两个以上,如果只有一个值,setParameters时报错,setParameters赋值的个数与列值一一对应,例如此元组格式列值有2个,赋值时只能自定义2个值
字典格式:[{"key": "vaule" },{"key": "vaule2"}],字典保证key值一致,如相同个数,相同位置,例如此字典格式列值只有一个key,setParameters赋值时只能定义一个key值
4.赋予列表/字典/元组值:@paramunittest.parametrized(*list/tuple)
5.列表元组赋予列值:def setParameters(self, t1, t2, tN):
'''注意t1, t2, t3名称自定义,从左到右按顺序一一对应值'''
self.t1 = t1
self.t2 = t2
self.tN = tN
6.列表元组取列值def testcase(self): self.t1
7.字典单赋予列值:def setParameters(self, key, keyN):
'''注意key, keyN是与字典key值必须一一对应'''
self.key = key
self.keyN = keyN
8.列表元组取取列def testcase(self): self.key1,字典通过key获取vaulue值
特别注意:如列值下标大于10时,执行顺序是先执行0,1再执行10,11,再执行2,3,.....9
二、源码举例(列表)
说明:一般读取exel会生成一个列表,如果使用exel作为参数化,可以参考此
#!/usr/bin/python3 # encoding:utf-8 import unittest import paramunittest import time list =[ ['test', '123456', 'true'], ['test1', '1234564', 'true'] ] @paramunittest.parametrized(*list) class TestDemo(unittest.TestCase): def setParameters(self, user, pwd, result): '''注意user, pwd, result是从左到右按顺序一一对应''' self.user = user self.pwd = pwd self.result = result def testcase(self): print("开始执行用例:--------------") time.sleep(1) print("输入用户名:%s" % self.user) print("输入密码:%s" % self.pwd) print("期望结果:%s " % self.result) time.sleep(1) self.assertTrue(self.result == "true") if __name__ == "__main__": #verbosity=2 显示用例执行详情 unittest.main(verbosity=2)
运行结果
testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok----------------------------------------------------------------------
Ran 2 tests in 4.003sOK
三、源码举例(字典)
#!/usr/bin/python3 # encoding:utf-8 import unittest import paramunittest import time dict =[ {"user": "test", "pwd": "123456", "result": "true"}, {"user": "test1", "pwd": "1234564", "result": "true"}, {"user": "test2", "pwd": "1234564", "result": "true"}, {"user": "test3", "pwd": "1234564", "result": "true"}, {"user": "test4", "pwd": "1234564", "result": "true"}, {"user": "test5", "pwd": "1234564", "result": "true"}, {"user": "test6", "pwd": "1234564", "result": "true"}, {"user": "test7", "pwd": "1234564", "result": "true"}, {"user": "test8", "pwd": "1234564", "result": "true"}, {"user": "test9", "pwd": "1234564", "result": "true"}, {"user": "test10", "pwd": "1234564", "result": "true"}, {"user": "test11", "pwd": "1234564", "result": "true"} ] @paramunittest.parametrized(*dict) class TestDemo(unittest.TestCase): def setParameters(self, user, pwd, result): '''user, pwd, result三个参数字典的key一一对应''' self.user = user self.pwd = pwd self.result = result def testcase(self): print("开始执行用例:--------------") time.sleep(1) print("输入用户名:%s" % self.user) print("输入密码:%s" % self.pwd) print("期望结果:%s " % self.result) time.sleep(1) self.assertTrue(self.result == "true") if __name__ == "__main__": #verbosity=2 显示用例执行详情 unittest.main(verbosity=2)
运行结果
#说明:框架问题:当字典大于10时,执行顺序是先执行0,1再执行10,11,再执行#2,3,.....9
testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_10) ... 输入用户名:test10
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_11) ... 输入用户名:test11
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_2) ... 输入用户名:test2
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_3) ... 输入用户名:test3
输入密码:1234564
期望结果:true
ok开始执行用例:--------------testcase (paramunittest.TestDemo_4) ... 输入用户名:test4
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_5) ... 输入用户名:test5
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_6) ... 输入用户名:test6
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_7) ... 输入用户名:test7
输入密码:1234564
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_8) ... 输入用户名:test8
输入密码:1234564
期望结果:true
ok开始执行用例:--------------testcase (paramunittest.TestDemo_9) ... 输入用户名:test9
输入密码:1234564
期望结果:true
ok----------------------------------------------------------------------
Ran 12 tests in 24.018sOK
四、源码举例(元组)
#!/usr/bin/python3 # encoding:utf-8 import unittest import paramunittest import time tuple=( ("test","123456","true"), ("test1","1234564","true") ) #另一种赋值方式:直接赋值 #@paramunittest.parametrized( # ("test","123456","true"), # ("test1","1234564","true") #) @paramunittest.parametrized(*tuple) class TestDemo(unittest.TestCase): def setParameters(self, user, pwd, result): '''注意user, pwd, result是从做到右按顺序一一对应''' self.user = user self.pwd = pwd self.result = result def testcase(self): print("开始执行用例:--------------") time.sleep(1) print("输入用户名:%s" % self.user) print("输入密码:%s" % self.pwd) print("期望结果:%s " % self.result) time.sleep(1) self.assertTrue(self.result == "true") if __name__ == "__main__": #verbosity=2 显示用例执行详情 unittest.main(verbosity=2)
运行结果
testcase (paramunittest.TestDemo_0) ... 开始执行用例:--------------
输入用户名:test
输入密码:123456
期望结果:true
ok
开始执行用例:--------------
testcase (paramunittest.TestDemo_1) ... 输入用户名:test1
输入密码:1234564
期望结果:true
ok----------------------------------------------------------------------
Ran 2 tests in 4.002sOK
五、问题:
问题描述:一个元组只有一个列值,如("test"),("test1"),setParameters之后运行报错如下:
testcase (paramunittest.TestDemo_0) ... ERROR
testcase (paramunittest.TestDemo_1) ... ERROR======================================================================
ERROR: testcase (paramunittest.TestDemo_0)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\pythonaz\lib\site-packages\paramunittest.py", line 89, in setUp
self.setParameters(*parameters[0], **parameters[1])
TypeError: setParameters() takes 2 positional arguments but 5 were given
解决方法:保证一个元组列值两个以上,如("test","123456"),("test1","123")
注:只有元组有这个问题,列表或字典无此问题
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星《前途海量 电影原声专辑》[FLAC/分轨][227.78MB]
- 张信哲.1992-知道新曲与精丫巨石】【WAV+CUE】
- 王翠玲.1995-ANGEL【新艺宝】【WAV+CUE】
- 景冈山.1996-我的眼里只有你【大地唱片】【WAV+CUE】
- 群星《八戒 电影原声带》[320K/MP3][188.97MB]
- 群星《我的阿勒泰 影视原声带》[320K/MP3][139.47MB]
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[320K/MP3][148.91MB]
- 刘雅丽.2001-丽花皇后·EMI精选王【EMI百代】【FLAC分轨】
- 齐秦.1994-黄金十年1981-1990CHINA.TOUR.LIVE精丫上华】【WAV+CUE】
- 群星.2008-本色·百代音乐人创作专辑【EMI百代】【WAV+CUE】
- 群星.2001-同步过冬AVCD【环球】【WAV+CUE】
- 群星.2020-同步过冬2020冀待晴空【环球】【WAV+CUE】
- 沈雁.1986-四季(2012梦田复刻版)【白云唱片】【WAV+CUE】
- 纪钧瀚《胎教古典音乐 钢琴与大提琴的沉浸时光》[FLAC/分轨][257.88MB]
- 《国语老歌 怀旧篇 3CD》[WAV/分轨][1.6GB]