压力测试

定义:是给软件不断加压,强制其在极限的情况下运行,观察它可以运行到何种程度,从而发现性能缺陷,是通过搭建与实际环境相似的测试环境,通过测试程序在同一时间或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况

解决问题:针对性的测试与分析,找到影响系统性能的瓶颈,评估系统在实际使用环境下的效率情况,评价系统性能以及判断是否需要对应用系统进行优化处理或结构调整,并对系统资源进行优化。

所需的api参数

地址输入
http请求头:Content-Type:application/json
压测任务需求确认:
固定接口参数进行压测还是进行接口参数随机化压测?
要求支持多少并发数?
TPS(每秒钟处理事务数)目标多少?响应时间要达到多少?
压服务器名称还是压服务器IP,一般都是压测指定的服务器

jemeter线程组/取样器

1、添加 -threads-线程组
线程数:虚拟用户数
准备时长Ramp-Up Period:全部线程启动的时长
循环次数:每个线程发送的次数
2、线程组-添加-sampler-http请求(一个线程组下可添加多个sampler)
web服务器:
默认协议是http;默认端口号是80;服务器名称或ip:请求目标服务器名称或ip地址
路径:服务器url

jmeter的断言基本使用

1、添加断言:线程组-添加-断言-响应断言
apply to(应用范围):
main sampler only:仅对当前取样器进行断言、一般是一个请求
响应文本:即响应数据,json文件等
响应代码:http的响应状态码 200 500 404
响应信息:http响应代码对应的响应信息 OK found
resspones header:响应头
模式匹配规则:
包括:包含在里面就成功
匹配:响应内容完全匹配
equals:完全匹配-区分大小写

2、断言结果监听器:线程组–添加-监听器-断言结果
内容未取样器的名称
断言失败,查看结果树结果标红
3、每个http下面可以添加单独的查看结果树,可添加多个断言

聚合报告分析

新增聚合报告:线程组-添加-监听器-聚合报告
label:取样器名称
samples:一共发出多少个请求,例如10个用户,循环10此,一共请求数100
everrage:平均响应时间
median:一般用户的响应时间
90line:90% 用户的响应不会超过该时间
95line:95% 用户的响应不会超过该时间
min:最小响应时间
max:最大响应时间
error%:错误的请求数量/请求的总数
througput:吞吐量–默认情况下表示每秒完成的请求数-可类比为qpskb/sec:每秒接收数据量

jmeter压测脚本jmx讲解
1、打开方式subline,或者xml编辑器
2、运行日志和压测时间查看(基础按钮)

jmeter用户自定义变量

作用:很多变量在全局中都要用到,测试数据更改,可以在一处定义,四处使用–例如:服务器地址
添加:线程组–config element(配置原件)–user defined variable(用户定义变量)
2、引用方式:${xxx},在接口变量中使用

csv可变参数压测
jmeter读取csv、txt文件里面参数进行压测
添加:线程组–配置原件–csv data set config
如果是多个参数需要同时引用,则在CSV数据文件里面设置加多个字段
Variabled names(comma-delitited): csv_name,csv_pwd

jmeter jdbc request压测mysql

jdbc压测mysql相关准备工作,jar包添加,配置讲解
1、线程组–sample–jdbcrequest
2、jar包添加 mysql-connector-java-5.1.30.jar
3、jdbc connector configuration 配置
Max Number of connections : 最大连接数
MAX wait :最大等待时间
Auto Commit: 是否自动提交事务
DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blog
JDBC Driver Class : 数据库驱动,选择对应的mysql
username:数据库用户名
password:数据库密码

4、Jmeter压测实战之JDBC request压测Mysql, select语句
在线程组添加 jdbc request,添加select、insert语句
debug sample
Thread Group -> add -> sampler -> debug sampler
DBC request参数讲解
1、variable name of pool declared in JDBC connection configuration(和配置文件同名)
2、Query Type 查询类型
3、parameter values 参数值
4、parameter types 参数类型
5、variable names sql执行结果变量名
6、result variable names 所有结果当做一个对象存储
7、query timeouts 查询超时时间
8、 handle results 处理结果集

分布式压测

jmeter压测性能优化
1、使用非GUI模式:jmeter -n -t test。jmx -l result .jtl
2、少使用Listener, 如果使用-l参数,它们都可以被删除或禁用。
3、在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本。

4、包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。]
5、不要使用功能模式,使用CSV输出而不是XML
6、只保存你需要的数据,尽可能少地使用断言

7、如果测试需要大量数据,可以提前准备好测试数据放到数据文件中,以CSV Read方式读取。
8、用内网压测,减少其他带宽影响压测结果
9、如果压测大流量,尽量用多几个节点以非GUI模式向服务器施压

Jmeter压测生成多维度图形化HTML测试报告

jmeter压测结果转为html
jmeter -n -t /usr/local/software/jmeter/temp/linux_users_api.jmx -l /usr/local/software/jmeter/temp/jtl/result.jtl -e -o /usr/local/software/jmeter/temp/result

Jmeter简单压测示例

测试计划:测试元件的容器,相当于一个项目名称

1、首先新建线程组,可修改线程组名称

用来确定线程数数量,及多长时间内跑完设置的线程数

jemeter karfk 压测_jemeter karfk 压测


2、新建http请求

jemeter karfk 压测_线程组_02


3、新建http请求默认值

访问的服务器名称或IP是不变的,端口也是不变的,由于每个请求都要写一遍,这样工作量比较大,所以JMeter提供了HTTP请求默认值这样一个元件,让我们把重复的内容分离出来,只要定义一次就够了

jemeter karfk 压测_线程组_03


4、新建参数化

用户参数:给每一个线程赋值,如果运行的线程数大于添加的线程,则循环取值

jemeter karfk 压测_jemeter karfk 压测_04

5、正则表达式提取器

将后续操作需要的数据提取出来,此例是提取登录的token值

jemeter karfk 压测_线程组_05

6、查看结果树

用来查看运行结果数

jemeter karfk 压测_服务器_06