admin管理员组

文章数量:1651778

1 JMeter简介

越来越多的测试人员选择JMeter主要有以下几点原因:

  • JMeter是基于Java的开源工具,扩展性强,可自定义开发插件;
  • JMeter社区活跃,会定期更新、修改bug、优化功能;
  • JMeter学习成本低,提供了方便的图形界面来编辑和开发测试脚本,上手快;
  • JMeter可以和很多工具兼容,如Jenkins,方便测试自动化;
  • JMeter具有平台无关性,可以轻易在Windows、Linux和macOS上运行。

PS:JMeter毕竟是做压测的工具,自动化这块还是有缺陷。如果公司做一些简单的接口自动化,可以考虑使用JMeter快速完成,如果想做完善的接口自动化体系,建议还是基于python来做。

2 JMeter的安装和使用

2.1 Windows环境

首先需要安装JDK,然后再部署JMeter。注意,JMeter对JDK的版本是有要求的,一般至少要JDK8,这也是目前开发过程中使用频繁的版本。

1. 安装JDK

从官网下载JDK:Java Downloads | Oracle 中国

X86 是 32位电脑使用X64 是 64位电脑使用这里选择jdk-8u341-windows- x64.exe。下载后双击进行安装,一步步选择默认项即可。然后是配置环境变量。通常步骤为:鼠标右键单击我的电脑,选择“属性”,单击“高级系统设置”→“环境变量”,在弹出的环境变量窗口进行配置。新建系统变量:变量名为JAVA_HOME,变量值为JDK的安装目录。修改系统变量:变量名为path,添加变量值为%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin。最后在cmd命令行中,输入java -version,验证JDK是否安装成功,成功后的显示如图2-2所示。

2.安装JMeter

从官网下载JMeter的Binaries版本(可执行的版本),另外一个Source版本是源码,需要自己编译,需注意区别,别下载错误了。Apache JMeter - Download Apache JMeterJMeter官网下载界面如下图所示,下载apache-jmeter-. zip,然后解压缩,运行/bin目录下的jmeter.bat即可打开JMeter的图形化界面进行脚本的编写。

2.2 macOS环境

1. 安装JDK

安装步骤如下。(1)下载JDK8对应的安装包,macOS下需要下载jdk-8u341-macosx-x64.dmg,然后双击即可安装。Java Downloads | Oracle 中国

(2)一般默认JDK安装的真实主目录为/Library/Java/JavaVirtualMachines/jdk_251.jdk/ Contents/Home。(3)打开终端,进入当前用户的home目录下(执行cd命令即可进入)。(4)打开配置文件,并添加如下语句:

vi .bash_profile
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk_251.jdk/Contents/Home

(5)在终端输入java -version,验证JDK 8是否安装成功。正确显示Java版本号即为安装成功,如下:

MacBook-Pro:~hutong$ java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08,mixed mode)
2. 安装JMeter

同上面Windows的Jmeter安装,到官网下载Binaries下的apache-jmeter-.zip压缩包,解压后,打开/bin目录下的JMeter即可使用。

3 JMeter的常用核心组件

由于JMeter涉及的组件数目很多,据不完全统计至少有110个,而其实只需要掌握20%的组件就可以完成80%甚至更多的日常工作了,所以接下来我们重点剖析使用最频繁的核心组件,如下图所示。只需要优先掌握这10个左右的组件就能应付日常大部分的接口测试工作。

提示:(1)所有组件的添加都是通过鼠标右键单击上一层组件的方式选择的。(2)比较好用的功能是使用鼠标右键单击做启用(enable)或禁用(disable)的切换,对于不想测试的请求可以禁用,而不用删除处理。JMeter的常用核心组件最简化入门介绍由于各个组件功能比较多,我们本课程的目的是为了用JMeter实现接口测试,因此基于这个目标,给大家最简化的讲解Jmeter常用组件的功能:1.测试计划:测试起点,所有组件的容器

2.线程组:代表一定数量的用户

3.取样器:向服务器发送请求的最小单元

4.逻辑控制器:结合取样器实现一些复杂的逻辑

