1. 程式人生 > 實用技巧 >自動化測試之 ddt 驅動 yaml/yml 檔案

自動化測試之 ddt 驅動 yaml/yml 檔案

一、上篇文章我們使用了 unittest + ddt 驅動 json 檔案做資料驅動測試,本篇文章我們採用unittest + ddt 驅動 yaml/yml 檔案來實現資料驅動測試,話不多說上原始碼。。。

  • ddt.file_data:裝飾測試方法,引數是檔名。檔案可以是 json 或者 yaml 型別。
    • 注意:如果檔案是以 “.yml”或者".yaml" 結尾,ddt 會作為 yaml 型別處理,其他檔案都會作為 json 檔案處理。  

    • 如果檔案是列表,列表的值會作為測試用例引數,同時,會作為測試用例方法名字尾顯示。    

    • 如果檔案是字典,字典的 key 會作為測試用例方法的字尾顯示,字典的 value 會作為測試用例引數。  

二、安裝 yaml 模組

  • pip install pyyaml
  • 注意:安裝的包名為 pyyaml,但是匯入的是 yaml
  • yaml 檔案可以通過 open 函式來讀取,然後通過 load() 方法轉換成字典
  • 如下圖例項

import yaml

f = open("ddt_data.yaml", encoding="utf8")
print(yaml.load(f))
f.close()

# 執行結果如下
"""
[{
'url': 'http://cms.duoceshi.cn/xxx/xxxx/xxxxx', 
'method': 'post', 
'header': {'Content-Type': 'application/x-www-form-urlencoded'}, 
'params': {'userAccount': 'admin', 'loginPwd': 123456}
}]
"""
  • 如下圖為我的資料檔案,且檔案中資料型別為字典

import requests
import unittest
from ddt import ddt, file_data

@ddt
class CmsLogin(unittest.TestCase):

    @file_data("ddt_data.yaml")
    def testcase(self, method, url, header, params):
        res = requests.request(method, url, headers=header, data=params)
        
print(res.text) if __name__ == '__main__': unittest.main() # 執行結果如下 """ Ran 2 tests in 0.215s .. {"code":"200","msg":"登入成功!","model":{}} {"code":"400","msg":"登入帳號不存在!","model":{}} ---------------------------------------------------------------------- """
  • 如下圖為我的資料檔案,且檔案中資料型別為列表

import yaml
from ddt import ddt, data, unpack

def get_yml_data(yml_file):
    with open(yml_file, encoding="utf8") as f:
        return yaml.load(f)

@ddt
class CmsLogin(unittest.TestCase):

    @data(*get_yml_data("ddt_data.yml"))
    @unpack
    def testcase(self, name, age):
        print(name + "----" + str(age))

if __name__ == '__main__':
    unittest.main()

# 執行結果如下
"""
Ran 3 tests in 0.000s

...
Evan----19
Lvan----20
Alex----21
"""