python性能测试工具Locust学习笔记

环境安装:python

  • 安装locust:pip install locustio
  • 若是python是较低版本,好比2.7,建议再安装pip install requests[security]

脚本编写:json

from locust import HttpLocust, TaskSet, task

class UserOne(TaskSet):

@task(1)
def baidu1(self):
self.client.get("/")
print "get one request is operation"

@task(2)
def baidu2(self):
requestParam = "key=value"
response = self.client.get("/test?"+requestParam)
code = response.json().get("code") 
print response.json()

class UserTwo(TaskSet):
tasks = {UserOne:2}
@task(1)
def leave(self):
print "get three request is operation"


class WebsiteUser(HttpLocust):
task_set = UserOne
min_wait = 100
max_wait = 600
host = "http://test"

参数解析:cookie

  • locust中的全部测试场景都是在taskset和locust两个类的继承子类中进行描述的,其中locust类至关于定义的用户,taskset类至关于用户的具体行为
  • task后的参数表示执行的频率占比,例如本脚本例子中的baidu1占比1/3,baidu2占比2/3

若是想要获取http请求的返回,须要在get请求时增长参数catch_response=True,可是增长后locust不会作任何校验甚至不记录请求事件数据结构


 

若是须要本身进行数据校验和请求记录须要本身实现events.request_success.fire和events.request_failure.fire测试

例如spa

            code = response.json().get("code")  
            if code == "200":  
                events.request_success.fire(  
                    request_type=response.locust_request_meta["method"],  
                    name=response.locust_request_meta["name"],  
                    response_time=response.locust_request_meta["response_time"],  
                    response_length=response.locust_request_meta["content_size"],  
                )  
            else:  
                events.request_failure.fire(  
                    request_type=response.locust_request_meta["method"],  
                    name=response.locust_request_meta["name"],  
                    response_time=response.locust_request_meta["response_time"],  
                    response_length=response.locust_request_meta["content_size"],  
                    exception="Response Code Error! Code:{0}".format(code)  
                ) 

 


遇到的坑code

  • locust里面的client是继承自requests,默认直接重定向,若是对请求返回的cookie有须要解析需求的,须要在请求时增长allow_redirects=False
  • locust里面的同一个def里面的client是循环使用的,相似于cookies是重复使用的,若是想要每次清除cookies进行测试,须要新增cookies.clear()
  • 本身进行结果校验时,获取响应结果,不能用json,由于json数据结构为字典,不能与sting进行转换,不能使用正则校验,只能字段校验,须要进行整包正则校验时,须要使用text
相关文章
相关标签/搜索