jujube109
2021-04-25 16:26
采纳率: 100%
浏览 142
已采纳

python locust模拟带token请求是否存在缺陷?

最近使用python locust对项目一个接口进行压测,由于被测接口使用的token进行用户凭证验证,大体实施思路是先请求登录接口获取响应头中的token,再将token拼接到被测接口的请求头中请求被测接口,实际运行时会有大概10%-20%的失败请求,初步验证是由于locuts模拟的token无效导致。

1.代码实现:

   login方法和被测接口实现方法都属于继承了TaskSet的类下

  1. 1获取token方法
 def login(self):
        pw = '*****'
        md = hashlib.md5()
        md.update(pw.encode('utf-8'))
        pwd5 = md.hexdigest()
        url = "http://******:*****/login/login"
        payload = json.dumps({
            "code": "****",
            "password": pwd5,
            "username": "****"
        })
        headers = {
            'Content-Type': 'application/json'
        }
        response = requests.request('post',url, headers=headers, data=payload)
        return response.headers['x-auth-token']
  1. 2.locust请求被测接口实现
        token = self.login()
        head={
            'x-auth-token': token,
            'Content-Type': 'application/json'
        }
        with self.client.post("/被测接口",headers= head,json=body,catch_response = True) as response:
            code=response.json().get("code")
            key=response.json().get("key")
            request_header=response.request.headers
            print("{0}--->:{1}".format(key,request_header),end="\n\n")
            if code != 200 and key!= "SUCCESS":
                response.failure("未成功请求响应码:%dkey值:%s"%(code,key))

由于被测接口对用户凭证验证成功或失败响应码都是200,所以通过if函数对响应体中的code值和key值进行判断,从而断言请求是否成功,响应中的code值不为200与key值不为SUCCESS直接将请求打为失败请求。print函数打印出响应体中的key值与请求头帮助验证。

2. 结果

  设置20个虚拟用户每秒启动5个(其实不管怎么设置),运行都会有将近20%的请求是失败请求

将控制台中print函数中的打印信息中响应key值为"NOT_LOGIN"的请求头中的token取出使用postman验证,code值依然为401,说明断言没问题

对比

  与jmeter比较正则提取出来的token,每次请求用的都是同一个token,但不会出现失败请求。

 

结论:

 初步验证认为locust会去模拟第一次拿到的token,但模拟的带token的请求通过后端验证率并不高,不知是locust内部对token处理机制的缺陷还是本人实现的错误。希望高人指教,谢谢!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • CSDN专家-黄老师 2021-04-25 18:26
    已采纳

    不知道你是做爬虫还是做测试,模拟带token的请求先观察token每次请求是否都好变化,一般情况下,后端会对每个请求设置时间戳校验token,建议再分析每次请求的cookies,token的变化规律

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-04-26 10:45

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-04-26 17:13

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题