【接口自动化】获取本地的cookies值继承到后续的接口使用

笔者有一个项目用了两种方法,所以这次都列举出来使用。
第一个场景比较简单,就是继承登录时的token再返回到下一步接口的headers里,这样每次调用接口前都需要去更新token。
例子如下:

1.基本思路

# 每个login接口请求参数,返回结构都是不一样的,还需要分析,以下仅供参考
import requests,json
url='https://accounts.google.com/ServiceLogin'
# 登录的请求参数,json格式
data={}
resbody=requests.post(url,json=data)
# 具体返回参数如何取值要参考返回体的接口
token=json.loads(resbody.text)["token"]

# 取出来接口之后下一个接口使用
header={"token":token}
requests.get(url='https://mp.csdn.net/mp_blog',json=data,headers=header)

2.如何与接口方法运用起来

import requests
class Request_Keywords:
    def __init__(self):
        self.s = requests.session()
        # 每次运行接口时先调用post请求获取最新的token代码
		self.res=self.s.post(url=login_path, data=login_data, headers=headers)
		# 取当前账户的登录token值
		self.token = json.loads(self.res.text)['data']['authentication_token']

    # 接口调用的token传参
    def Request_Method(self, method, path, data=None,urlcontent=None):
        headers['API-ACCESS-TOKEN'] = self.token
        if method == 'post':
            res = self.s.post(url=URL, data=data, headers=headers)
            return res

其实这个方法有个弊端,就是每次跑接口都需要去调用login的接口,相当于跑一个接口断言都要运行两个接口,所以下面的方法二就来解决这个问题。

2.升级的基本思路
因为token是有时效的,大部分是一个月,所以我们可以在token没有变化的时候,就不需要去调用login接口,直接拿配置里的token来使用。那当token变化的时候我们就去调用login接口,拿到最新的token值再去更新配置里的token,这样的话就不需要每次去调用接口,对自动化的性能也是一个好的优化。

import os,requests
# 写好获取token的方法
def get_token():
    login_path=''
    login_data=''
    res = requests.post(url=login_path, data=login_data, headers=headers)
    # 取当前账户的登录token值
    token = json.loads(res.text)['data']['authentication_token']
    return token
# 新建一个token.txt配置
PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
token_data_path = PATH + r'\Config' + r'\token.txt'
def if_gettoken():
    # 读取文件里的token里的值
    with open(token_data_path, "r") as f:  # 打开文件
        token = f.read()  # 读取文件
#     将token取出来放在headers里
    headers={'API-ACCESS-TOKEN':token}
#   随意请求一个需要token的接口
    r = requests.get(url, headers=headers)
    re = json.loads(r.text)["message"]
#    判断是否登录成功,如果不成功就重新请求登录接口返回新的token,如果成功就不改变现在的值
    if re == "success":
        token = token
    else:
        # 请求返回登录的方法,返回token
        token = get_token()
        # 返回之后重新写入到token.txt配置文件中
        with open(token_data_path, "w") as f:
            f.write(token)
    # 这里是重新赋值token值
    headers = {"token": token}
    return headers

方法是有了,但是如何运用在实际的自动化测试中呢。
我们需要在所有用例执行之前去调用这个if_gettoken()的方法,那可以利用unittest的框架

mport unittest
class Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        if_gettoken()
    def testcases(self):
        pass

你可能感兴趣的:(python语法,自动化,python,json)