Jmeter接口和性能测试理论与实战

目录

一、性能测试理论知识

1、性能测试的概念

2、性能测试的类型

3、性能测试的指标

二、Jmeter性能测试实战(初步)

步骤:

1、添加线程组

2、添加HTTP请求

3、添加查看结果树

4、添加断言

6、添加聚合报告

查看聚合报告:

三、参数化

1、用户参数

2、用户自定义变量

3、CSV数据文件

四、接口关联

1、正则表达式

2、json extractor(json提取器)


一、性能测试理论知识

1、性能测试的概念

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

2、性能测试的类型

基准测试:也是单用户测试,测试环境确定以后,对业务模型中的重要业务做单独的测试,获取单用户运行时的各项性能指标,为多用户并发测试和综合场景测试等性能分析提供参考依据。

负载测试:对系统不断增加压力或增加一定压力下的持续时间,直到某项或者多项指标到达临界值(此时临界值仍满足我们的要求性能值)。

稳定性测试:给系统加载一定业务压力的情况下,使系统运行一段时间,检测是否稳定。

压力测试:在强负载下的测试,查看系统在峰值情况下是否功能隐患,系统是否具有良好的容错能力和可恢复能力。

并发测试:并发测试(绝对并发),是指在极短的时间内,发送多个请求,来验证服务器对并发的处理能力。

3、性能测试的指标

响应时间:指用户从客户端发起一个请求开始,到客户端接收到从服务器返回的结果,整个过程所耗费的时间。

并发(用户)数:某一时刻同时向服务器发送请求的用户数。

吞吐量:指的是单位时间内处理的客户端请求数量,直接体现软件系统的性能承载能力。

单位:每秒事务数(TPS)、每秒查询数(QPS)

补充:事务,即业务,一个事务可以对应一个请求/多个请求。一个事务对应一个请求时:TPS=QPS,一个事务对应n个请求时:QPS=n*TPS

点击数:指客户端向服务器发送请求时,所有页面资源元素(如:图片、链接、框架css、js等)的请求总数量。

注意:

-只有web项目才有此指标

-点击数不是页面上的一次点击

错误率:指系统在负载情况下,失败业务的概率。错误率=(失败业务数/业务总数)*100%

注意:

-大多系统都会要求错误率无限接近于0

-错误率是一个性能指标,不是功能测试里的随机bug

资源利用率:是指系统各种资源的使用情况,一般用“资源的使用量/总的资源可用量*100%”形成资源利用率的数据。

二、Jmeter性能测试实战(初步)

下载安装完Jmeter后可以切换中文:

步骤:

1、添加线程组

鼠标右键添加线程组:

填写要用到的参数:

线程数:Jmeter中用线程数来模拟用户数,有多少个线程数在这里就表示有多少个用户数。

Ramp-up时间(秒):表示要在多少时间内启动指定数量的线程数。

循环次数:每个线程发送请求的次数;如果勾选了“永远”,表示所有线程会一直发送请求,直到停止运行脚本。

调度器:压测的时候无法控制执行的时间,需要用到调度器设置线程组启动的开始时间和结束时间(配置调度器时需要勾选循环次数为“永远”)

2、添加HTTP请求

右键线程组->添加->取样器->HTTP请求

根据接口文档填写:

3、添加查看结果树

右键HTTP请求->添加->监听器->察看结果树

4、添加断言

右键HTTP请求->添加->断言->响应断言

举例:响应断言校验返回的文本中是否包含搜索词,添加"name":"北京"(这是根据预期返回结果的响应数据来填写)到测试模式中:

右键HTTP请求->添加->断言->断言持续时间
举例:假设要断言时间为500ms(注意这里的时间单位是毫秒)
5、添加断言结果

右键HTTP请求->添加->监听器->断言结果

这时再运行一次就可以看到断言结果啦

6、添加聚合报告

右键HTTP请求->添加->监听器->聚合报告

查看聚合报告:

聚合报告参数详解:

Label:每个JMeter的element的Name属性,例如HTTP Request的Name;

样本(Samples):发出请求数量;例如模拟20个用户,循环100次,所以显示了2000;

平均值(Average):默认情况下是单个Request的平均响应时间,当使用了Transaction Controller(事务控制器) 时,也可以用Transaction的时间,来显示平均响应时间 ,单位是毫秒。

中位数(Median):50%用户的响应时间小于该值;

90%百分位(90%Line):90%用户的响应时间小于该值;