5.前置处理器:在请求之前的工作

6.后置处理器:在请求之后的工作

7.断言:判断请求是否成功

8.定时器:负责请求之间的延迟间隔。常用的有固定,高斯,随机

9.配置元件:配置信息

10.监听器:收集结果

执行顺序:测试计划-》线程组-》配置元件-》前置处理器-》定时器-》取样器(请求)-》后置处理器-》断言-》监听器

作用域:

必须组件:测试计划、线程组、取样器

辅助组件:剩余的

辅助组件作用于父组件,同级组件以及同级组件下的所有子组件

4 JMeter接口测试实战

4.1.新建线程

  • 线程数代表请求多少次
  • Ramp-up period(in seconds)表示设置的线程数在多少秒内启动完毕,即如果线程数设置为5,而此项也设置为5,那么会每隔5/5=1(s)启动一个线程。
  • 循环次数,Loop Count表示设置的线程数循环的次数,如果选择Infinite(永远)选项,则会一直循环(注意,如果选择了Infinite且调度器配置中设置了持续时间,则会在持续时间到达之后结束循环)。

4.2. 配置元件

HTTP请求默认值(HTTP Request Defaults)

一般用作全局的配置,即有多个请求的时候,如果IP地址和端口都是一样的,那么在添加该组件后填写IP地址和端口,后续的HTTP请求就不用填写IP地址和端口了,统一管理即可

用户定义的变量

全局变量

4.3. 取样器

JMeter原生支持不同类型的取样器,如HTTP请求(HTTP Request)、FTP请求(FTP Request)、TCP请求(TCP Request)、JDBC请求(JDBC Request)等。不同类型的取样器可以通过设置参数向服务器发出不同类型的请求。取样器是用来模拟用户操作的,它可以向服务器发送请求以及接收服务器的响应数据。这里只详细讲解最常用的HTTP请求

HTTP请求

该取样器用于模拟各类的HTTP各种方法的请求,常见的有GET、POST。HTTP请求取样器主要有2个标签页,Basic页面中是一些常用的功能,在Advanced页面中可以进行高级应用测试,这里重点讲下接口自动化中常用的Basic页面Basic页面。其中,各输入框含义如下:

  • 名称:取样器名称,建议写成请求接口的地址,例如/login。这样在有多个取样器的时候,在左侧列表中就可以看到该取样器是针对哪个接口的。
  • 协议:默认为HTTP协议,还可以写HTTPS,根据实际情况来定。
  • Method:接口请求方式(GET、POST、PUT等)。
  • Path: 接口请求地址。
  • 内容编码:一般配置为UTF-8。
  • 参数:当请求中需要参数时,选择参数(Parameters)后单击下方的Add按钮添加一个键值对输入栏,输入相应的键和值(也就是Name和Value),如果参数值存在中文,则需要选择URL Encode(编码)。
  • 消息体数据(Body Data):指的是实体数据,就是请求报文里面的主体实体的内容,一般我们向服务器发送请求,可以将携带的主体实体参数写入这里,常见的格式为JSON格式。
  • Files Upload:从HTML文件获取所有内含的资源。此项被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML文件进行解析,并获取HTML中包含的所有资源。
  • Redirect Automatically:自动重定向。将基础的HTTP请求设置为自动重定向,选择此选项后JMeter将无法观察到整个重定向过程中的所有请求,只能观察到重定向后的最终结果。选择此选项表示,当发送HTTP请求后,若响应为301或302,JMeter会自动重定向到对应的新页面,但不会记录重定向的请求和响应内容。此选项应用于GET和HEAD请求,不能应用于POST或PUT请求。
  • Follow Redirect:跟随重定向。仅当未启用“自动重定向”时,此选项才有效。与自动重定向不同的是,设置了跟随重定向,JMeter将可以观察到整个重定向过程中的所有请求,无论重定向进行了多少次。
  • Use KeepAlive:设置Connection:keep-alive头信息。当该选项被选择时,JMeter和目标服务器之间使用KeepAlive方式进行HTTP通信,默认选择此选项。在默认HTTP实现下它不起作用,因为连接重用不在用户控制之下。但在Apache HttpComponents HttpClient下它是起作用的。
  • Use multipart/from-data:使用multipart/from-data或application/x-www-form-urlencoded方法发送HTTP。此选项应用于POST请求,默认不选。
  • Browser-compatible headers:与浏览器兼容的头。使用multipart/form-data时,设置的Content- Type和Content-Transfer-Encoding消息头将无效,仅发送Content-Disposition消息头。
  • URL Encode:URL编码。HTTP请求中选择此选项,应用于两种场景。一种是传递的参数中含有特殊字符,如=,?,空格,&。例如,有个参数是aa=bb=cc,这到底是表达“aa”=“bb=cc”,还是“aa=bb”=“cc”呢?服务器会误解。选择URL Encode选项后,表达式被编码成aa=bb%xxcc,其中一个“=”被转换,这样就不会误解了。另一种是中文,对应到Java中的方法是urlencoding。

提示:常见的重定向有下面两种。• 301 Moved Permanently:永久性重定向,表示请求的资源已经永久性分配了新的URI,以后应该使用新的URI,浏览器会重新请求一次该URI。• 302 Found:临时重定向,表示希望用户本次使用新分配的URI。和301非常类似,浏览器也会重新进行请求。在实际开发中该重定向常用于页面跳转。

HTTP消息头管理器(HTTP Header Manager)

我们在通过JMeter向服务器发送HTTP请求(GET或者POST)的时候,往往后端需要一些验证信息,例如Web服务器需要给后端服务器验证cookie/token之类的信息,一般就是将这些信息放在消息头中。因此对于此类请求,在JMeter中我们可以通过在添加HTTP请求之前,添加一个HTTP消息头管理器,把请求头中的数据以键值对的形式放到HTTP消息头管理器中,如下图所示。这样在向后端发送请求的时候就可以模拟Web携带消息头信息了。注意(1)JMeter支持添加多个消息头管理器。此时多个消息头条目合并成一个消息头列表,跟随HTTP请求一并提交到服务器端。经过实测,当有多个消息头管理器,且不同的管理器内有名称相同的消息头条目存在时,顺序靠前的管理器的消息头条目会覆盖后面的。

(2)Web程序中用来跟踪用户的整个会话的常用技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。JMeter中有cookie manager和cache manager,如果需要模拟客户端的无缓存场景,需要添加组件并选择“每次反复清除Cookies”选项和clear cache each iteration选项。

4.4 登陆接口实战:

一般通过接口文档获取接口信息,如果没有,可以尝试通过浏览器抓包可获取接口信息(路径要做修改)

用户名和密码读取全局变量里的变量${USERNAME}${PASSWD}

4.5 后置处理器

后置处理器用于对取样器发出请求后得到的服务器响应进行处理,例如提取响应中的特定数据。JMeter 的后置处理器有 12 个,这里重点讲解正则表达式提取器(Regular Expression Extractor)和 JSON提取器。

1 正则表达式提取器

在测试过程中,许多接口的入参不是事先预知的,而是前一个接口的响应结果的某个字段(接口之间的依赖关系)。这就需要用户能够动态地提取前一个接口的响应参数并进行传递,这时候就用到了正则表达式提取器

正则表达式提取器的各配置项使用说明如下。

  • Name:名称。我们可以写成名称+注释,方便识别目的。
  • Name of created variable:引用名称。其他地方引用提取值的变量名称。
  • Regular Expression:正则表达式。它是描述字符串排列的一套规则,用于将需要的数据提取出来(字符串的匹配)。
  • Template:模板。它表示使用提取到的第几个值。如果前面的正则表达式提取了不止一个参数(多个括号括起来),那么这里需要指定参数的组别,格式为$n$ ,可以是$1$、$2$等,表示解析到的第几个值给引用名称变量。正则表达式的提取模式,值是从1开始的,值为0则对应的是整个匹配的表达式。
  • Match No.(0 for Random):匹配数字(0代表随机)。0代表随机取值,-1代表全部取值,其余正整数代表在已提取的内容中,匹配第几个的内容。
  • Default Value:默认值。如果正则表达式没有查找到值,则使用此默认值。

