1、性能测试该怎么做?
利用工具模拟真实用户操作。
2、性能测试基础:
3、性能测试常见的性能指标:
4、性能测试分类: 根据测试需求
负载测试 load testing
压力测试(稳定性测试)
并发测试
配置测试
基准测试
容量测试
5、性能测试的关键:
需求分析 --> 分析被测系统的架构/分析被测系统的业务逻辑/具体性能指标。
项目 |
Jmeter |
Loadrunner |
Locust |
授权方式 |
开源 |
商业收费 |
开源 |
开发语言 |
Java |
C/Java |
Python |
测试脚本形式 |
GUI |
C/Java |
Python |
并发机制 |
线程 |
进程/线程 |
协程 |
单机并发能力 |
低 |
低 |
高 |
分布式压力 |
支持 |
支持 |
支持 |
资源监控 |
不支持 |
支持 |
不支持 |
报告与分析 |
简单图表 |
完善 |
简单图表 |
支持二次开发 |
支持 |
不支持 |
支持 |
1、LoadRunner 是非常有名的商业性能测试工具,功能非常强大。使用也比较复杂,目前大多介绍性能测试的书籍都以该工具为基础,甚至有些书整本都在介绍LoadRunner 的使用。
2、Jmeter 同样是非常有名的开源性能测试工具,功能也很完善,它可以作为接口测试工具的使用。但实际上,它是一个标准的性能测试工具。关于Jmeter相关 的资料也非常丰富,它的官方文档也很完善。
3、Locust 同样是性能测试工具,虽然官方这样来描述它 “An open source load testing tool.” 。但其它和前面两个工具有着较大的不同。相比前面两个工具,功能上要差上不少,但它也并非优点全无。
优势:
1、测试脚本形式:简单好学,学习成本低。
2、单机并发能力:通过python特有的协程方式生成成千上万的并发,使在一台普通的电脑跑出几万几十万的并发。
1、Locust是什么?
2、Locust安装
前提:安装python3.7或更高版本
# 安装
pip3 install locust
# 验证安装
locust -V
3、Locust命令行参数
参数名称 |
参数值 |
参数说明 |
-h, --help |
不带参数 |
查看帮助信息 |
-H HOST, –host=HOST |
HOST |
指定被测试的主机,采用以格式:http://10.21.32.33 |
–web-host=WEB_HOST |
WEB_HOST |
指定运行 Locust Web 页面的主机,默认为空 “。 |
-P PORT, –port=PORT, –web-port=PORT |
PORT |
指定 –web-host 的端口,默认是8089 |
-f LOCUSTFILE, –locustfile=LOCUSTFILE |
LOCUSTFILE |
指定运行 Locust 性能测试文件,默认为: locustfile.py |
–csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE |
CSVFILEBASE |
以CSV格式存储当前请求测试数据。 |
–master |
不带参数 |
Locust 分布式模式使用,当前节点为 master 节点。 |
–slave |
不带参数 |
Locust 分布式模式使用,当前节点为 slave 节点。 |
–master-host=MASTER_HOST |
MASTER_HOST |
分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 –slave 节点一起运行时使用,默认为:127.0.0.1. |
–master-port=MASTER_PORT |
MASTER_PORT |
分布式模式运行, 设置 master 节点的端口号,只在与 –slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。 |
–master-bind-host=MASTER_BIND_HOST |
MASTER_BIND_HOST |
做分布式压测时,指定分机IP。只用于master。如果没有指定,默认是所有可用的IP(即所有标记主机IP的slave) |
–master-bind-port=MASTER_BIND_PORT |
MASTER_BIND_PORT |
做分布式压测时,指定分机port。默认是5557与5558。 |
–headless |
-c 和 -r 配合 |
无ui界面模式运行测试,需要 -c 和 -r 配合使用. |
-c NUM_CLIENTS, –clients=NUM_CLIENTS |
NUM_CLIENTS |
指定并发用户数,作用于 –no-web 模式。 |
-r HATCH_RATE, –hatch-rate=HATCH_RATE |
HATCH_RATE |
指定每秒启动的用户数,作用于 –no-web 模式。 |
-t RUN_TIME, –run-time=RUN_TIME |
RUN_TIME |
设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。 |
-L LOGLEVEL, –loglevel=LOGLEVEL |
LOGLEVEL |
选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO. |
–logfile=LOGFILE |
LOGFILE |
日志文件路径。如果没有设置,日志将去 stdout/stderr |
–print-stats |
不带参数 |
在控制台中打印数据 |
–only-summary |
不带参数 |
只打印摘要统计 |
–no-reset-stats |
不带参数 |
Do not reset statistics once hatching has been completed。 |
-l, –list |
不带参数 |
显示测试类, 配置 -f 参数使用 |
–show-task-ratio |
不带参数 |
打印 locust 测试类的任务执行比例,配合 -f 参数使用. |
–show-task-ratio-json |
不带参数 |
以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用. |
-V, –version |
不带参数 |
查看当前 Locust 工具的版本. |
4、Locust脚本开发及使用方法
脚本:
'''导包'''
from locust import HttpUser, between, task,TaskSet
class WebsitUser(HttpUser):
# 设置一个随机时间间隔
wait_time = between(3, 5)
# host可填可不填,不填时执行脚本打开locust页面时可填入
host = "https://baidu.com"
def on_start(self):
self.client.post('/login', {
'username': 'test',
'password': ''
})
@task
def index(self):
self.client.get('/index')
@task
def about(self):
self.client.get('/about')
常用的locust类:
请求方法(client)
启动参数:
1、locust核心库
2、Locust工作流程:
# 第一步:导入Locust包
from locust import TaskSet,HttpUser,task
# 定义一个类
class WebsitUser(HttpUser):
# 设置一个随机时间间隔
wait_time = between(3, 5)
def on_start(self):
self.client.post('/login', {
'username': 'test',
'password': ''
})
# 设置任务,@task装饰器用于声明函数是一个测试任务,@task(权重)
@task(1)
def index(self):
self.client.get('/index')
TaskSet的用法:
TaskSet实现了虚拟用户所执行任务的调度方法。包括:
-- 任务执行顺序:schedule_task
-- 指定下一个执行的任务:execute_next_task
-- 执行任务:execute_task
-- 休眠等待:wait
-- 中断:interrupt
from locust import TaskSet,HttpUser,task
# 定义任务信息
class TestBaidu(TaskSet):
@task
def test_001(self):
self.client.get('/')
# 控制执行,
class TestUser(HttpUser):
task_set = task(TestBaidu)
host = 'http://lbs.amap.com'
max_wait = 5000
min_wait = 3000
1、UI界面
配置启动参数
Number of users : 设置模拟用户数。
Spawn rate : 每秒产生(启动)的虚拟用户数。
Host :被测主机(如果在脚本中指定了host启动页面将使用脚本中的host)
Start swarming :开始运行性能测试。
每秒请求用户数(TPS)
响应时间
用户数
运行的异常信息
2、测试结果
结果说明
下载测试结果