python 數據驅動(ddt,unpack)


dt 是第三方模塊,需安裝, pip install ddt

DDT包含類的裝飾器ddt和兩個方法裝飾器data(直接輸入測試數據)

通常情況下,data中的數據按照一個參數傳遞給測試用例,如果data中含有多個數據,以元組,列表,字典等數據,需要自行在腳本中對數據進行分解或者使用unpack分解數據。

from ddt import ddt,data,unpack
import  unittest
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"},
              ]
@ddt
class Test(unittest.TestCase):
    def setUp(self):
        print("===Start!===")
    def tearDown(self):
        print("===end!===")
    @data(*test_data1)
    def test_ddt1(self, data):
        print(data)
    ```
    test_ddt1的測試結果是OK的,因為test_data2作為一個整體傳給了data,所以value打印的值為test_data1
    ```

    @data(*test_data2)
    def test_ddt2(self, data):
        print(data['username'])
    ```
    test_ddt2的測試結果是OK的,因為test_data2作為一個整體傳給了data,然后根據字典取出value值
    ```

    @data([3,2,1],[5,3,2],[10,4,6])
    @unpack #@unpack,那么[3,2,1]被分解開,按照用例中的三個參數傳遞
    def test_minus(self,a,b,expected):
        actual = int(a)-int(b)
        expected = int(expected)
        print(actual,expected)
        self.assertEqual(actual, expected)
    ```
    test_minus的測試結果也是ok的,由於在 @ data(...)下加了 @ unpack, 代表會把數據分解,得到3組測試數據
    ```

    @data([2, 3], [4, 5]) #沒有@unpack,那么[2,3]當成一個參數傳入用例運行
    def test_compare(self, a, b):
        print(a,b)
        self.assertEqual(a, b)
    ```
    test_compare的測試結果是fail的,由於沒有加 @ unpack, 雖然還是會被理解成2組測試數據,但是[2, 3]
    作為一個整體被傳給了a, 因為b就沒有值傳入了,所以一執行后報了
    TypeError: test_compare() missing 1 required positional argument: 'b' 這句錯
    ```
if __name__ == "__main__":
    unittest.main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM