1. 程式人生 > >locust 壓測之指令碼檢查點

locust 壓測之指令碼檢查點

檢查點簡而言之是用來檢查指令碼是否達到事先預想的結果,因為locus判斷請求是否成功只是通過請求響應的狀態碼是否為2002xx來進行,缺乏可靠性。因此,有時請求返回的是200,但是卻並未是測試想要的結果。所以需要使用檢查點來檢查請求返回的資料是否正確,增加指令碼的可靠性和說服力。

要獲取到請求返回的資料資訊,可以使用正則表示式來獲取頁面中想要的內容,如果是對http介面的壓測,可以直接獲取到介面的返回資訊進行檢驗。可根據實際需要選擇哪種方式校驗指令碼是否執行成功。

下面以登入業務的壓測指令碼為例:

登入指令碼:login.py
#-*-encoding:utf-8-*-
from locust import HttpLocust,TaskSet,task
import re


def login(l):
	l.head={ #頭部資訊
	"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
	"Accept-Encoding":"gzip, deflate, br",
	"Accept-Language":"zh-CN,zh;q=0.9",
	"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
	}
	l.loginparameter={  #引數資訊
	"formhash":"1f3a2bb2",
	"referer":"http://localhost:8090/discuz/",
	"loginfield":"username",
	"username":"A12345",
	"password":"123456",
	"questionid":"0",
	"answer":""
	}
	with l.client.post("/logging.php?action=login&loginsubmit=yes&floatlogin=yes&inajax=1",
		headers=l.head,data=l.loginparameter,catch_response=True
) as response: #使用正則表示式獲取返回的資料,進行檢查點判斷 pattern=re.compile(r"\(\'messageleft\'\)\.innerHTML = \'<p>(.+)?</p>") page_content=response.content # print type(page_content) # print page_content reval=pattern.search(page_content) print reval.group() if reval.group()!="('messageleft').innerHTML = '<p>歡迎您回來 新手上路 A12345</p>": response.failure(u"登入失敗!")
def index(l): l.client.get("/") def profile(l): l.client.get("/index.php") class UserBebavior(TaskSet): tasks ={index:2,profile:1} def on_start(self): login(self) class WebsiteUser(HttpLocust): task_set=UserBebavior min_wait=5000 max_wait=9000 執行指令碼:run_test.py #-*-encoding:utf-8-*- import os os.system("locust-script.py -f e:/py/login.py --host=http://localhost:8090/test ")

 

執行run_test.py結果如下:

 

現在將檢查點的判斷條件改為:

將檢查點判斷條件改為:獲取到返回的頁面內容為:歡迎您回來...等的資訊後,請求執行報錯,

再次執行結果如下: