locust 壓測之指令碼檢查點
阿新 • • 發佈:2019-01-13
檢查點簡而言之是用來檢查指令碼是否達到事先預想的結果,因為locus判斷請求是否成功只是通過請求響應的狀態碼是否為200或2xx來進行,缺乏可靠性。因此,有時請求返回的是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結果如下:
現在將檢查點的判斷條件改為:
將檢查點判斷條件改為:獲取到返回的頁面內容為:歡迎您回來...等的資訊後,請求執行報錯,
再次執行結果如下: