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

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的变化规律

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况