在之前的测试框架中,可以发现的是,我们的yaml数据中所有的url中的除了路径不同外,其余都是相同的,我们想办法将这一部分自动化,这样的yaml中写用例url的时候就不用再每次都写上域名,只需要输入路径即可
首先我们需要更改下之前的用例yaml文件中的url,将域名删除只留下路径即可,例如:
接下来我们在根目录创建一个config.yam文件,用于存储我们的URL中的公共部分, 这里由于公司相关,我隐藏了域名
base:
base_test_url: https://test.***
base_normal_url: https://***
接下来我们需要在yaml_util.py中再写一个读取config.yaml的方法,用于读取我们的url的公共部分:
import os
import yaml
#读取
class YamlUtil:
def read_yaml(self,key):
with open(os.getcwd() + '/extract.yaml', encoding='utf-8', mode='r') as f:
value = yaml.load(f, yaml.FullLoader)
return value[key]
# 写入
def write_yaml(self,data):
with open(os.getcwd() + '/extract.yaml', encoding='utf-8', mode='a') as f:
yaml.dump(data, stream=f, allow_unicode=True)
# 清空
def clear_yaml(self):
with open(os.getcwd() + '/extract.yaml', encoding='utf-8', mode='w') as f:
f.truncate()
# 读取测试用例
def read_testcase(self,yaml_name):
with open(os.getcwd() + '\\testcases\\' + yaml_name, mode='r', encoding='utf-8') as f:
value = yaml.load(f, yaml.FullLoader)
return value
# 读取config.yaml
def read_config(self,one_node,two_node):
with open(os.getcwd() + '/config.yaml', encoding='utf-8') as f:
value = yaml.load(f, yaml.FullLoader)
return value[one_node][two_node]
读取之后,我们需要在request_util.py中定义一个_init_()方法来传入我们的url的公共部分:
import requests
import json
from common.yaml_util import YamlUtil
class RequestUtil:
def __init__(self,two_node):
self.base_url=YamlUtil().read_config('base',two_node)
sess= requests.session()
def send_request(self,method,url,datas=None,**kwargs):
method=str(method).lower() #转换小写
url=self.base_url + url
res=None
if method=="get":
res=RequestUtil.sess.request(method=method,url=url,params=datas,**kwargs)
elif method=="post":
if datas and isinstance(datas,dict):
datas=json.dumps(datas)
res=RequestUtil.sess.request(method=method, url=url, data=datas, **kwargs)
else:
pass
return res
最后修改下我们的test_login.py,就可以实现啦