加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 代碼講解
    • 命令行工具
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

Locust 性能測試實戰(zhàn)(一)

10/03 10:25
460
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

代碼講解

上一篇文章《初探Locust》,讓我們了解了Locust,現在我們就可以開始實戰(zhàn)了。

《初探Locust》中,我們已經完成了性能測試的登錄代碼,現在我們開始完善業(yè)務代碼,來講解Locust,代碼如下:

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
"""
@File:ConcurrentLogin.py
@Description: 描述
@Author:yeqinfang
@Email:yeqinfang@yeah.net
@Date: 2020/07/30
"""

import random
import json
from locust import HttpUser, task, between, HttpLocust
# from common.globalToken import oneToken


class QuickstartUser(HttpUser):

    wait_time = between(5, 9)

    @task
    def getpretrainedmodel(self):
        url = "/getpretrainedmodel"+"?index=0&limit=1"
        headers = {}
        headers["Authorization"] = "Bearer " + getattr(QuickstartUser, "adminLoginToken")
        res = self.client.request(method="GET", url=url, headers=headers)
        # print(res.text)

    @task(3)
    def testlabeltaskimg(self):
        url = "/testlabeltaskimg"
        headers = {}
        headers["Authorization"] = "Bearer " + getattr(QuickstartUser, "adminLoginToken")
        data = {
            'taskid': 'label_edge_admin_20200713105112',
            'istest': '1',
            'testids': 'label_edge_admin_20200713105112_2016,label_edge_admin_20200713105112_2015,label_edge_admin_20200713105112_2014,label_edge_admin_20200713105112_2013,label_edge_admin_20200713105112_2012,label_edge_admin_20200713105112_2011,label_edge_admin_20200713105112_2010,label_edge_admin_20200713105112_2009,label_edge_admin_20200713105112_2008,label_edge_admin_20200713105112_2007,label_edge_admin_20200713105112_2006,label_edge_admin_20200713105112_2005,label_edge_admin_20200713105112_2004,label_edge_admin_20200713105112_2003,label_edge_admin_20200713105112_2002,label_edge_admin_20200713105112_2001,label_edge_admin_20200713105112_2000,label_edge_admin_20200713105112_1999,label_edge_admin_20200713105112_1998,label_edge_admin_20200713105112_1997'
        }
        res = self.client.request(method="POST", url=url, data=data, headers=headers)
        # print(res.text)

    def on_start(self):
        url = "/logintp"
        data = {
          "user": "admin",
          "pwd": "12345678"
        }
        res = self.client.post(url=url, data=data)
        # print(res.text)
        setattr(QuickstartUser, "adminLoginToken", json.loads(res.text)["data"]["token"])


if __name__ == '__main__':
    pass

代碼中涉及一些模塊,詳解如下:

1、HttpUser:
如代碼所示,我們定義了一個類,它繼承了HttpUser,用于模擬用戶。HttpUser為每個用戶提供了一個客戶端屬性,這是一個HttpSession的實例,可用于向我們想要加載測試的目標系統(tǒng)發(fā)出HTTP請求。當測試開始時,locust將為它模擬的每個用戶創(chuàng)建這個類的實例。

2、between:
我們的類使用between定義了一個wait_time函數,它將使模擬用戶在執(zhí)行每個任務后等待5到9秒。

3、task:
2個接口通過@task來裝飾, 其中一個帶上參數3,將被連續(xù)執(zhí)行3次。任務不分先后順序,如果定義了wait_time函數,他們只會在任務間間隔這些時間,而不是同一任務中(如代碼的某個任務被執(zhí)行三次,不會間隔這個時間)。任務將會不斷被執(zhí)行,只要不去手動停止。

4、self.client.request
該方法是基于模塊requests的,因此request的用法跟requests.request一樣。

上面的代碼,實現了登錄后,對某些接口進行的請求。

命令行工具

locust是一個命令行工具,想要運行上面的代碼,可以通過該命令行運行,運行方式如下:

locust --web-host 10.12.1.82 --web-port 1234 -f D:360MoveDataUserslenovoDesktopTengine2_AutoTestScriptPerformance-TrainingConcurrentLogin.py

–web-host : 指定運行的IP
–web-port :指定運行的端口
-f :指定運行的性能腳本

還有其他使用的參數,后續(xù)用到再講解。

圖形界面

命令行運行程序后,通過自定義的端口訪問,10.12.1.82:1234 ,打開如下:
在這里插入圖片描述
在Locust中,用Python代碼定義用戶行為。然后使用locust命令及其web界面(可選)生成和模擬大量這些用戶,同時收集請求統(tǒng)計信息。

如上,模擬用戶數,指的是對一個接口請求的并發(fā)數量;每秒生成用戶數,指的是每秒產生的用戶,慢慢地往上增加,直到達到并發(fā)數量為止。也就是,假設模擬用戶數為1000,每秒生成用戶數為1,那么1000秒后,才有每次并發(fā)1000用戶去請求接口。

如上圖,定義了用戶數,每秒生成數和測試地址。建議通過Google打開(IE內核的瀏覽器是打不開的),輸入相關數據,即可開始測試,并圖形查看測試過程:
在這里插入圖片描述

相關推薦

電子產業(yè)圖譜