一、接口自动化统一请求封装
class RequestsUtil:
# 通过session会话去关联。session默认的情况下回自动的关联cookie
session = requests.session()
# 统一请求封装
def send_request(self, name, method, url, **kwargs):
rep = RequestsUtil.session.request(method, url, **kwargs)
return rep
其它的参数用可变长度的字典**kwargs表示
二、接口自动化接口关联封装
通过yaml配置文件来处理接口关联
1 创建关联文件extract.yaml
2 操作文件
![](https://i-blog.csdnimg.cn/blog_migrate/06d23c8e07e2c8e6c5c6dcdee246b571.png)
3 接口关联的使用
注:每次记得清除 extract.yaml
三、接口自动化多个基础路径封装
开发环境,测试环境,生产环境
一个项目中,在测试环境下,每个模块的基础路径都不一样.
商品管理:base_spgl_url
用户管理:base_yhgl_url
解决方案:
1.每个模块下都存在一个confitest.py文件。这个文件里面获取基础路径。
@pytest.fixture(scope="session", autouse=True)
def read_base_url():
return read_config_yaml("base","base_phpwind_url")
confitest.yaml 写基础路径
base:
base_weixin_url: https://api.weixin.qq.com
base_phpwind_url: http://47.107.116.139
@allure.story("访问phpwind论坛首页")
def test_phpwind_index(self, read_base_url):
urls = read_base_url + "/phpwind/"
res = RequestsUtil().send_request("get", url=urls)
write_extract_yaml({"csrf_token": re.search('name="csrf_token" value="(.*?)"', res.text).group(1)})
缺点:每次都要在方法里调用一下
2.在统计请求封装中,通过init方法去获取基础路径。
def __init__(self, one_nodo, two_node):
self.base_url = read_config_yaml(one_nodo, two_node)
# 统一请求封装
def send_request(self, method, url, **kwargs):
# 基础路径拼接
url = self.base_url+url
rep = RequestsUtil.session.request(method, url, **kwargs)
return rep
def test_phpwind_index(self):
urls = "/phpwind/"
res = RequestsUtil("base","base_phpwind_url").send_request("get", url=urls)
write_extract_yaml({"csrf_token": re.search('name="csrf_token" value="(.*?)"', res.text).group(1)})
如果在只写接口自动化测试用例代码,到这里就OK了。
四、其他功能
断言,加密,签名....
最终目的:希望把接口自动化框架封装完成之后,功能测试只需要写yaml格式的用例即
可,不需要写代码。
requests+yaml+pytest+allure
三层:yaml层,用例层,统计请求层。
五、问题
一个接口对应一个yaml,一个接口可能有很多用例(正例,反例)
1.很多重复代码
2.通过extarct.yaml实现的接口关联必须调用写入和读取的方法,那么是不是能够把这种关
联放到yaml里面去。反例没有access_token可以提取的,需要做判断。
3.yaml里面无法使用随机数方法。无法调用python里面的方法。
4.文件上传必须必须要写open方法读取文件路径。
5.断言还没加