目录
性能测试测试点
分类:负载测试、压力测试、容量测试、配置测试
其他的测试:基准测试、稳定性测试、并发测试等
指标体系
- 响应时间(Response Time):反应系统处理效率的指标(how fast),从开始到完成某项任务所需的时间,响应时间通常随着负载的增加而增加。
- 吞吐量(Throughput):反映系统处理能力的指标(how much),指单位时间内完成工作的量,可以从客户端或者服务端两方面的视角进行综合的评估。
- 事务处理能力(TPS):对某项事务处理时的响应情况,通常包含三个指标——处理事务的响应时间、处理事务的成功率、单位时间内处理事务的量。
- 资源利用率(Utilization):资源的利用率由多个指标构成——CPU利用率(%Processer Time)、CPU队列长度、可用内存数、磁盘使用率(%Disk Time)、磁盘队列长度、网络带宽、线程池消耗、连接池消耗。
用户数
- 最佳用户数:指系统能够承受的最佳负载。
- 最大用户数:指系统能够承受的最大负载,容量。
- 在线用户数:所有正在访问系统的用户(不一定是正在操作,而是包含客户端和服务端仍建立session会话机制的用户)。
- 并发用户数:同时对于服务器产生的用户总数。
- 系统用户数:系统额定的用户数(设计容量,是一个理论值)。
监控windows系统指标
- 管理工具->性能监视器->用户定义->新建”数据收集器”->下一步
- 点击”数据收集器”,右侧右击选择”Performance Counter”,再右击”属相” 设置计时器、日志格式、时间间隔
- 右键点击”数据收集器”,在停止条件中设置持续时间不受限制
- 点击开始,运行之后查看结果
使用Python监控系统资源
Psutil是一个基于python的跨平台监控管理模块,他提供了非常方便的进程信息。可以之间使用pip安装。
import psutil print(psutil.cpu_times()) print(psutil.cpu_stats())
安装和使用
官网:Locust Documentation — Locust 2.5.0 documentation
安装
pip install locust
查看安装版本信息:locust --version
代码模板
# 参考文章:https://blog.csdn.net/swinfans/article/details/88915176
import os
from locust import TaskSet, task, HttpUser
# 创建任务类
class Test1(TaskSet):
def on_start(self):
# 初始化方法on_start,相当于setup
print('初始化方法')
@task
# @task装饰器加到定义的方法前面表示这个方法就是一个可执行任务,装饰方法中可以添加数字(@task(2)),表示执行任务的执行次数的比例
def getindex(self):
"""
在Locust类中具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力(请求方法)。
通常情况下不会直接使用Locust类,因为其client属性没有绑定任何方法,所以在使用Locust时需要先继承Locust类,
然后再继承子类中的client属性中绑定客户端的现实类。client的post和get方法同requests类。
:return:
"""
req = self.client.get('/', name='测试', catch_response=True)
# 添加断言必须在请求方法中设置catch_ response参数,值为True
if req.status_code == 200:
req.success()
else:
req.failure('失败')
def on_stop(self):
# 清除方法,相当于teardown
print('清除方法')
# 创建用户类
class BI(HttpUser):
# wait_time = between() 设置运行过程中的间隔时间,需要在locust中引入between
tasks = [Test1]
min_wait = 1000
max_wait = 2000
host = 'http://127.0.0.1:81'
if __name__ == '__main__':
os.system('locust -f testindex.py')
问题处理
定义用户类继承HttpLocust类,运行的时候报错
ImportError: The HttpLocust class has been renamed to HttpUser in version 1.0
现在已经改为继承HttpUser类
class DeprecatedHttpLocustClass( metaclass=deprecated_locust_meta_class( "The HttpLocust class has been renamed to HttpUser in version 1.0. " "For more info see: https://docs.locust.io/en/latest/changelog.html#changelog-1-0" ) ): pass
添加用户执行任务报错
Exception: No tasks defined. use the @task decorator or set the tasks property of the User
继承HttpLocust类使用 task_set =任务类名 指定用户要执行的任务,这个方法已被抛弃,使用的时候会报错,已改为继承HttpUser类使用 task=[] ,列表中存储的是要执行的任务类的类名
locust启动参数
-H HOST 或 --host HOST | 被测试的域名或ip地址端口(需要带http://前缀) |
--web-host WEB_HOST | 运行locust的机器ip地址,浏览器访问的ip(127.0.0.1\localhost\机器ip) |
-P PORT 或 --port PORT 或 --web-port PORT | 指定locust运行的端口,默认为8089,可以通过该参数进行自定义修改 |
-f LOCUSTFILE或 --locustfile LOCUSTFILE | 指定locust运行的文件 |
--no-web | 无图形模式运行的时候需要添加-c和 -t参数,执行的时候根据参数配置直接运行 |
-c NUM_CLIENTS 或 --clients NUM_CLIENTS | 无图形模式,设置运行的用户数 |
-r HATCH_RATE 或--hatch-rate HATCH_RATE | 指定每秒生成的用户数 |
-t RUN_TIME或--run-time RUN_TIME | 设置总运行时长(数字加单位,s/m/h/,如1h30m) |
--master | 设置为主进程 |
--master-bind-host MASTER_BIND_HOST | 主进程,绑定ip地址,只能用于--master |
--master-bind-port MASTER_BIND_PORT | 主进程,绑定端口,默认为5557,只能用于--master |
--slave | 设置为助理进程 |
--master-host MASTER_HOST | 助理进程连接的主进程ip地址,只能用于--salve |
--master-port MASTER_PORT | 助理进程连接的主进程port,默认端口号5557,只能用于--salve |
--step-load | 步长加载模式,做负载测试,需要有--step-clients 、--step-time参数 步长:每段步长启动的用户数, 步长时间:每个步长的持续时间 |
---|---|
--step-clients STEP_CLIENTS | 步长加载模式中,总共加载的用户数,仅用于--step-load一起用 |
--step-time | 步长加载模式中,加载用的时间,仅用于--step-load 一起用 |
--cvs CVSFILEBASE 或 --cvs-base-name CVSFILEBASE | 将运行结果写入到指定前缀的cvs文件中,默认为2秒写入一次,可以自行设置 |
--cvs-full-history | 将每个统计的信息写入到_stats_history.cvs文件中 |
--loglevel LOGLEVEL 或 -L LOGLEVEL | 设置日志级别:DEBUG\INFO\WARNING\ERROR\CRITICAL,默认为INFO |
--logfile LOGFILE | 指定日志输出的文件,没有设置的时候,默认转到stdout\stderr |
--print-stats | 控制台输出 |
--only-summary | 仅输出概要报告 |
参考文章:
性能测试工具--Locust官方文档(API)解读(全) - 云+社区 - 腾讯云 (tencent.com)
python+locust性能测试(二)之locust深入使用 - Solarium - 博客园 (cnblogs.com)