requests---通过yaml+ddt封装测试数据
前面安静介绍yaml的时候都提到过可以用来存储测试数据,帮助我们完成数据分离的测试思想,从而帮助我们以后更换测试数据更加方便
整体思路
我们主要思想就是进行测试数据的分离:
1、一个写数据的地方
2、一个读数据的文件
3、编写测试用例
封装读取Yaml
简单的进行对读取yaml进行封装,方便我们后面调用
import yaml import os class GetYaml(): def __init__(self,file_path): # 判断文件是否存在 if os.path.exists(file_path): self.file_path = file_path else: print('没有找到%s文件路径'%file_path) self.data = self.read_yaml() def read_yaml(self): with open(self.file_path,'r',encoding='utf-8')as f: p = f.read() return p def get_data(self,key=None): result = yaml.load(self.data,Loader=yaml.FullLoader) # 判断key是否存在 if key == None: return result else: return result.get(key) if __name__ == '__main__': read_yaml = GetYaml('data.yaml') xx = read_yaml.get_data('test_case') print(xx)
写入测试数据
我们将测试的数据写入到yaml中
test_case: 查询 url: http://apis.juhe.cn/simpleWeather/query test01: - test_name: 正确的key和正确的city key: 331eab8f3481f37868378fcdc76cb7cd city: 上海 cake: 查询成功 - test_name: 正确的key和错误的city key: 331eab8f3481f37868378fcdc76cb7cd city: 未知地 cake: 暂不支持该城市 test02: - test_name: 错误的key值和正确的city key: 331eab8f3481f37868378fcdc76cb7c city: 上海 cake: 错误的请求KEY - test_name: 错误的key值和错误的city key: 331eab8f3481f37868378fcdc76cb7c city: 未知地 cake: 错误的请求KEY
完成数据读取
读取yaml已经全部封装好了,然后数据也填写完成了,接下来就需要我们编写测试用例了。这里安静用到了ddt的格式进行读取yaml的数据,当然我们也可以使用ddt.file_data()的方法进行读取
这个安静分别写了两种获取yaml的数据内容
import os,requests import ddt import unittest from Interface.A3 import GetYaml # 获取到文件路径 file = os.path.join(os.path.dirname(__file__), 'data.yaml') yaml_data = GetYaml(file) result = yaml_data.get_data() url = result['url'] test_01 = result['test01'] @ddt.ddt class Test(unittest.TestCase): # 封装一个查询天气 def select(self,key,city): data = { "key":key, "city":city } r = requests.post(url,data=data) return r @ddt.data(*test_01) def test01(self,yaml_data): print('当前测试用例名称:%s'%yaml_data['test_name']) print('city:%s;key:%s'%(yaml_data['city'],yaml_data['key'])) result = self.select(city=yaml_data['city'],key=yaml_data['key']) self.assertIn(yaml_data['cake'],result.text) @ddt.data(*result['test02']) def test02(self,data): print('当前测试用例名称:%s'%data['test_name']) print('city:%s;key:%s'%(data['city'],data['key'])) result = self.select(city=data['city'],key=data['key']) self.assertIn(data['cake'],result.text) if __name__ == '__main__': unittest.main()
运行代码会发现用例已经执行完成了。
这里安静简单的对yaml数据进行分离,可能写的不是很完善,大佬们看到后勿喷,可以给安静一些经验。主要的是分享下测试数据分离的一种思想,在自动化中是非常重要的。