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