インタフェースオートメーションノート01:ddtモジュール呼び出しデータ


概要


DDTモジュールは主にテストデータを遍歴するために用いられ、1つのテスト例方法では、パラメータに含まれるすべてのデータグループの状況を循環することができる.
  • 適用状況:1つのインタフェースをテストし、異なるテストがデータの組み合わせに参加する場合、例えばログインインタフェースで、異なる状況(アカウントエラー、パスワードエラー、検証コードエラーなど)を検証する必要がある
  • なぜddtを使うのか


    起因:書き込み自動化インタフェースのテストの過程で、私は以前使用したunittestフレームワークに沿って、例えば1つのcaseの中でログインの方法を書いて、私は1つのログインの方法を書いて、私は方法に参加して、それからログインのインタフェースの送信を行います.
    例:
    import unittest
    login = {"url": "http://test.com", "method": "post"}
    
    
    class Demo(unittest.TestCase):
    
        def test_login(self, login_message):
            """ ( )"""
            print("  %s" % login_message)
    
    
    if __name__ == '__main__':
        #  
        Demo().test_login(login)
    
    

    しかし、一つ質問があります.私はいくつかのパラメータを伝えたいです.登録が正常で、アカウントが異常で、パスワードが間違っていて、パスワードが空です.いくつかの状況があります.この時、検証したいなら、どうすればいいですか.1つ目のアイデア:リストを入力し、メソッドをループします.
    import unittest
    login_list = [{"url": "http://test.com", "method": "post"}]
    
    
    class Demo(unittest.TestCase):
    
        def test_login(self, login_message):
            """ ( )"""
            for i in login_message:
                print("  %s" % i)
    
    
    if __name__ == '__main__':
        Demo().test_login(login_list)
    

    2つ目のアイデア:私はログインメソッドを呼び出すときに、パラメータの数に基づいて、メソッドを複数回呼び出すことができます.
    import unittest
    login_list = [{"url": "http://test.com", "method": "post"}]
    
    
    class Demo(unittest.TestCase):
    
        def test_login(self, login_message):
            """ ( )"""
            print("  %s" % login_message)
    
    
    if __name__ == '__main__':
        #  
        for i in login_list:
            Demo().test_login(i)
    

    しかし、この2つの方法はあまりよくないと思います.ddtというサードパーティモジュールを見つけました.このモジュールを通じて、この問題を優雅に解決することができます.
    ddtというモジュールでは、私たちが準備したデータをパラメータとしてメソッドに渡すことができ、listリストのような反復可能なデータ型であれば、自動的にパラメータをループすることができます.
    次のコードをlistが辞書タイプの単一のパラメータに戻ると、ddtは私たちがパラメータを入力したデータタイプを判断できることがわかります.ddt加入後のコード
    import unittest
    import ddt
    login_list = [{"url": "http://test.com", "method": "post"},
                  {"url": "http://csdn.com", "method": "post"}]
    
    
    @ddt.ddt
    class Demo(unittest.TestCase):
    
        @ddt.data(*login_list)
        def test_login(self, login_message):
            """ ( )"""
            print("  %s" % login_message)
    
    
    if __name__ == '__main__':
        #  
        unittest.main()
    

    使用方法

  • ddtモジュール(pycharm-setting-project Interpreter、+番号をクリックしてddt追加ライブラリを検索)
  • コード中import ddt
  • 試験例を実行するclassに装飾器を加える必要がある:@ddt.ddt
  • は、試験例を実行するdefに、装飾器:@ddt.を加える必要がある.Data(*sampleData)はテストデータを参照する:sampleData
  • は、試験例を実行するdefにおいて、参照データsamData
  • に入力する必要がある.
  • 注:(sampleDataはテストデータセット、samDataはddt自動分割のテストデータセット、例えばsampleData=[1,2,3]samDataは単一要素1,2,3である;例では3回実行し、異なるsamDataデータが送信されるたびに)
  • sampleコード

    # coding:utf-8
    import ddt
    import unittest
     
    sampleData = [1,2,3]
    
    @ddt.ddt
    class ddtSample(unittest.TestCase):
    
        def setUp(self):
            pass
     
        @ddt.data(*sampleData)
        def test_ddtSample(self, samData):
            print(data)
    
        def tearDown(self):
            pass
     
    if __name__ == "__main__":
        unittest.main()
    
    

    インスタンスコード

    # coding:utf-8
    import ddt
    import unittest
     
    #  
    test_data1 = [{"username": " ", "pwd": "zhangsan"},
                 {"username": " ", "pwd": "lisi"},
                 {"username": " ", "pwd": "wangwu"},
                 ]
    test_data2 = [{"username": " ", "pwd": "wukong"},
                 {"username": " ", "pwd": "woneng"},
                 {"username": " ", "pwd": "wujing"},
                 ]
     
    @ddt.ddt
    class Test(unittest.TestCase):
        def setUp(self):
            print("Start!")
     
        def tearDown(self):
            print("end!")
     
        @ddt.data(*test_data1)
        def test_ddt1(self, data):
            print(data)
     
        @ddt.data(*test_data2)
        def test_ddt2(self, data):
            print(data)
     
     
    if __name__ == "__main__":
        unittest.main()
    
    

    結果

    {'pwd': 'zhangsan', 'username': ' '}
    end!
    ----------------------------------------------------------------------
    Start!
    Ran 6 tests in 0.001s
    {'pwd': 'lisi', 'username': ' '}
    
    end!
    OK
    Start!
    {'pwd': 'wangwu', 'username': ' '}
    end!
    Start!
    {'pwd': 'wukong', 'username': ' '}
    end!
    Start!
    {'pwd': 'woneng', 'username': ' '}
    end!
    Start!
    {'pwd': 'wujing', 'username': ' '}
    end!
    
    Process finished with exit code 0
    

    ふろく
    当初ddtを学習した際の参考資料アドレス:http://www.cnblogs.com/lingzeng86/p/6790827.html http://www.imooc.com/article/14861 http://blog.csdn.net/u013118036/article/details/45558951