我以为今天的工作时间要结束了,看了眼时间,就竟然距离下班还有一个多小时,没有其它的工作内容,索性在码一篇,我在下午看这个部分的教程时候几度感觉昏睡过去而且头疼,但最后实在是没事情做,照着样例一行一行写下来,发现也没有那么难懂了,这个行业不知道是不是只有我,没有什么技术背景也不爱研究,然后还在测试行业努力的生长着。
这篇可以说是结合别人的案例在按照自己所测试的接口来完成的,因为我在写完上一篇然后实践过后,不知道接下来该怎么做了。所以搜索了一下发现“测试数据与脚本相分离”这一个概念。但其实,写完之后感觉反而麻烦,对于现有工作而言增加工作量,但如果之后是一个体系化的系统,可能会有帮助吧。我不确定,但是反正都是学习...当没有什么具体目标的时候,就开始干现在看到的吧,毕竟,不然就是啥也不干了...废话结束。
测试数据与脚本相分离,三个步骤:
- 存储测试数据--->存储于yaml文件中
- 读取测试数据--->专门写一个文件来读取yaml
- 执行测试数据--->pytest执行测试用例
存储测试数据到yaml中
我看到有介绍说yaml是为了方便人类读写,我第一次写,败在了空格上。
空格的重要性
如图,如果在键值对中,冒号后不加空格,就不会有特殊颜色标识,在读取时也会报错。
更多yaml的知识有待后续继续补充。
总之,yaml中对应的一份测试数据主要包括三个部分:
- case :测试数据用途
- http:关于请求所用到的一些参数,比如方法、路径、参数、headers等等。
-
expected:响应数据
对比教程,写下了如下yaml文件。
test_data.yaml
读取yaml中的测试数据
这个部分的函数也可以直接写到测试用例执行文件中,不过也是说为了之后更改不互相影响,就也分离开写一个文件。
首先需要下载yaml
pip3 install pyyaml
读取yaml需要用到yaml.load方法,可以把权键值变成类字典。然后就是在这个类字典中一层层剥离,拿到case、http以及expected中包含的键值。
中间用到了zip函数,将对应的元素打包成元组,具体的剥离步骤,就靠print解决了。
import os
import yaml
path=os.path.dirname(__file__)#获取到除了当前文件以外的路径
data_path=os.path.join(path,'test_data.yaml')#获取到yaml路径
def get_test_data(data_path):
case=[]
http=[]
expected=[]
with open(data_path) as f:
data=yaml.load(f.read(),Loader=yaml.SafeLoader)#把权键值变成类字典
print("data:",data)#包括tests在内的字典
test=data['tests']#剥离出tests
print("tests:",test)
for td in test:
case.append(td.get('case',''))#剥离出case
http.append(td.get('http',{}))#剥离出http
expected.append(td.get('expected', {}))#剥离出expected
print("case:",case)
print("http:",http)
print("expected:",expected)
parameters=zip(case,http,expected)#将case、http、expected合并成一个tuple
list_params=list(parameters)##zip变成一个list
print(list_params)#是一个list
print(list_params[0])#是一个tuple
print(list_params[0][0])#case部分
print(list_params[0][1])#http部分
print(list_params[0][2]) #expected部分
return list_params
get_test_data(data_path)#验证获取数据
执行测试数据
利用之前获取到的数据,进行各项值的传递。
import requests
import os
import commlib
path=os.path.dirname(__file__)
data_path=os.path.join(path,'test_data.yaml')
url='https://xxx'
class Test_rps:
def test_statistics(self):
list_params=commlib.get_test_data(data_path)
now_url=url+list_params[0][1]["path"]
params=list_params[0][1]["params"]
response=requests.get(now_url,params=params)
res=list_params[0][2]["response"]["statuscode"]
assert response.status_code==res
自我记录,有错误欢迎指正~
网友评论