Python基于paramunittest模塊實(shí)現(xiàn)excl參數(shù)化
一、總結(jié)說(shuō)明
Windows環(huán)境安裝:paramunittest cmd輸入命令:pip install paramunittest
總結(jié)說(shuō)明:
1.paramunittest是unittest實(shí)現(xiàn)參數(shù)化的一個(gè)專(zhuān)門(mén)的模塊,可以傳入多組參數(shù),自動(dòng)生成多個(gè)用例2.導(dǎo)入paramunittest:import paramunittest3.paramunittest支持字典、元組、列表作為入?yún)⒘斜砀袷剑篬['vaule'],['vaule2']],setParameters賦值的個(gè)數(shù)與列值一一對(duì)應(yīng),例如此列表格式列值只有一個(gè),賦值時(shí)只能自定義一個(gè)值元組格式:(('pwd','vaule'),('pwd','vaule2')),元組列值必須保證兩個(gè)以上,如果只有一個(gè)值,setParameters時(shí)報(bào)錯(cuò),setParameters賦值的個(gè)數(shù)與列值一一對(duì)應(yīng),例如此元組格式列值有2個(gè),賦值時(shí)只能自定義2個(gè)值字典格式:[{'key': 'vaule' },{'key': 'vaule2'}],字典保證key值一致,如相同個(gè)數(shù),相同位置,例如此字典格式列值只有一個(gè)key,setParameters賦值時(shí)只能定義一個(gè)key值4.賦予列表/字典/元組值:@paramunittest.parametrized(*list/tuple)5.列表元組賦予列值:def setParameters(self, t1, t2, tN):’’’注意t1, t2, t3名稱(chēng)自定義,從左到右按順序一一對(duì)應(yīng)值’’’self.t1 = t1self.t2 = t2self.tN = tN6.列表元組取列值def testcase(self): self.t17.字典單賦予列值:def setParameters(self, key, keyN):’’’注意key, keyN是與字典key值必須一一對(duì)應(yīng)’’’self.key = keyself.keyN = keyN8.列表元組取取列def testcase(self): self.key1,字典通過(guò)key獲取vaulue值特別注意:如列值下標(biāo)大于10時(shí),執(zhí)行順序是先執(zhí)行0,1再執(zhí)行10,11,再執(zhí)行2,3,.....9
二、源碼舉例(列表)
說(shuō)明:一般讀取exel會(huì)生成一個(gè)列表,如果使用exel作為參數(shù)化,可以參考此
#!/usr/bin/python3# encoding:utf-8import unittestimport paramunittestimport timelist =[ [’test’, ’123456’, ’true’], [’test1’, ’1234564’, ’true’]]@paramunittest.parametrized(*list)class TestDemo(unittest.TestCase): def setParameters(self, user, pwd, result): ’’’注意user, pwd, result是從左到右按順序一一對(duì)應(yīng)’’’ self.user = user self.pwd = pwd self.result = result def testcase(self): print('開(kāi)始執(zhí)行用例:--------------') time.sleep(1) print('輸入用戶(hù)名:%s' % self.user) print('輸入密碼:%s' % self.pwd) print('期望結(jié)果:%s ' % self.result) time.sleep(1) self.assertTrue(self.result == 'true')if __name__ == '__main__': #verbosity=2 顯示用例執(zhí)行詳情 unittest.main(verbosity=2)
運(yùn)行結(jié)果
testcase (paramunittest.TestDemo_0) ... 開(kāi)始執(zhí)行用例:--------------輸入用戶(hù)名:test輸入密碼:123456期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_1) ... 輸入用戶(hù)名:test1輸入密碼:1234564期望結(jié)果:true ok
----------------------------------------------------------------------Ran 2 tests in 4.003s
OK
三、源碼舉例(字典)
#!/usr/bin/python3# encoding:utf-8import unittestimport paramunittestimport timedict =[ {'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三個(gè)參數(shù)字典的key一一對(duì)應(yīng)’’’ self.user = user self.pwd = pwd self.result = result def testcase(self): print('開(kāi)始執(zhí)行用例:--------------') time.sleep(1) print('輸入用戶(hù)名:%s' % self.user) print('輸入密碼:%s' % self.pwd) print('期望結(jié)果:%s ' % self.result) time.sleep(1) self.assertTrue(self.result == 'true')if __name__ == '__main__': #verbosity=2 顯示用例執(zhí)行詳情 unittest.main(verbosity=2)
運(yùn)行結(jié)果
#說(shuō)明:框架問(wèn)題:當(dāng)字典大于10時(shí),執(zhí)行順序是先執(zhí)行0,1再執(zhí)行10,11,再執(zhí)行#2,3,.....9testcase (paramunittest.TestDemo_0) ... 開(kāi)始執(zhí)行用例:--------------輸入用戶(hù)名:test輸入密碼:123456期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_1) ... 輸入用戶(hù)名:test1輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_10) ... 輸入用戶(hù)名:test10輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_11) ... 輸入用戶(hù)名:test11輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_2) ... 輸入用戶(hù)名:test2輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_3) ... 輸入用戶(hù)名:test3輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_4) ... 輸入用戶(hù)名:test4輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_5) ... 輸入用戶(hù)名:test5輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_6) ... 輸入用戶(hù)名:test6輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_7) ... 輸入用戶(hù)名:test7輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_8) ... 輸入用戶(hù)名:test8輸入密碼:1234564期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_9) ... 輸入用戶(hù)名:test9輸入密碼:1234564期望結(jié)果:true ok
----------------------------------------------------------------------Ran 12 tests in 24.018s
OK
四、源碼舉例(元組)
#!/usr/bin/python3# encoding:utf-8import unittestimport paramunittestimport timetuple=( ('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是從做到右按順序一一對(duì)應(yīng)’’’ self.user = user self.pwd = pwd self.result = result def testcase(self): print('開(kāi)始執(zhí)行用例:--------------') time.sleep(1) print('輸入用戶(hù)名:%s' % self.user) print('輸入密碼:%s' % self.pwd) print('期望結(jié)果:%s ' % self.result) time.sleep(1) self.assertTrue(self.result == 'true')if __name__ == '__main__': #verbosity=2 顯示用例執(zhí)行詳情 unittest.main(verbosity=2)
運(yùn)行結(jié)果
testcase (paramunittest.TestDemo_0) ... 開(kāi)始執(zhí)行用例:--------------輸入用戶(hù)名:test輸入密碼:123456期望結(jié)果:true ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_1) ... 輸入用戶(hù)名:test1輸入密碼:1234564期望結(jié)果:true ok
----------------------------------------------------------------------Ran 2 tests in 4.002s
OK
五、問(wèn)題:
問(wèn)題描述:一個(gè)元組只有一個(gè)列值,如('test'),('test1'),setParameters之后運(yùn)行報(bào)錯(cuò)如下:
testcase (paramunittest.TestDemo_0) ... ERRORtestcase (paramunittest.TestDemo_1) ... ERROR
======================================================================ERROR: testcase (paramunittest.TestDemo_0)----------------------------------------------------------------------Traceback (most recent call last):File 'D:pythonazlibsite-packagesparamunittest.py', line 89, in setUpself.setParameters(*parameters[0], **parameters[1])TypeError: setParameters() takes 2 positional arguments but 5 were given
解決方法:保證一個(gè)元組列值兩個(gè)以上,如('test','123456'),('test1','123')
注:只有元組有這個(gè)問(wèn)題,列表或字典無(wú)此問(wèn)題
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. .NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法2. JSP數(shù)據(jù)交互實(shí)現(xiàn)過(guò)程解析3. 淺談python出錯(cuò)時(shí)traceback的解讀4. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法5. Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼6. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解7. windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無(wú)效問(wèn)題8. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向9. 在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解10. Nginx+php配置文件及原理解析
