美文网首页软件测试
Locust性能测试3--参数化、数据依赖

Locust性能测试3--参数化、数据依赖

作者: 伊洛的小屋 | 来源:发表于2020-08-21 11:28 被阅读0次
    • 场景链路压测的时候通常都是按照用户实际使用流程进行压测,同接口自动化一样,一定会涉及到数据依赖的问题
    1.举例
    • Django后台通常需要csrf验证,而一般csrftoken需要通过get接口获得
    from locust import HttpUser, task, between
    from lxml import etree
    
    USER_CREDENTIALS = [
        ("login1", "pwd1"),
        ("login2", "pwd2"),
        ("login3", "pwd3"),
    ]  # 登录账户
    
    csrf_token = []
    
    
    class LoginDemo(HttpUser):
        wait_time = between(2, 5)  # 模拟用户等待2到5s然后执行
    
        @task(1)
        def on_start(self):  # 任务开始时准备
            header = {
                "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) "
                              "Chrome/83.0.4103.61 Safari/537.36 "
            }  # 请求头
    
            # 获取csrf
            r_get = self.client.get("user/login/")
    
            # 从返回的html页面中,解析出 csrfmiddlewaretoken
            dom = etree.HTML(r_get.content.decode("utf-8"))
            try:
                csrf_token['csrfmiddlewaretoken'] = dom.xpath('//input[@name="csrfmiddlewaretoken"]')[0].get("value")
                print(csrf_token)
            except:
                print('参数csrfmiddlewaretoken获取失败!')
    
            if len(USER_CREDENTIALS) > 0:
                user, pwd = USER_CREDENTIALS.pop()  # 取出账户名密码
    
                r_post = self.client.post("user/login/", {
                    "token": 'TOKEN',  # TOKEN
                    "username": user,  # 用户名
                    "password": pwd,  # 密码
                    "next": ""
                }, header=header
                                          )
    
                assert r_post.status_code == 200  # 断言请求返回200
    
                print(r_post.status_code, r_post.text[:1000])  # 打印状态码及返回text
    
        @task(2)
        def view_index(self):
            print('访问首页')
            r = self.client.get("/index/")
    
            print(r.status_code)
    
        @task(6)
        def view_tag(self):
            print('访问标签页')
            r = self.client.get("/tag/")
    
            print(r.status_code)
    
    
    if __name__ == "__main__":
        import os
    
        os.system("locust -f demo.py --host=URL")  # 需要测试的地址
    
    • 这里我们使用了etree 来获取get接口返回的数据
    2.更新请求头
    self.client.headers.update(header)
    
    3. 数据依赖
    • 转化接口返回数据,然后获得
    import json
    
    @task(2)
    def view_index(self):
          r = self.client.get("/index/")
          response = json.loads(r.text)
          demo = response['取值']  # 假如取demo
          print("===>", response['取值'], type(response))  # 取值
          
          self.client.get('index/url/{}/'.format(demo))
    
    
    4. 小结

    欢迎下方【戳一下】【点赞】
    Author:伊洛Yiluo
    愿你享受每一天,Just Enjoy !

    相关文章

      网友评论

        本文标题:Locust性能测试3--参数化、数据依赖

        本文链接:https://www.haomeiwen.com/subject/qmqujktx.html