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
相關文章
相關標籤/搜索