pythonインタフェース自動化テスト-データ駆動DDTモジュールの簡単な使用

13000 ワード

DDT簡単な紹介
  • 名称:Data-Driven Tests,データ駆動テスト
  • の役割:外部データセットによって試験例の実行
  • を駆動する.
  • コアの考え方:データとテストコードの分離
  • 適用シーン:同じ動作を実行するための外部データのセット
  • の利点:テストデータが大幅に変化する場合、テストコードは
  • を一定に保つことができる.
  • 実際項目:excelはテストデータを格納、ddtはテストデータをユニットテストフレームワーク(テスト例)に読み出し、htmlレポート
  • に出力する.
     
    データ駆動とは
    データの変更は自動化テストの実行を駆動し、最終的にテスト結果の変更を引き起こす.率直に言えば、パラメータ化の応用です.
     
    DDT基礎使用(一):基礎データ型の伝達
    #   ddt      
    from ddt import *
    
    
    #               ddt
    @ddt
    class imoocTest(unittest.TestCase):
        
        # int
        @data(1, 2, 3, 4)
        def test_int(self, i):
            print("test_int:", i)
    
        # str
        @data("1", "2", "3")
        def test_str(self, str):
            print("test_str:", str)

    テスト結果
    test_int: 1
    test_int: 2
    test_int: 3
    test_int: 4
    test_str: 1
    test_str: 2
    test_str: 3

    ナレッジポイントを含める
    DDTを使用するにはまずユニットテストクラスに@ddtを付ける
     
    DDT基礎使用(二):複雑なデータ構造を伝達する
    from ddt import *
    
    
    #               ddt
    @ddt
    class imoocTest(unittest.TestCase):
        tuples = ((1, 2, 3), (1, 2, 3))
        lists = [[1, 2, 3], [1, 2, 3]]
    
        #   
        @data((1, 2, 3), (1, 2, 3))
        def test_tuple(self, n):
            print("test_tuple", n)
    
        #   
        @data([1, 2, 3], [1, 2, 3])
        @unpack
        def test_list(self, n1, n2, n3):
            print("test_list", n1, n2, n3)
    
        #   2
        @data(*tuples)
        def test_tuples(self, n):
            print("test_tuples", n)
    
        #   2
        @data(*lists)
        @unpack
        def test_lists(self, n1, n2, n3):
            print("test_lists", n1, n2, n3)
    
        #   
        @data({'value1': 1, 'value2': 2}, {'value1': 1, 'value2': 2})
        @unpack
        def test_dict(self, value1, value2):
            print("test_dict", value1, value2)

    テスト結果
    test_dict 1 2
    test_dict 1 2
    test_list 1 2 3
    test_list 1 2 3
    test_lists 1 2 3
    test_lists 1 2 3
    test_tuple (1, 2, 3)
    test_tuple (1, 2, 3)
    test_tuples (1, 2, 3)
    test_tuples (1, 2, 3)

    ナレッジポイントを含める
  • @unpack:複雑なデータ構造が伝達される場合に使用します.たとえば、メタグループまたはリストを使用して@unpackを追加すると、ddtは自動的にメタグループまたはリストを複数のパラメータに対応します.辞書はこのように処理することもできる
  • unpackが追加されていない場合test_caseメソッドのパラメータは1つしか記入できません.例えば、タプルの例
  • unpackを追加すると、伝達されたデータ量が一致する必要があります.リストの例のように、各リストには3つのデータが固定されています.マルチパスまたは少ないパスでは、test_caseメソッドのパラメータも3つ書く必要があります.
  • に一致する必要があります.
  • 伝達されたデータが辞書タイプである場合、各辞書のkeyが一致することに注意してください.test_caseのパラメータの命名も一致しなければならない.辞書の例のように、2つの辞書のkeyはvalue 1とvalue 2であり、方法のパラメータも
  • である.
  • 送信されたデータは、メタグループ2、リスト2のような変数によって、変数の前に*
  • を加える必要がある.
     
    DDTベース使用(三):jsonファイルの転送
    jsonファイル
    {
      "first": [
        {
          "isRememberMe": "True",
          "password": "111111",
          "username": "root"
        },
        "200"
      ],
      "second": [
        "{'isRememberMe': True, 'password': '1111111', 'username': 'root'}",
        "406"
      ],
      "third": [
        1,
        2
      ],
      "four": "123123"
    }

    ユニットテストクラス
    from ddt import *
    
    
    #               ddt
    @ddt
    class imoocTest(unittest.TestCase):
    
        @file_data('F:/test/config/testddt.json')
        def test_json(self, data):
            print(data)

    テスト結果
    [{'isRememberMe': 'True', 'password': '111111', 'username': 'root'}, '200']
    ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", '406']
    [1, 2, 3, 4]
    123123

     
    DDTベース使用(四):Yamlファイルの転送
    yamlファイル
    unsorted_list:
      - 10
      - 15
      - 12
    
    sorted_list: [ 15, 12, 50 ]

    ユニットテストクラス
    from ddt import *
    
    
    #               ddt
    @ddt
    class imoocTest(unittest.TestCase):
    
        @file_data('F:/test/config/testddt.yaml')
        def test4(self, data):
            print("yaml", data)

    テスト結果
    yaml [10, 15, 12]
    yaml [15, 12, 50]