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è)專門的模塊,可以傳入多組參數(shù),自動(dòng)生成多個(gè)用例
2.導(dǎo)入paramunittest:import paramunittest
3.paramunittest支持字典、元組、列表作為入?yún)?br /> 列表格式:[["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名稱自定義,從左到右按順序一一對(duì)應(yīng)值'''
self.t1 = t1
self.t2 = t2
self.tN = tN
6.列表元組取列值def testcase(self): self.t1
7.字典單賦予列值:def setParameters(self, key, keyN):
'''注意key, keyN是與字典key值必須一一對(duì)應(yīng)'''
self.key = key
self.keyN = keyN
8.列表元組取取列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-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是從左到右按順序一一對(duì)應(yīng)''' self.user = user self.pwd = pwd self.result = result def testcase(self): print("開(kāi)始執(zhí)行用例:--------------") time.sleep(1) print("輸入用戶名:%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í)行用例:--------------
輸入用戶名:test
輸入密碼:123456
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_1) ... 輸入用戶名:test1
輸入密碼:1234564
期望結(jié)果: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三個(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("輸入用戶名:%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,.....9
testcase (paramunittest.TestDemo_0) ... 開(kāi)始執(zhí)行用例:--------------
輸入用戶名:test
輸入密碼:123456
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_1) ... 輸入用戶名:test1
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_10) ... 輸入用戶名:test10
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_11) ... 輸入用戶名:test11
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_2) ... 輸入用戶名:test2
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_3) ... 輸入用戶名:test3
輸入密碼:1234564
期望結(jié)果:true
ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_4) ... 輸入用戶名:test4
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_5) ... 輸入用戶名:test5
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_6) ... 輸入用戶名:test6
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_7) ... 輸入用戶名:test7
輸入密碼:1234564
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_8) ... 輸入用戶名:test8
輸入密碼:1234564
期望結(jié)果:true
ok開(kāi)始執(zhí)行用例:--------------testcase (paramunittest.TestDemo_9) ... 輸入用戶名:test9
輸入密碼:1234564
期望結(jié)果: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是從做到右按順序一一對(duì)應(yīng)''' self.user = user self.pwd = pwd self.result = result def testcase(self): print("開(kāi)始執(zhí)行用例:--------------") time.sleep(1) print("輸入用戶名:%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í)行用例:--------------
輸入用戶名:test
輸入密碼:123456
期望結(jié)果:true
ok
開(kāi)始執(zhí)行用例:--------------
testcase (paramunittest.TestDemo_1) ... 輸入用戶名:test1
輸入密碼:1234564
期望結(jié)果:true
ok----------------------------------------------------------------------
Ran 2 tests in 4.002sOK
五、問(wèn)題:
問(wèn)題描述:一個(gè)元組只有一個(gè)列值,如("test"),("test1"),setParameters之后運(yùn)行報(bào)錯(cuò)如下:
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
解決方法:保證一個(gè)元組列值兩個(gè)以上,如("test","123456"),("test1","123")
注:只有元組有這個(gè)問(wèn)題,列表或字典無(wú)此問(wèn)題
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)戰(zhàn)串口助手_解決8串口多個(gè)發(fā)送的問(wèn)題
今天小編就為大家分享一篇python實(shí)戰(zhàn)串口助手_解決8串口多個(gè)發(fā)送的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06在Python web中實(shí)現(xiàn)驗(yàn)證碼圖片代碼分享
這篇文章主要介紹了在Python web中實(shí)現(xiàn)驗(yàn)證碼圖片代碼分享,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Python學(xué)習(xí)_幾種存取xls/xlsx文件的方法總結(jié)
今天小編就為大家分享一篇Python學(xué)習(xí)_幾種存取xls/xlsx文件的方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05解讀python正則表達(dá)式括號(hào)問(wèn)題
這篇文章主要介紹了python正則表達(dá)式括號(hào)問(wèn)題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇pandas使用apply多列生成一列數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11pyinstaller執(zhí)行報(bào)錯(cuò)的問(wèn)題解決
有時(shí)候,PyInstaller可能無(wú)法正確識(shí)別和打包所有的依賴項(xiàng),導(dǎo)致名稱錯(cuò)誤,本文主要介紹了pyinstaller執(zhí)行報(bào)錯(cuò)的解決方案,感興趣的可以了解一下2023-11-11Python過(guò)濾txt文件內(nèi)重復(fù)內(nèi)容的方法
今天小編就為大家分享一篇Python過(guò)濾txt文件內(nèi)重復(fù)內(nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配
這篇文章主要為大家詳細(xì)介紹了python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03