インタフェースオートメーションノート01:ddtモジュール呼び出しデータ
8671 ワード
概要
DDTモジュールは主にテストデータを遍歴するために用いられ、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()
使用方法
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
# 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