code学习

jmeter项目实战

作者:地球匆匆的过客

一:测试工具:jmeter

jmeter介绍

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

jmeter作用

(1)能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。

(2)完全的可移植性和100% 纯java。

(3)完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。

(4)完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。

(5)精心的GUI设计允许快速操作和更精确的计时。

(6)缓存和离线分析/回放测试结果。

jmeter下载/安装/基本使用

测试流程以及对应组件

jmeter项目实战

(2)参考教程:

链接:https://pan.baidu.com/s/17qfMlCekH5y_D-32O26MiQ?pwd=q458

提取码:q458

二:项目实战

名词介绍

(1)QPS

Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

(2)并发数

并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

(3)RT:响应时间

执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间RT(Response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。

(4)吞吐量

系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个request 对CPU消耗越高,外部系统接口、IO速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间。

QPS(TPS):(Query Per Second)每秒钟request/事务 数量

并发数: 系统同时处理的request/事务数

响应时间: 一般取平均响应时间

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间

并发数 = QPS*平均响应时间

实际举例

我们通过一个实例来把上面几个概念串起来理解。按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 时间就叫做峰值时间。

公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

1、每天300w PV 的在单台机器上,这台机器需要多少QPS?

( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

2、如果一台机器的QPS是58,需要几台机器来支持?

139 / 58 = 3

测试流程

jmeter项目实战

接口文档和需求分析

接口相关文档参考链接“https://www.toutiao.com/article/7140841902211056162/?log_from=e37fffdef16f2_1663815250665”

通过接口文档需求分析,我们要知道以下信息:

  1. 该接口提供的服务
  2. 接口的地址、端口号、请求方式
  3. 请求参数与响应参数各个参数的业务说明

有了这些信息我们才能在jmeter里边调试接口

测试计划

  1. 测试资源
  1. 性能测试服务配置,需给出运维同事服务器的相关配置并申请

例如:

b. 服务器数量

以实际业务情况为准,一般如果不是千级别的并发不需要分布式的性能测试环境

  1. 测试场景
  1. 业务场景或参数

用户的实际场景以及对应的参数

如模拟多个用户并发访问该接口,携带的参数有username和password

  1. 并发量

并发的数值,可以动态增量并发也可以静态从小并发值10逐渐增加分别测试。

  1. 测试持续时间

性能测试的持续时间,一般分为短时间的低并发量和长时间的高并发量的测试。

3)测试数据

接口对应的上传参数的取值,如username和password要测试的具体测试集有哪些,一般选择正式用户数据来模拟。

4)校验字段

服务器状态码和业务字段,如当前接口就是code与msg的内容。

总结以上信息,本次测试计划如下:

性能测试服务器配置:

测试场景:模拟多个用户同时访问该接口,

  1. 分别测试10/30/100/200并发,持续时间10分钟。
  2. 测试200并发,持续时间60分钟。

测试集:用户实际账号密码信息2000条

  1. 响应断言字段:code与msg

windows下jmeter调试

1)打开jmeter,选择TestPlan,鼠标右键,add一个线程组,如下图所示

jmeter项目实战

2)然后按照测试计划,10并发持续10分钟,填入相关信息,如下图所示

jmeter项目实战

Number of Threads(users):启动的用户数

Ramp-Up Period(in seconds):多少秒

两个加起来就是1秒启动10个用户

Scheduler:调度器

Duration(secode:):持续时长 单位:秒 性能测试持续时长

3)模拟http请求,选择Thread Group 右键add选择sampler----Http Request,如下图所示

jmeter项目实战

4)然后在Http Request填入相关信息

jmeter项目实战

Protocol[http]: 协议 http或https

Server Name or IP:服务器域名

Port Number:端口号,该接口端口号为443

Method:请求方式 get或post

Path: 服务器路径

content encoding:编码格式

Body Data:post的请求参数

5)添加请求头信息,选择Http Request右键add--Config Element----Http Header Manager如下图所示

jmeter项目实战

6)添加监听器(聚合报告/查看结果树),如下图所示

聚合报告

jmeter项目实战

查看结果树

jmeter项目实战

此时可以run一下,点击Run按钮,如下图所示

jmeter项目实战

然后看下结果树是否可以正常,调试下接口,如下图是正常的

jmeter项目实战

7)参数化

(有四种方式,我们参考第二种,具体四种的使用方式,见链接"https://blog.csdn.net/WSD_CSDN/article/details/104653217"。

CSV Data Set Config(CSV数据文件设置)

a. 我们先制造一些数据放到csv文件里边,如下图所示

jmeter项目实战

b. 然后右键add--Config Element---Csv Data SetConfig

jmeter项目实战

选项具体说明

jmeter项目实战

具体填的参数如下

jmeter项目实战

在http请求选项中引入这里的变量,变量名字用${}声明,如下图所示

jmeter项目实战

然后执行一下,在”查看结果树“下,查看是否正常引入变量,如下图所示

jmeter项目实战

8)响应断言

已知我们要做code和msg的断言,如当前业务所示,msg内容随机,不容易断言,但是code可以。

先创建断言组件,右键Add---Assertions--Response Assertions

jmeter项目实战

我们根据业务需求选择如下选项,如下图所示

jmeter项目实战

参数说明

Apply to

作用:指定断言作用范围

Main sample and sub-sample:作用于主main sample和子sub-sample(如重定向时场景,一个请求下会有多个子请求)

Main sample only:只作用于main sample

Sub-samples only:只作用于sub-sample

JMeter Variable Name to use:作用于JMeter变量

Filed to Test

响应文本(Text Response) - 从服务器返回的响应文本,比如body,包含HTTP头

响应代码(Response Code) - 比如 200

响应消息(Response Message) - 比如 OK

响应头(Response Headers) -包括Set-Cookie 头,如果有的话

请求头(Request Headers)-包含Accept-Encoding,Host,Referer等请求信息

URL样本 - URL地址

忽略状态(Ignore Status) - 指示JMeter设置sampler status的初始状态为success。sample status是否成功,由已Response status和断言结果决定,当选中Ignore Status时,Response status被强制设置为success,不执行进一步的断言判断。仅第一次断言时使用。

Pattern Matchings Rules

包括(Contains):如果响应中包含了指定的字符串,判断为成功,支持正则表达式

匹配(Matches):如果响应完全匹配指定的字符串,判断为成功,支持正则表达式

相等(Equals):如果响应完全匹配指定的字符串,判断为成功,不支持正则表达式

子字符串(Substring):如果响应中包含了指定的字符串,判断为成功,不支持正则表达式

否:对断言结果取反

或者:过个断言的时候,有一个通过则整个断言通过

到此,windows下调试已经结束,后边服务器环境搭建等教程后续更新!

继续阅读