dt 是第三方模塊,需安裝, pip install ddt
DDT包含類的裝飾器ddt和兩個(gè)方法裝飾器data(直接輸入測(cè)試數(shù)據(jù))
通常情況下,data中的數(shù)據(jù)按照一個(gè)參數(shù)傳遞給測(cè)試用例,如果data中含有多個(gè)數(shù)據(jù),以元組,列表,字典等數(shù)據(jù),需要自行在腳本中對(duì)數(shù)據(jù)進(jìn)行分解或者使用unpack分解數(shù)據(jù)。
from ddt import ddt,data,unpack test_data1 = [{"username": "zhangsan", "pwd": "zhangsan"}, {"username": "lisi", "pwd": "lisi"}, {"username": "wangwu", "pwd": "wangwu"}, test_data2 = [{"username": "wukong", "pwd": "wukong"}, {"username": "wuneng", "pwd": "woneng"}, {"username": "wujing", "pwd": "wujing"}, class Test(unittest.TestCase): def test_ddt1(self, data): test_ddt1的測(cè)試結(jié)果是OK的,因?yàn)閠est_data2作為一個(gè)整體傳給了data,所以value打印的值為test_data1 def test_ddt2(self, data): test_ddt2的測(cè)試結(jié)果是OK的,因?yàn)閠est_data2作為一個(gè)整體傳給了data,然后根據(jù)字典取出value值 @data([3,2,1],[5,3,2],[10,4,6]) @unpack #@unpack,那么[3,2,1]被分解開,按照用例中的三個(gè)參數(shù)傳遞 def test_minus(self,a,b,expected): self.assertEqual(actual, expected) test_minus的測(cè)試結(jié)果也是ok的,由于在 @ data(...)下加了 @ unpack, 代表會(huì)把數(shù)據(jù)分解,得到3組測(cè)試數(shù)據(jù) @data([2, 3], [4, 5]) #沒有@unpack,那么[2,3]當(dāng)成一個(gè)參數(shù)傳入用例運(yùn)行 def test_compare(self, a, b): test_compare的測(cè)試結(jié)果是fail的,由于沒有加 @ unpack, 雖然還是會(huì)被理解成2組測(cè)試數(shù)據(jù),但是[2, 3] 作為一個(gè)整體被傳給了a, 因?yàn)閎就沒有值傳入了,所以一執(zhí)行后報(bào)了 TypeError: test_compare() missing 1 required positional argument: 'b' 這句錯(cuò) if __name__ == "__main__":
|