加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 代码讲解
    • 命令行工具
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

Locust 性能测试实战(一)

2小时前
3
阅读需 10 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

代码讲解

上一篇文章《初探Locust》,让我们了解了Locust,现在我们就可以开始实战了。

《初探Locust》中,我们已经完成了性能测试的登录代码,现在我们开始完善业务代码,来讲解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的实例,可用于向我们想要加载测试的目标系统发出HTTP请求。当测试开始时,locust将为它模拟的每个用户创建这个类的实例。

2、between:
我们的类使用between定义了一个wait_time函数,它将使模拟用户在执行每个任务后等待5到9秒。

3、task:
2个接口通过@task来装饰, 其中一个带上参数3,将被连续执行3次。任务不分先后顺序,如果定义了wait_time函数,他们只会在任务间间隔这些时间,而不是同一任务中(如代码的某个任务被执行三次,不会间隔这个时间)。任务将会不断被执行,只要不去手动停止。

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 :指定运行的性能脚本

还有其他使用的参数,后续用到再讲解。

图形界面

命令行运行程序后,通过自定义的端口访问,10.12.1.82:1234 ,打开如下:
在这里插入图片描述
在Locust中,用Python代码定义用户行为。然后使用locust命令及其web界面(可选)生成和模拟大量这些用户,同时收集请求统计信息。

如上,模拟用户数,指的是对一个接口请求的并发数量;每秒生成用户数,指的是每秒产生的用户,慢慢地往上增加,直到达到并发数量为止。也就是,假设模拟用户数为1000,每秒生成用户数为1,那么1000秒后,才有每次并发1000用户去请求接口。

如上图,定义了用户数,每秒生成数和测试地址。建议通过Google打开(IE内核的浏览器是打不开的),输入相关数据,即可开始测试,并图形查看测试过程:
在这里插入图片描述

相关推荐

电子产业图谱