常用正则表达式字符含义如下表所示:

接口自动化常用匹配正则*和*?是不一样的,用于正则<title>(.*?)</title>(懒惰模式)或者正则<title>(.*)</title>(贪婪模式)。

  • 懒惰模式:也就是非贪婪模式,采用的是就近匹配原则,一旦找到匹配的结尾字符,就停止搜索。
  • 贪婪模式:找到一个匹配的结尾字符后,不会停止,会接着搜索下一个,直到搜索到文本的结尾才会停止。

正则表达式:登陆接口实战

接口请求和参数信息可参考接口文档如上图,将token接口请求和参数信息可参考接口文档**n的值从响应报文中提取并赋值给变量名token

  • 引用名称:token,变量名称
  • 正则表达式:"token":"(.*?)"找到左侧为"token":" 右侧为" 的值,并赋给变量token
  • 模板:$1$,使用提取到的第一个值
  • 匹配数字:0,随机取值
2 JSON提取器与JsonPath语法

一般来说,通常提取数据我们使用的都是(正则表达式提取),无论任何格式的数据都能提取,属于万能提取器,但一般用作于取值单一数据,就是取值某一个键值对的数据,当然也可以提取多个,但表达式比较繁多复杂JSON提取器用作于返回格式为json格式的数据,语法简单简洁,适用于取值多个键值对数据。

  • Name of created variables:创建的变量名称,用户自定义,用于储存值,可以多个,用分号(;)进行分隔。
  • JSON Path expressions:json path表达式,用户匹配数据,可以填写多个,要求与变量名数量一致,用分号(;)进行分隔。
  • Match NO.(0 fon Random):为空的默认值是0,(0代表随机、-1代表所有、其它则从1开始,1则代表取值第1个,2则代表取值第2个,类推。。。)
  • Compute conxatenation var (suffix_ALL):该选项如果勾选,则将所有的值用逗号拼接,并保存到一个变量中。注意只有Match NO为 -1 时该功能打钩才有效果。
  • Defaylt Values:默认值,用户自定义,可以多个,注意当变量名为多个时,默认值也要求多个,否则无法接口不运行无法查看结果树。

Json path语法简介(后续课程再详细讲解):

  • $ 根节点,表示json整个对象。某种意义上来讲 $. 可以省略,但不建议省略,保证语法完整。
  • .点,表示用来连接父、子节点。格式:key.key
  • [] 下标运算符,根据索引获取元素,也可以用来连接父、子节点。格式key["key2"]一般来说,使用 [] 可以提取多个子节点作为一个子JSON对象。格式$["key","key2"]
  • ..递归匹配所有子元素,表示提取所有节点、子节点中符合条件的节点值。格式$..
    • 表示通配,提取所有。$.* 表示提取根节点之下的所有节点(儿子)$..* 表示提取根节点之下所有子节点(子子孙孙,不限于儿子)

4.6 监听器

查看结果树(View Results Tree)

查看结果树通常用来在调试脚本的时候观察请求和响应正确与否,包括请求头、请求内容、响应头和响应内容,界面如下图所示。在新版本的JMeter中,请求消息中的请求头和请求内容分开显示,响应消息也是一样,响应头和响应内容分开显示,这样更加清晰明了。

4.7 加入购物车接口实战

接口请求和参数信息可参考接口文档path中的“index.php?s=/api/cart/save&application=app&application_client_type=weixin&token=${token}”,token是从上一步登陆接口响应报文中使用正则表达式获取到的这里要添加一下HTTP信息头管理器

因为请求参数报文格式为json,jmeter没有自动转换的功能,需要通过HTTP信息头管理器来指定报文的格式:content-type:application/json

4.8 查询购物车接口实战

接口请求和参数信息可参考接口文档

这里我们应用Json Path提取器进行一次报文提取,提取查询购物车接口响应报文中的订单id(id),商品id(goods_id),库存(stock)

  • 变量定义:id;goods_id;stock
  • Json表达式:$.data.data[0].id;$.data.data[0].goods_id;$.data.data[0].stock
  • 匹配值:1;1;1
  • 默认值:1;1;1

4.9 新增地址接口实战

接口请求和参数信息可参考接口文档这里我们通过“参数”来填写接口请求参数信息

4.10 查看地址接口实战

接口请求和参数信息可参考接口文档

通过json提取器,获取addressidget接口不需要传递json参数,因此不需要HTTP信息头管理器

4.11 提交订单接口实战

接口请求和参数信息可参考接口文档通过json提取器,获取订单id:orderid注意添加HTTP信息头管理器

4.12 取消订单接口实战

接口请求和参数信息可参考接口文档注意添加HTTP信息头管理器

4.13 断言

断言是自动化验证取样器请求,或对应的响应数据是否返回了期望的结果时必不可少的手段。另外断言既可以针对响应进行,也可以针对请求进行,但大部分是对响应做断言。使用JMeter做接口测试,一般使用JSON断言组件即可

JSON断言

JSON断言界面参数说明:名称:节点的名称,显示在查看结果树中,自己根据实际情况定义。注释:对该节点进行注释。断言存在JSON路径:断言JSON元素的路径。附加断言值:如果要使断言具有某个值,把这个值勾选上。如果写了JSON元素的路径,要把这个值勾选上。匹配为正则表达式:如果要使用正则表示式,选中该复选框。预期值:JSON元素路径对应的值。反转断言:就是否的意思,即如果符合就失败在取消订单接口中,应用JSON断言

4.14 参数化

参数化,即将脚本中的某些输入使用参数来代替,在脚本执行时指定参数的取值范围和规则,使脚本修改更加灵活和请求模拟更加真实。例如,测试登录这个业务需要用到手机号,每次请求就要模拟不同的手机号进行登录,这时候手机号就需要参数化。通常JMeter使用最多的参数化方法有如下几种。

  • CSV Data Set Config:CSV数据控件,适用于参数取值范围较大的时候使用,该方法具有更大的灵活性
  • User Defined Variables:用户定义的变量,一般用于test plan中不需要随请求迭代的参数设置
  • User Variables:用户参数,适用于参数取值范围很小的时候使用;

前置准备:这里我们对登录的用户名密码进行参数化,将用户名密码写入txt文档,保存为.dat格式,编码类型选择UTF-8

因为配置元件——CSV Data Set Config对参数化的格式要求比较严格,用户名密码一一对应,之间用半角英文逗号隔开

然后将保存的.dat文件放入计算机的某个盘里

1 CSV数据控件

【文件名】:文件名,保存参数化数据的文件目录,可选择相对或者绝对路径(建议填写相对路径,避免脚本迁移时需要修改路径);【文件编码】:UTF-8,文件的编码格式,在保存时保存编码格式为UTF-8即可;【变量名称】(comma-delimited):对应参数文件每列的变量名,类似excel文件的文件头,起到标示作用,同时也是后续引用的标识符;【分隔符】:参数文件分隔符,用来在“Variable Names”中分隔参数,与参数文件中的分隔符保持一致即可;【是否允许带引号?】:默认false,选项选为“true”的时候对全角字符的处理出现乱码 ;后面这些配置是性能测试用的,比较难理解,接口自动化阶段不做解释,跳过【遇到文件结束符再次循环?】:是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入; △ Ture:为true时,当已读取完参数文件内的测试用例数据,还需继续获取用例数据时,此时会循环读取参数文件数据(即:读取文件到结尾时,再重头读取文件); △False:为false时,若已至文件末尾,则不再继续读取测试数据;通常在“线程组线程数* 线程组循环次数>参数文件行数”时,选用false(即:读取文件到结尾时,停止读取文件);【遇到文件结束符停止线程?】:当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义; △若为ture,则在读取到参数文件行末尾时,终止参数文件读取线程; △若为false,此时线程继续读取,但会请求错误,因此时读取的数据为EOF;【线程共享模式】:共享模式,即参数文件的作用域,有以下几种方式: △All threads:当前测试计划中的所有线程中的所有的线程都有效,默认; △Current thread group:当前线程组中的线程有效; △Current thread:当前线程有效;

