levels of contents

python接口自动化时如何处理登录失效问题又避免每次接口请求都去调用登录接口

问题:在做接口自动化时,接口要做登陆验证,因此需要在调用接口前,先登录获取token,但通常来说,登录接口返回的token是有失效时间的,我们应该避免每次请求接口,都去调用一次登录接口重新获取token

思路:使用functools 的lru_cache模块,在自动化代码每次调用get_token方法时,如果还未超时,就不去真正请求登录接口,而是返回缓存内的值

"""
description:获取token,目前缓存时间为600s
author:xx
lastModifiedTime:2021/10/11
"""

from functools import lru_cache
import requests
import time
import json
requests.packages.urllib3.disable_warnings()


# 调用这个方法获取token,设置的缓存10分钟
def get_token(user_id, password):
    time_out = 600  # 过期时间设置为600s
    token = get_token_cache(time.time() // time_out, user_id, password)
    if not token:
        time.sleep(1)
        token = get_token_cache(time.time(), user_id, password)  # 如果token为空,再去登陆一次
    assert token is not None, "登陆失败"
    return token


@lru_cache(maxsize=10)
def get_token_cache(_, user_id, password):
    login_data = {"userId": user_id, "password": password}
    res = requests.post(login_url, json=login_data, verify=False)
    if res.status_code == 200 and "accessToken" in res.text:
        accessToken = res.json()['accessToken']
        return accessToken
    else:
        log.info("登陆失败:%s" % res.text)
        return None

  

posted @ 2025-04-23 16:28  非文艺女青年  阅读(29)  评论(0)    收藏  举报
levels of contents