Locust介绍安装与基本使用方法

一、Locust介绍

1、Locust简介

Locust(蝗虫)是一个开源的性能测试工具,主要思想就是模拟一群用户访问你的系统

2、特点

(1)在代码中定义用户行为

  • 不需要安装笨重的软件,只是简单的Python代码

(2)分布式和可扩展

  • Locust支持在多台机器上的运行负载测试,因此可用于模拟数百万用户的请求

(3)经过验证和战斗测试

  • Locust被用于许多真实的项目中

(4)Locust有一个整洁的HTML+JS的用户界面,实时显示相关测试细节

  • 由于用户界面是基于网络的,它是跨平台的和容易扩展

二、Locust安装

安装命令:

pip install locust

安装成功验证:

locust --version    # 查看安装的版本

locust -h           # 查看使用帮助

注意:python的版本最好在3.0以上

三、Locust使用方法

1、核心步骤

  1. 定义任务(接口请求):普通函数,必须有一个形参,必须使用@task修饰函数
  2. 定义任务集(用户行为):一个类,必须继承TaskSet,类里面为定义的任务
  3. 定义用户类(用户):一个类,必须继承HttpUser,配置host地址,复写tasks,格式为列表或字典,值为定义的任务集名称
  4. 启动服务,配置执行:locust -f 文件名

例子:

from locust import HttpUser, TaskSet, task


# 定义任务集
class TaskTest(TaskSet):
    # 定义任务
    @task
    def say(params):
        print("正在说话")

    @task
    def sing(params):
        print("正在唱歌")


# 定义用户类
class Test(HttpUser):
    tasks = [TaskTest]
    host = "http://localhost"

执行locust步骤:

(1)打开pycharm终端输入locust -f 文件名称运行

(2)打开浏览器输入localhost:8089运行locust控制界面

(3)输入数据点击start swarming执行代码

  • Number of users (peak concurrency):并发数量即用户数量
  • Spawn rate (users started/second):每秒加载的用户数
  • Host (e.g. http://www.example.com) :主机地址,代码中有的话可以默认执行

2、任务集常用的方法

(1)on_start:前置方法(前置任务),在所有任务之前调用一次

(2)on_stop:后置方法(后置任务),当任务集停止时调用一次

(3)@task(weight):修饰函数,将函数定义成任务。weight代表权重,权重越大执行次数越多,默认值是1

from locust import TaskSet, task


# 定义任务集
class TaskTest(TaskSet):
    # 定义任务
    @task(10)
    def say(params):
        print("正在说话")

    @task(5)
    def sing(params):
        print("正在唱歌")

    def on_start(self):
        self.say()

    def on_stop(self):
        self.sing()

3、用户类常用的属性

(1)min_wait:用户执行任务之间等待时间的下界,单位:毫秒,默认值:1000

(2)max_wait:用户执行任务之间等待时间的上界,单位:毫秒,默认值:1000

(3)host:被测应用的网址,例如:http://localhost

(4)weight:用户被选中的概率,权重越大,被选中的机会就越大,默认值:10

from locust import HttpUser

# 定义用户类
class Test(HttpUser):
    tasks = [TaskTest]
    host = "http://localhost"
    min_wait = 1000
    max_wait = 2000
    weight = 10

 4、locust分布式应用——web界面实现

(1)主机(控制机)

locust -f 目录\执行文件名 --master 

(2)从属主机(执行机)

locust -f 目录\执行文件名 --worker --master-host=主机ip地址 --master-port=主机端口

从属主机必须依赖的重点:

  • 必须有python及locust环境
  • 必须有主机脚本的副本
  • 如果从属主机与主机在同一台机器上,--master-host和--master-port可以不写

 5、locust分布式应用——无图模式实现(非web界面)

locust -f 目录\执行文件名 --master --headless -u 200 -r 20 --expect-workers 2 --run-time 20s --csv ./result.csv


--headless:不使用web界面
-u:虚拟用户数
-r:每秒生成的用户数
--expect-workers:执行机数量
--run-time:运行时间(h:小时,m:分钟,s:秒)
--csv:保存执行结果

 四、Locust在接口测试中的应用

简单案例实现:

from locust import HttpUser, TaskSet, task

headers = {"content-type": "application/json;charset=UTF-8"}
data = {"username": "hogwarts", "passwords": "test12345", "code": ""}
params = {"page": 1, "limit": 20, "goodsSn": "11111", "name": ""}


# 定义任务集
class TaskTest(TaskSet):

    # 定义任务
    # 登录方法
    @task(1)
    def login(r):
        response = r.client.post(url="/admin/auth/login", json=data, headers=headers)
        headers["x-litemall-admin-token"] = response.json()["data"]["token"]
        print(response.json())

    # 获取商品列表方法
    @task(1)
    def list(r):
        response = r.client.get(url="/admin/goods/list", params=params, headers=headers)
        print(response.json())

    def on_start(self):
        self.login()

    def on_stop(self):
        self.list()

# 定义用户类
class Test(HttpUser):
    tasks = [TaskTest]
    host = "https://litemall.hogwarts.ceshiren.com"
    min_wait = 1000
    max_wait = 3000

运行结果:

猜你喜欢

转载自blog.csdn.net/ouihsiad/article/details/129342742