接口自动化-关键字驱动基础篇

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"), "")

运行结果:

发布了26 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/changyixue/article/details/90241392