一、全面熟练requests库以及底层方法调用逻辑
requests请求部分:
def get(url, params=None, **kwargs): url:接口地址 parms:参数 **kwargs:可变长度的字典 def post(url, data=None, json=None, **kwargs): data:参数(表单:) json:参数 def put(url, data=None, **kwargs): def delete(url, **kwargs):
上面的四个方法其实底层都是调用的requests方法:
requests.request("get", url, params=params, **kwargs)
requests.request()调用的是session.request方法
session.request(method=method, url=url, **kwargs)
def request( self, method,--请求方式 url,--请求地址 params=None,--params参数 data=None,--data参数 headers=None,--请求头 cookies=None,--cookies信息 files=None,--文件上传 auth=None,--鉴权 timeout=None,--超时 allow_redirects=True,--重定向 proxies=None,--设置代码 hooks=None,--钩子 stream=None,--文件下载 verify=None,--证书验证 cert=None,--CA证书 json=None,--json参数 ):
requests响应部分:
res.text--返回字符串形式的结果 res.json()--返回字典形式的结果 res.content--返回字节形式的结果 res.status_code--返回状态码 res.reason--返回状态信息 res.cookies--返回cookie信息 res.headers--返回响应头 res.request.xxx--得到请求数据
二、requests接口自动化测试实战
接口关联三个层次
1.通过类变量保存中间变量实现接口关联
2.通过单独的文件保存中间变量实现接口关联
3.极限封装成零代码的方式实现接口关联
1)正则表达式提取实现接口关联
re.search() 通过正则匹配一个值,通过下标[1]取值,没有匹配则返回None
re.findall() 通过正则匹配多个值,返回list,通过下标取值,没有匹配则返回None
2)JsonPath提取实现接口关联
jsonpath.jsonpath() 返回list,通过下标取值,没有匹配则返回None
三、接口自动化测试的封装(统一请求封装)
1.去除很多重复的,冗余的代码
2.实现统一的异常处理以及日志监控
四、接口关联封装(基于一个独立的yaml文件)
- featrue: 模块 story: 接口 title: 用户登录成功 request: method: post url: http://47.113.201.88:1999/zybf/api/yuser/integration/entry/loginByPassword header: null data: mobile: 13122167332 password: e10adc3949ba59abbe56e057f20f883e userType: s validate: expectcode: 200 resultcheck: \'"msg":"操作成功"\' extract:
五、数据驱动
@pytest.mark.parametrize('caseinfo',read_yaml_testcase('testcases/test_api.yaml'))