1.先介绍一下:requests.session、请求头和token的调用
在进行接口测试时,若需要保持一些共用的数据,比如cookies信息。session对象能够帮我们跨请求保持某些参数,也会在同一个session实例发出的所有请求之间保持cookies。所以我们可以把获取的token值,直接存储到请求头里,之后再进行登录、查看信息和退出时,默认使用一样的请求头,也就是使用同样的token。这样就不用那么麻烦的把token存储起来,再一次次的调用了。
2.以post请求的关键字为例,keywords.py:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import json
# 创建一个会话,实现客户端和服务器端的会话保持
session = requests.session()
# 保存解析后的json字典
json_res = {}
# 把参数分割成字典
def param_split(param):
params = {}
# 若参数不为空,则处理为字典
if len(param) > 0:
p = param.split("&")
# 用for遍历列表,然后存入字典中
for i in p:
pp = i.split("=")
params[pp[1]] = pp[0]
print("字典:", params)
return params
# 发送post请求的关键字
def post(url, param):
global response, json_res
# 把参数分割成字典
params = param_split(param)
# verify=False意味着不校验证书,可直接访问https
res = session.post(url=url, data=params, verify=False, timeout=10)
# 使用content属性进行重新编码,防止乱码
response = res.content.decode("utf8")
print("响应内容(json格式):", response)
json_res = json.loads(response)
print("把结果解析成字典:", json_res)
print("加入token前的请求头:", session.headers)
# 添加键值对到请求头
def add_header(hkey, jkey):
global session, json_res
session.headers[hkey] = json_res[jkey]
print("加入token后的请求头:", session.headers)
# 断言
def assert_equals(key, value):
global json_res
# 把状态码中的数字,例如“200”转换成字符串
if json_res[key].__str__() == value:
print("断言结果:PASS")
else:
print("断言结果:Fail")
if __name__ == "__main__":
param_split("name=Will&password=123456")
post("http://www.XXX/XX/HTTP//auth", "")
add_header("token", "token")
assert_equals("status", "200")
运行结果:
3.关键字驱动的作用:可实现功能和用例的分离。其中功能指的是:发送请求、添加请求头和添加断言等,用例指的是调用功能来实现的接口用例。
4.实际运用关键字驱动,编写文件test_keywords.py(接口信息放到了配置文件中):
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from common import keywords
from common.get_url import get_url
from common.get_log import get_log
log = get_log()
# 调用授权接口
log.info("调用授权接口")
keywords.post(get_url("Auth", "AuthUrl"), "")
# 添加token到请求头
log.info("添加token到请求头")
keywords.add_header("token", "token")
# 调用登录接口
log.info("调用登录接口")
keywords.post(get_url("Login", "LoginUrl"), "username=XXX&password=XXX")
# 添加断言
keywords.assert_equals("status", "200")
# 调用注销接口
log.info("调用注销接口")
keywords.post(get_url("Logout", "LogoutUrl"), "")
运行结果: