性能测试Jmeter 性能测六-压测实例详解

明确压测目的

一般对于访问量大的接口需要做压测,这样才能保证上线后大量请求打到服务器的时候不会导致接口响应不过来、@@等情况。

压测的目的是用提前预测的最大并发访问量请求接口且接口能在可接受的时间内成功返回所有数据。

 

压测工具

JMETER

 

设计压测过程

  1. 明确前提条件所需要的数据获取方式,比如前提数据可直接通过接口触发生成,或可直接通过插入数据库生成,或可直接用现有页面工具生成等。
  2. 实现前提条件用例,针对上述三种生成前提数据的方式详细描述。
    1. 通过接口触发生成, 一般都需要配置HTTP请求头,配置好后输入对应IP、端口、PATH路径、入参(入参参数化,参考本人性能测试Jmeter 性能测试系列)

    1. 通过插入数据库数据生成,然后明确系统所用的数据库类型,因为不同的类型在jemter中的配置也不一样,如果是MYSQL,先下载MYSQL的jdbc驱动mysql-connector-java-5.0.8.jar放到jemter文件夹的lib目录下,一般也可能jemter自带jdbc驱动,可在jemter安装包对应的lib目录下找到。然后按照MYSQL的方式配置具体参数,连接好后就可以通过增、删、改的SQL语句准备测试前提数据。具体JMETER连接数据库配置如下:

在test plan中将添加驱动地址

 

在Thread Group-添加-配置原件-JDBC Connection Configuration

配置JDBC Connection Configuration:Variable Name:该名称自定义,在JDBC Request会用到。Database URL:jdbc:mysql:// 数据库IP地址:数据库端口/数据库名称。JDBC Driver Class:com.mysql.jdbc.Driver。Username:数据库连接用户名。Password:数据库连接密码,举例如下:

添加JDBC Request

JDBC Request中的Variable Name 与JDBC Connection Configuration 中Variable Name值一致,Query Type:可以选择sql的类型,是查询还是修改还是删除操作,如果是要执行查询功能,则选择select Statement,如果是更新可以选择Update Statement,我们这里选择Update Statement。

注意,如果这里要执行多条语句,如多条查询语句,Query Type:选择select Statement,语句之间要用分号隔开且在在配置JDBC Connection Configuration中的Database URL时末尾要增加一个参数?allowMultiQueries=true

具体的更新语句按照测试需求填入Query即可,注意还是需要将变量参数化。

    1. 通过页面接口生成,UI页面生成测试数据也其实是通过接口实现的,通过浏览器控制台,抓取到使用的接口和入参来生成前提数据,也需要做参数化。一般这种情况实验一下是否校验登录,如果不校验登录则不需要加Cookie,如校验登录还需在HTTP Cookie Manager中加上控制台中抓取到的Cookie值,一般这个值是有时效的,超过时效就不可用了,所以这里最好是能将登录接口作为前提用例设计进来,这样实际生成测试前提数据的接口所使用的cookies就总是有效的。

在浏览器控制台中抽取必须参数填入JMETER的HTTP Request中

HTTP Cookie Manager配置

HTTP Request配置

  1. 实现最终想要压测接口的用例,直接可在path中填入要请求的接口地址,包括ip,端口和接口都可一并写道path中,然后输入入参即可。

 

分析压测顺序和结果

执行顺序会按照添加用例的顺序从上到下依次执行,所以下一个用例的参数都会取自上一个用例的结果,可以在Test Plan的Thread Group中设置并发数和循环次数

 

一般会通过View Result Tree、View Result Tree或者Aggregate Report来分析压测结果。

  1. View Result Tree,可以直观的看到每条用例是否执行成功,入参、出参。
  2. Summary Report,一般会参考Std.Dev影响时间的标准方差,如果很大则MAX和MIN的参考价值不大,如果很小则表示越稳定。Error%错误率最好不要超过1%,表示系统性能压力过大。Average平均值,上述参数单位都是ms。Throughput(Transaction per Second每秒吞吐量,越大越好)字段值,表示每秒事务数。Sampler表示取样器提交了多少笔业务。
  3. Aggregate Report,一般会参考90% Line,意思是90%的请求响应时间,还有95% Line、99% Line。Average平均值、Throughput(Transaction per Second每秒吞吐量,越大越好)字段值。

HTTP默认请求值的使用方式:

一般为了更方便的维护用例,会将经常改变但是又属于公用的数据分离出来,如请求地址和端口,可以将他们设置为HTTP请求默认值,放到线程组的里面,HTTP Request之前,具体做法是:在线程组上右击选择-add-Config Element-HTTP Request Defaults,协议处根据实际情况写入HTTP或者HTTPS,在服务器名称或ip处输入请求地址如blog.csdn.net,这样配置好后,在HTTP Request接口中的服务地址或ip处就只需要写/login之类的具体的接口名称了。

后置处理器

为了获取上一个用例的响应结果中某个字段值可以使用后置处理器来获取想要的数据,可以使用Post Processors中的正则表达式提取器获取,这里要对正则有了解,明确怎么编写正则表达式才能取到需要的数据。

\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

HTTP Cookie Manager的应用

如果B接口请求时需要使用上一个接口A接口才有的cookie,这个时候可以通过设置HTTP Cookie管理器来实现,在线程组上添加配置元件选择HTTP Cookie 管理器,然后将该元件移交到Test Plan下,这样Jmeter会自动记录保存服务器在A接口请求的时候得到的cookie,并且可以在后面的所有请求中自动添加cookie。注意,每个线程的cookie是独立的,所以有多个线程时要注意添加的位置。

Ant工具的使用

如果想要将测试结果形成HTML报告,将测试结果发邮件,将测试用例放到jenkins执行,可以通过Ant工具实现。

下载地址https://ant.apache.org/binddownload.cgi

影响压测结果的其他因素

  1. 如在压测过程中需要准备前提数据则可能在造数过程中对服务器、数据库产生一定压力,这种情况下可能会影响压测结果。
  2. 执行压测的环境本身可能会影响压测结果。
  3. 如果只是通过jmeter做单纯的接口测试,则需要着重考虑对入参的用例设计,如字段空、字段值处于边界值、加入其它干扰字段时候的接口响应等。

猜你喜欢

转载自blog.csdn.net/chang_jinling/article/details/112683722