unnittest的參數化模塊-paramunittest
paramunittest是unittest實現參數化的一個專門的模塊,可以傳入多組參數,自動生成多個用例
兩種用法
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)
print("%s<%s"%(self.a,self.b))
if __name__ == "__main__":
unittest.main(verbosity=2)
方案一結果如下:
testLess[0]((('1', '2'), {})) (paramunittest.TestFoo_0) ... ok
testLess[1]((('2', '3'), {})) (paramunittest.TestFoo_1) ... ok
testLess[2]((('4',), {'b': '5'})) (paramunittest.TestFoo_2) ... ok
testLess[3](((), {'a': 5, 'b': 6})) (paramunittest.TestFoo_3) ... ok
testLess[4](((), {'a': 5, 'b': 6})) (paramunittest.TestFoo_4) ... ok
----------------------------------------------------------------------
Ran 5 tests in 0.099s
OK
>>>
方案二結果如下:
testLess (paramunittest.TestBar_0) ... 1<2 ok testLess (paramunittest.TestBar_1) ... 2<3 ok testLess (paramunittest.TestBar_2) ... 4<5 ok testLess (paramunittest.TestBar_3) ... 5<6 ok testLess (paramunittest.TestBar_4) ... 5<6 ok ---------------------------------------------------------------------- Ran 5 tests in 0.313s OK >>>
案例:
import unittest
import paramunittest
import time
@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.psw = psw
self.result = result
def testcase(self):
print("開始執行用例:--------------")
time.sleep(0.5)
print("輸入用戶名:%s" % self.user)
print("輸入密碼:%s" % self.psw)
print("期望結果:%s " % self.result)
time.sleep(0.5)
self.assertTrue(self.result == "true")
if __name__ == "__main__":
unittest.main(verbosity=2)
1、參數可以傳元組也可以傳字典
2、接受參數的時候,必須要定義setParameters這個方法,並且只能是這個名稱。括號后面的參數分別接受傳入的參數名稱。前面定義的是字典,那參數就跟前面字典的key保持一致
3、參數的執行順序是0,1,再執行10,11,12
4、除了傳字典參數,傳元組類型的也是可以的
@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")
)