2 用户定义的变量

这里上面4.2. 配置元件部分里已经讲过了,不做赘述

3 User Variables:用户参数

点击线程组添加前置处理器——User Variables(用户参数):

如上图所示,在该参数组中已经设置了两个参数,username和password分别有2组不同的取值,通过页面下方的按钮,可以增加删除参数的可能取值。PS:User Variables中设置的参数,如果勾选了“每次迭代更新一次”可以在test plan执行过程中发生变化

4.15 JDBC驱动及数据断言

1 数据库连接JDBC驱动下载

jmeter中如果要用sql语句查询数据库,就需要用到JDBC请求和JDBC Connection Configuration了。首先来了解下,JDBC是什么?英文全称为Java Data Base Connectivity,就是java数据库连接。商城项目用到的是mysql数据库,数据版本如下图,是5.7.40

打开MySQL_JDBC的下载网站:MySQL :: Download MySQL Connector/J (Archived Versions)选择操作系统:Platform Independent

文件后缀名为 .tar.gz 的是Linux/IOS的压缩包;后缀为 .zip 的是Windows下的压缩包,根据系统选择下载。Oracle提供了多个版本的jdbc驱动包,一个是5.x.xx,另一个是8.x.xx,这两个版本的区别是:①5.x.xx是给MySQL 5及以前版本提供的驱动包;而8.x.xx是给MySQL 6及以后版本提供的驱动包,但是也兼容MySQL 5。②5.x.xx的注册驱动语句是: com.mysql.jdbc.Driver ;8.x.xx的是: com.mysql.cj.jdbc.Driver 。③8.x.xx在数据库连接语句后要添加SSL安全套接层字符串,否则编译失败;而5.x.xx只是会警告,不会编译失败。解压之后,将mysql-connector-java-5.1.48-bin.jar放到apache-jmeter-XXX\lib\ext目录下。

2 配置数据库

(一) 增加JDBC配置项,测试计划-线程组-添加-配置原件-JDBC Connection Configuration

(二)配置连接数据库的信息需要配置的信息如下:Variable Name:对这个数据库连接的别名,在JDBC Request中也有一个叫做“Variable name”的变量名称,这两者的变量名称是需要一致的;Database URL: jdbc:mysql://服务器地址:3306/数据库名JDBC Driver class:数据库JDBC驱动类名,com.mysql.jdbc.Driverusername:数据库连接用户名password:数据库连接密码

电商项目数据库连接串,参考下图对应填写一下就行了主机(host,注意没有www):端口:3306用户名:密码:

拓展知识:其他配置说明,有空了解一下

  • Variable Name Bound to Pool:该值在整个测试计划中应该是唯一的,以便JDBC取样器区别不同的连接配置。测试人员可以在测试计划中添加多个JDBC连接配置,但是它们必须有不同的名字。另外多个JDBC请求(JDBC Request)可以引用同一个连接池。
  • Max Number of Connections:连接池最大允许连接数。默认设置为0,代表每个线程获得自己的连接池。如果使用共享连接池,将其设置成与线程数相同即可。
  • Max Wait (ms):超时时间。如果尝试连接的过程超过了这个时间,则抛出异常并停止连接。
  • Time Between Eviction Runs (ms):运行状态下,空闲对象回收线程休眠时间。如果设为负数,空闲对象回收线程将不会运行。
  • Auto Commit:自动提交开关。True代表开启,一般对UPDATE、INSERT、DELETE操作有效。
  • Transaction Isolation:事务隔离,一般使用默认即可。
  • Test While Idle;当连接空闲时是否进行测试。
  • Soft Min Evictable Idle Time(ms):连接可以在连接池中处于空闲状态的最短时间。超过这个时间的空闲连接才会被回收。
  • Validation Query;用于确定数据库是否仍在响应的简单查询。
  • Database URL:数据库URL格式,例如jdbc:mysql://localhost:3306/sys。

