paramunittest是unittest實現參數化的一個專門的模塊,能夠傳入多組參數,自動生成多個用例
前面講數據驅動的時候,用ddt能夠解決多組數據傳入,自動生成多個測試用例。本篇繼續介紹另一個參數化的框架paramunittest,也能實現同樣的效果。html
1.先pip 下載安裝 paramunittestpython
pip install paramunittestgit
1.官方文檔地址:https://pypi.python.org/pypi/ParamUnittest/github
2.github源碼下載地址:https://github.com/rik0/ParamUnittest框架
3.官方文檔上給出了2個使用案例,如下兩種方法都是能夠的,小編傾向於第二種,更容易理解一些,這裏注意了,在pycharm裏面運行的時候,最後鼠標要放到if下方執行。測試
4.加上這個參數verbosity=2是爲了顯示用例執行詳情設計
verbosity=2code
import unittest import paramunittest # 方案一 @paramunittest.parametrized( ('1', '2'), #(4, 3), ('2', '3'), (('4', ), {'b': '5'}), ((), {'a': 5, 'b': 6}), {'a': 5, 'b': 6}, ) class TestFoo(paramunittest.ParametrizedTestCase): def setParameters(self, a, b): self.a = a self.b = b def testLess(self): self.assertLess(self.a, self.b) # 方案二 @paramunittest.parametrized( ('1', '2'), #(4, 3), ('2', '3'), (('4', ), {'b': '5'}), ((), {'a': 5, 'b': 6}), {'a': 5, 'b': 6}, ) class TestBar(unittest.TestCase): def setParameters(self, a, b): self.a = a self.b = b def testLess(self): self.assertLess(self.a, self.b) if __name__ == "__main__": unittest.main(verbosity=2)
1.從上面官方文檔給的案例能夠看出,參數能夠傳元組也能夠傳字典,先傳字典參數,相似於以下這種一組參數:htm
{"user": "admin", "psw": "123", "result": "true"}blog
2.注意這裏接受參數的時候,必需要定義setParameters這個方法,而且只能是這個名稱。括號後面的參數分別接受傳入的參數名稱。前面定義的是字典,那參數就跟前面字典的key保持一致
import unittest import paramunittest import time # python3.6 # 做者:上海-悠悠 @paramunittest.parametrized( {"user": "admin", "psw": "123", "result": "true"}, {"user": "admin1", "psw": "1234", "result": "true"}, {"user": "admin2", "psw": "1234", "result": "true"}, {"user": "admin3", "psw": "1234", "result": "true"}, {"user": "admin4", "psw": "1234", "result": "true"}, {"user": "admin5", "psw": "1234", "result": "true"}, {"user": "admin6", "psw": "1234", "result": "true"}, {"user": "admin7", "psw": "1234", "result": "true"}, {"user": "admin8", "psw": "1234", "result": "true"}, {"user": "admin9", "psw": "1234", "result": "true"}, {"user": "admin10", "psw": "1234", "result": "true"}, {"user": "admin11", "psw": "1234", "result": "true"}, ) class TestDemo(unittest.TestCase): def setParameters(self, user, psw, result): '''這裏注意了,user, psw, result三個參數和前面定義的字典一一對應''' self.user = user self.user = psw self.result = result def testcase(self): print("開始執行用例:--------------") time.sleep(0.5) print("輸入用戶名:%s" % self.user) print("輸入密碼:%s" % self.user) print("指望結果:%s " % self.result) time.sleep(0.5) self.assertTrue(self.result == "true") if __name__ == "__main__": unittest.main(verbosity=2)
3.執行結果:
開始執行用例:-------------- testcase (paramunittest.TestDemo_0) ... 輸入用戶名:123 輸入密碼:123 指望結果:true ok testcase (paramunittest.TestDemo_1) ... 開始執行用例:-------------- 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok testcase (paramunittest.TestDemo_10) ... 開始執行用例:-------------- 輸入用戶名:1234 輸入密碼:1234 指望結果:true 開始執行用例:-------------- ok testcase (paramunittest.TestDemo_11) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true 開始執行用例:-------------- ok testcase (paramunittest.TestDemo_2) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok 開始執行用例:-------------- testcase (paramunittest.TestDemo_3) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok testcase (paramunittest.TestDemo_4) ... 開始執行用例:-------------- 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok testcase (paramunittest.TestDemo_5) ... 開始執行用例:-------------- 輸入用戶名:1234 輸入密碼:1234 指望結果:true 開始執行用例:-------------- ok testcase (paramunittest.TestDemo_6) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true 開始執行用例:-------------- ok testcase (paramunittest.TestDemo_7) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok 開始執行用例:-------------- testcase (paramunittest.TestDemo_8) ... 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok testcase (paramunittest.TestDemo_9) ... 開始執行用例:-------------- 輸入用戶名:1234 輸入密碼:1234 指望結果:true ok ---------------------------------------------------------------------- Ran 12 tests in 12.001s
4.注意了,這裏的執行順序是先執行0,1,再執行10,11,12依次來的,別問我爲何,也別找我解決,設計如此,以前ddt框架也是有一樣的問題。
5.除了傳字典參數,傳元組類型的也是能夠的
@paramunittest.parametrized( ("admin", "123", "true"), ("admin1", "123", "true"), ("admin2", "123", "true"), ("admin3", "123", "true"), ("admin4", "123", "true"), ("admin5", "123", "true"), ("admin6", "123", "true"), ("admin7", "123", "true"), ("admin8", "123", "true"), ("admin9", "123", "true"), ("admin10", "123", "true"), ("admin11", "123", "true"), ("admin12", "123", "true") )
1.unittest生成html報告參考前面介紹的這篇http://www.cnblogs.com/yoyoketang/p/6680503.html就能夠了,這裏就不重複介紹了,實現的效果圖以下: