很多網(wǎng)站需要先登錄才能訪問(wèn)其他的接口乡革,下面以先登錄然后訪問(wèn)->群管理頁(yè)面->問(wèn)題件管理頁(yè)->索賠件管理為例
# 保存為locustfile.py
# coding=utf-8
from locust import HttpLocust, TaskSet, task
# 實(shí)現(xiàn)場(chǎng)景:先登錄(只登錄一次)咐熙,然后訪問(wèn)->群管理頁(yè)面->問(wèn)題件管理頁(yè)->索賠件管理
class UserBehavior(TaskSet):
def _login(self):
'''登錄方法'''
# host = 'https://gd.baoshi56.com' # 服務(wù)器地址
loginUrl = "/admin/common/login.html"
h = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
}
body = {"account": "********", # 賬號(hào)
"password": "******", # 密碼
}
# self.client調(diào)用get和post方法篷就,跟requests是一樣的
# requests.get 對(duì)應(yīng)client.get
# requests.post 對(duì)應(yīng)client.post
r = self.client.post(loginUrl, data=body, headers=h)
if r.status_code == 200:
print("登錄成功")
else:
print(r.status_code + "登錄失敗")
# 定義on_start()相當(dāng)于用例的準(zhǔn)備操作
def on_start(self):
'''任務(wù)開(kāi)始準(zhǔn)備工作:只登錄一次'''
self._login() #用戶登錄
# 任務(wù)1-訪問(wèn)群管理頁(yè)面
# @task裝飾該方法表示為用戶行為弟翘。
# 括號(hào)里面參數(shù)表示該行為挑選執(zhí)行的權(quán)重箩做,數(shù)值越大莽红,執(zhí)行頻率越高,不設(shè)置默認(rèn)是1
@task(2)
def admin_group(self):
r = self.client.get("/admin/group/grouplist.html/")
if r.status_code == 200:
print("訪問(wèn)群管理頁(yè)面功")
else:
print(r.status_code + "訪問(wèn)群管理頁(yè)面失敗")
# 任務(wù)2-問(wèn)題件管理頁(yè)
@task(1)
def admin_question(self):
r = self.client.get("/admin/question_record/questionrecordlist.html/")
if r.status_code == 200:
print("訪問(wèn)問(wèn)題件管理頁(yè)面功")
else:
print(r.status_code + "訪問(wèn)問(wèn)題件管理頁(yè)面失敗")
# 任務(wù)3-項(xiàng)目
@task(1)
def admin_claim(self):
r = self.client.get("/admin/claim_record/claimrecordlist.html/")
if r.status_code == 200:
print("訪問(wèn)索賠件管理頁(yè)面功")
else:
print(r.status_code + "訪問(wèn)索賠件管理頁(yè)面失敗")
# 性能測(cè)試配置
"""
WebsiteUser()類用于設(shè)置性能測(cè)試邦邦。
task_set :指向一個(gè)定義了的用戶行為類安吁。
min_wait :用戶執(zhí)行任務(wù)之間等待時(shí)間的下界,單位:毫秒燃辖。
max_wait :用戶執(zhí)行任務(wù)之間等待時(shí)間的上界鬼店,單位:毫秒。
"""
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 1000
max_wait = 1000
if __name__ == "__main__":
import os
os.system("locust -f locustfile.py --host=https://gd.baoshi56.com")
# -f 參數(shù)是指定運(yùn)行的腳本
# --host是指定運(yùn)行項(xiàng)目的host地址黔龟,
# 這里用的https://gd.baoshi56.com妇智,
# 和代碼里面訪問(wèn)的地址拼接起來(lái)就是完整地址了
設(shè)置1個(gè)虛擬用戶滥玷,每秒啟動(dòng)1個(gè)服務(wù),點(diǎn)start后運(yùn)行結(jié)果:
從結(jié)果可以看到登錄的請(qǐng)求只訪問(wèn)了一次巍棱,然后是任務(wù)1的次數(shù)差不多是任務(wù)2惑畴、任務(wù)3請(qǐng)求次數(shù)的2倍
image.png
image.png