DDT(データ駆動型テスト)は、自動テストの実行を促進し、最終的にテスト結果に変化をもたらすデータの変更として単純に理解されます。外部データソースを使用して、入力値と出力値、および期待値のパラメーター化を実現し、テストでハードコードされたデータを使用しないようにします。
1つは、ddtモジュールをインストールする
pip install ddt
ddtには4つのモードがあります:importdecorator @ddt; import data @data; split data @unpack; import external data @file_data
第二に、パラメータ化の方法
1.タプルデータを読み取ります
#必ずユニットテストフレームワークで使用してくださいimport unittest 、os from ddt import ddt、data、unpack、file_data '' ' NO.1単一の要素セット' '' @ddt class Testwork( unittest.TestCase ):@ data(1、 2,3) def test_01(self、value):#valueは、データの受信に使用されます print(value) if __name__ == '__ main __':unittest.main () result: => 1 2 3 '' 'NO.2分解されていない要素の複数のグループ '' ' @ddt class Testwork( unittest.TestCase ):@ data((1,2,3)、(4,5,6)) def test_01(self、value): print(value) if __name__ == '__ main __':unittest.main () 結果: =>(1、2、3) (4、5、6) '' 'NO.3マルチグループ分解要素' '' @ddt class Testwork( unittest.TestCase ):@ data((1,2,3)、(4,5,6)) @ unpack #Split data def test_01 (self、value1、value2、value3): #データの各セットには3つの値があるため、__ name__ == '__ main __'の場合は3つの正式なパラメーター print(value)を設定します :unittest.main () result: => 1 2 3 4 5 6
2.リストデータを読み取る
import unittest 、os from ddt import ddt、data、unpack、file_data '' ' NO.1要素の複数のグループは分解されません' '' @ddt class Testwork( unittest.TestCase ):@ data([{'name': 'lili' '年齢':12}、{ 'セックス': '男性'、 '仕事': '先生'}]) デフtest_01(自己): プリント() の場合__name__ == '__ MAIN__': unittest.main () 結果: => [{'name': 'lili'、 'age':12}、{'sex': 'male'、 'job': 'teacher'}] ※上記の結果が表示されます:使用できませんリクエストデータリクエストに対してはあまり実用的ではない※ '' 'NO.2マルチグループ要素分解' '' @ddt class Testwork( unittest.TestCase ):@ data([{'name': 'lili'、 'age' :12}、{'sex': 'male'、 'job': 'teacher'}]) @ unpack def test_01(self、a、b): print(a、b) if __name__ == '__ main __':unittest.main () result: => {'name': 'lili'、 'age':12} {'sex': 'male'、 'job': 'teacher'} ※分割後の実行結果は、[]なしで、リスト内の2つの辞書を分割することになるため、2つのデータがあります※
3.辞書データを読む
import unittest 、os from ddt import ddt、data、unpack、file_data '' ' *分割するときは、正式なパラメーターと実際のパラメーターのキー値が同じである必要があるため、辞書の読み取りは特別です。そうでない場合、エラーが報告されます* ' '' '' 'NO.1単一のデータセットが分解されていません' '' @ddt class Testwork( unittest.TestCase ):@ data(( 'name': 'lili'、 'age': '16')、( 'sex': 'female'、 'job': ' nurser '})def test_01(self、a): print(a) if __name__ == '__ main __':unittest.main () 結果: => {'name': 'lili' 、 'age': '16'} {'sex': 'female'、 'job': 'nurser'} ※上記操作の結果データは、リクエストのリクエストパラメータとして使用できます〜!※ '' 'NO.2マルチデータ分割、注目が集まる' '' def test_01(self、name、age): print(name、age) if __name__ == '__ main __':unittest.main () result: => lili 16 female Nurser ※要点:まず結果に表示されるデータが辞書の値であり、キー値は出力されません。 @dataのデータキー値とdefメソッドの正式なパラメータ名は一貫している必要があります。一貫していないと、印刷時に説明できないパラメータエラーが報告されます。※※
4.jsonファイルデータを読み取ります
#data_json.json文件 { "test_case1":{ "key": "value1"、 "status_code":200 }、 "test_case2":{ "key": "value2"、 "status_code":200 }、 "test_case3": { "key": " value3 "、"status_code":200 } } #python读取json文件 @ ddt クラスInterfaceTest(unittest.TestCase ): def setUp(self): self.url = "http://httpbin.org / get " def tearDown(self): print(self.result) @file_data(" data_json。json ") #同じレベルのディレクトリにない場合は、追加の処理が必要ですdef test_get_request(self、key、status_code): r = requests.get(self.url、params = {"key":key}) self.result = r.json() self.assertEqual(r.status_code、status_code) if __name__ == ' __ main __ ': unittest.main ()