前面介紹了通過ddt的方法請求yaml數據,當時我們用的方法是直接ddt.data的方法去讀取的,也非常簡單,今天我們通過ddt方法中的file_data讀取數據
file_data
file_data屬於ddt庫中的一個方法,主要作用在安靜這邊理解就是讀取json或者是yaml結尾的文件。
源碼:
def file_data(value): """ 方法裝飾器添加到您的測試方法中。 應該添加到' ' unittest.TestCase ' '實例的方法中。 ' ' value ' '應該是相對於文件目錄的路徑 包含修飾過的' ' unittest.TestCase ' '。該文件 應該包含JSON編碼的數據,可以是列表或 字典 對於列表,列表中的每個值對應一個 測試用例,值將連接到測試方法 的名字。 對於dict,鍵將用作名稱的后綴 測試用例,值將作為測試數據提供。 """ def wrapper(func): setattr(func, FILE_ATTR, value) return func return wrapper
小試牛刀
這里還用上次的那個接口來做。詳情見:requests---通過yaml+ddt封裝測試數據
yaml文件
配置測試用例。
test01: - url: http://apis.juhe.cn/simpleWeather/query test_name: 正確的key和正確的city key: 331eab8f3481f37868378fcdc76cb7cd city: 上海 cake: 查詢成功 - url: http://apis.juhe.cn/simpleWeather/query test_name: 正確的key和錯誤的city key: 331eab8f3481f37868378fcdc76cb7cd city: 未知地 cake: 暫不支持該城市
執行文件
這里安靜先對請求的接口進行封裝,然后在通過file_data進行讀取yaml文件,因為這里又兩條用例,所以通過for依次進行讀取。最后進行斷言調試
import requests import ddt import unittest @ddt.ddt class Test(unittest.TestCase): # 封裝接口 def select(self,url,key,city): data = { "key":key, "city":city } r = requests.post(url,data=data) return r # 請求數據 @ddt.file_data('data.yaml') def test_01(self,value): for i in value: url = i.get('url') key = i.get('key') city = i.get('city') cake = i.get('cake') result = Test().select(url=url,key= key,city= city).text self.assertIn(cake,result) if __name__ == '__main__': unittest.main()
這里安靜通過file_data讀取yaml數據,我們也可以通過file_data進行讀取json文件,然后測試數據放入到json文件中執行