前面安静介绍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数据进行分离,可能写的不是很完善,大佬们看到后勿喷,可以给安静一些经验。主要的是分享下测试数据分离的一种思想,在自动化中是非常重要的。
来源:oschina
链接:https://my.oschina.net/u/4356468/blog/4275671