前面介绍了通过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文件中执行