常用数据库和驱动的URL格式可以参考下表

(三) 添加JDBC请求配置测试计划-线程组-添加-取样器-JDBC Request,界面如下:

需要配置的信息如下:(1)Variable Name of Pool declared in JDBC Connection Configuration:数据库连接池的名字,需要与JDBC的Variable Name Bound to Pool中填写的名字保持一致。(2)Query Type测试一般就选Select StateMent表示执行的SQL语句是SELECT。(3)Query 此处填写具体的SQL语句。(4)Variable names,此处可以填写由用户自定义的变量名称,用来存储SELECT语句查询的结果。拓展知识:其他配置说明,了解一下(1)Query Type常用的选项如下。

  • Select StateMent表示执行的SQL语句是SELECT。
  • Update StateMent表示执行的SQL操作是增删改类的。关键字为UPDATE、INSERT、DELETE、CREATE和DROP等。
  • PrePared Select StateMent表示执行的SQL语句是SELECT,但是允许在SQL语句中通过“?”来实现传参(SQL层面的传参,不是JMeter传参)。PrePared Update StateMent类似于Update StateMent,表示执行的SQL操作是增删改类的。但是允许在SQL语句中通过“?”来实现传参(SQL层面的传参,不是JMeter传参)。(2)PrePared类型的专属选项如下。
  • Parameter values处填写的就是需要传递给带“?”的SQL的参数值。参数值的数量、顺序和SQL语句中的问号保持一致,参数值之间使用逗号分隔,如35,male。
  • Parameter types处填写的是参数的类型。参数类型数量、顺序和Parameter values保持一致,且要求大写,参数类型之间使用逗号分隔,如INTEGER,VARCHAR。(3)其他参数如下。
  • Query,此处填写具体的SQL语句。
  • Variable names,此处可以填写由用户自定义的变量名称,用来存储SELECT语句查询的结果。变量名称可以有多个,使用逗号分隔。变量是按照顺序去存储查询结果,一个变量存储一列值,即第N个变量存储结果中的第N列值。存储方式采用的是数组方式,下标是从1开始,即下标1表示当列的第一个值,下标N表示第N个值。并且每一个变量都会有一个隐藏的参数Vname_#=N,用来存储值的个数。
  • Result variable name表示创建一个对象变量,保存所有返回的结果。
  • Query timeout表示查询超时时间。
  • Handle ResultSet定义如何处理由callable statements语句返回的结果。

注意(1)在使用select进行数据库查询的时候,如果JDBC请求里面的SQL语句包含了中文,JMeter会识别不了,需要对它进行编码才可以查询成功,也就是在JDBC的连接中增加useUnicode=true&characterEncoding=utf8。(2)如果出现类似Response message:java.sql.SQLException:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'的错误,下载MySQL JDBC驱动包导入/lib/ext目录下即可。另外,驱动包的版本一定要与使用的数据库的版本匹配,驱动版本低于MySQL版本有可能会导致连接失败报错。

3 运行测试计划

可以在查看结果树,查看数据库查询的结果,如下图

4 数据断言

本例对比取消的订单,在数据库中状态是否是已取消需要在JDBC Request下添加“调试后置处理程序”:后置处理器>Debug PostProcessor这个在结果树里可以看到测试计划执行过程中所有传递的变量值,方便找到对应的变量取值

从下图可以看到,在JDBC request中设置的变量名为:orderStatus,执行过程中,变量名变成了orderStatus_1

然后在JDBC Rquest下添加BeanShell断言:添加>断言>BeanShell断言断言需要编写java代码,样例如下,注意,变量名为orderStatus_1

if (${orderStatus_1}==5){
    Failure=false;//表示断言成功
    }
else{
    Failure=true;//断言失败
    FailureMessage="断言失败";
    }

使用navicate工具可以查看订单状态:(0待确认, 1已确认/待支付, 2已支付/待发货, 3已发货/待收货, 4已完成, 5已取消, 6已关闭)

加微信(备注CSDN扶摇)即可免费领取下面的自动化测试资料和一份软件测试面试宝典

本文标签: 实战入门接口JMeter