95%百分位(95%Line):95%用户的响应时间小于该值;

99%百分位(99%Line):99%用户的响应时间小于该值;

最小值(Min):最小响应时间;

最大值(Max):最大响应时间;

异常%(Error%):错误率=错误请求的数量/请求的总数;

吞吐量(Throughput):默认情况下表示每秒完成的请求数(Request per Second);

接收KB/sec(Received KB/sec):每秒从服务器端接收到的数据量;

发送KB/sec(Sent KB/sec):每秒发送到服务器端的数据量。

三、参数化

(继续用上面接口示例演示)

1、用户参数

介绍:该参数化方式适用于参数较少的情况,如较少用户登录系统。

步骤:

1、添加用户参数模块

2、设置参数变量和值

添加变量/删除变量是指变量名称,即第一列;

添加用户/删除用户是指变量的值,即名称后面的值。

注意:若未勾选每次迭代更新一次,每次都会使用相同的数据

3、使用参数化的变量

注意:参数值应与用户参数定义的变量名保持一致。

4、运行,查看结果树

注意修改线程数,有几个参数值就需要添加几个线程数。

2、用户自定义变量

介绍:该参数化方式适用于变量不随请求迭代的常量,如IP地址、端口等。

步骤:

1、添加用户自定义变量功能模块

2、设置变量、变量的值

3、使用参数化字段

4、运行,查看结果树

3、CSV数据文件

介绍:该参数化方式适用于取值范围较大的情况,如上百、上千人员登录系统。

步骤:

1、桌面新建记事本,写入参数,保存后更改文件后缀为.csv文件

2、添加csv文件

3、jmeter导入csv文件

调整目录结构,注意查看结果树要放在最后:

4、修改参数为变量

5、修改线程组数量

根据csv文件中参数的数量修改

6、运行,查看结果

7、添加断言

在csv文件最后一列添加需要断言的参数

在jmeter中添加断言:

修改csv配置,添加需要断言的字段

添加响应断言

点击运行,断言成功

四、接口关联

介绍:调用一个接口,得到参数,将这个参数设为变量,在下一个接口中调用这个参数。

示例:

接口一:获取验证码

url:http://kdtx-test.itheima.net/api/captchaImage

返回格式:json

请求方式:get

接口二:用验证码登录

url:

返回格式:json

请求方式:post

请求参数:

名称类型是否必填说明示例
usernamestring必填用户名admin
passwordstring必填密码

HM_2023_test

codestring必填返回值2
uuidstring必填验证码返回参数

1、正则表达式

(1)添加正则表达式提取器

(2)写正则表达式

引用名称:变量名;

正则表达式:就是需要提取的内容,()括号表示需要提取的部分,()前后是提取的边界内容;

模板:正则表达式的提取模式。这里是固定格式:$数字$,如果正则表达式有多个提取结果,则结果是数组形式,模板$1$,$2$等等,表示把解析到的第几个值赋给变量;从1开始匹配,以此类推。若只有一个结果,则只能是$1$;

匹配数字:正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值(比如1代表取第一个值),负数则表示提取所有符合条件的值。

缺省值(Default Value):匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。

(3)填写获取到的变量并运行

这里因为是json格式的数据体,所以还需要添加一个“HTTP信息头管理器”,填写Content-Type:application/json;charset=UTF-8

运行成功:

可能遇到的问题:

1、运行后只有一个http请求的响应结果,需要检查线程数是否修改为对应http请求的数量;

2、注意http的端口号是80,https的端口号是443;

3、查看结果树只显示当前http的响应结果,如果要看整个线程组的结果树,注意“查看结果树”放置的目录位置,就要在线程组目录下面了;

4、响应结果出现中文乱码的问题。解决方法:在jmter的bin目录下面找到jmeter.properties文件,修改sampleresult.default.encoding=UTF-8,重启jmeter后就可以了。(当然也有其他方法,自行查找解决吧~~~)

2、json extractor(json提取器)

        当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递。如下,从获取验证码接口返回的json中提取uuid,变量名设置为uuid,在其他请求中可以直接调用这个变量,或者作为post参数。

1、添加json提取器

2、设置变量名和参数

json extractor中使用$代表原来接口的返回值,取值如下图:

Variable names : 名称

JSONPath Expression:JSON表达式

Match Numbers:匹配哪个,可为空即默认第一个

Default Value:未取到值的时候默认值

3、查看结果树,登录成功

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值