软件接口测试工具Jmeter使用核心详解

Posted 憨憨说测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件接口测试工具Jmeter使用核心详解相关的知识,希望对你有一定的参考价值。

用Jmeter做接口测试只需要掌握几个核心功能就可以了。

并不一定要把它所有的功能都掌握,先掌握核心功能入行,然后再根据工作需要和职业规划来学习更多的内容。这篇文章在前面接口测试框架(测试计划—>线程组—>请求—>查看结果树)的前提下,来介绍必须要掌握的几个核心功能,力求用最短的时间取得最大的成果。

在前面的文章中我提到,用Jmeter做接口测试的核心是单接口测试的参数化和关联接口测试的参数传递,这两个点将会是这篇文章介绍的重点。此外,由于测试过程中会涉及到数据库的连接和对执行结果的查看,所以有关于利用Jmeter连接数据库和断言也会做必要的介绍。

一、Jmeter核心功能之参数化

所谓参数化,其实就和python里面的函数一样,把框架模型搭建好,然后把不一样的数据用变量来替代,最后把成批量的数据依次传入变量进行测试,并反馈结果。参数化主要用于批量执行请求的场景下,比如要新增50条数据,依靠人手工一次次执行太慢了,而执行的流程和框架又是统一的,只是数据不一样而已。在这种情况下,就可以使用参数化来提高效率了。

在Jmeter中,可以实现参数化需求的方法有四种,但是最常用的两种是CSV和函数。这篇文章里我们将只介绍CSV。所谓CSV,其实就是Jmeter中的一个组件,是用来实现参数化的,具体怎么用我们下面再说。

还是以新增50条数据为例吧,执行的思路是怎样的呢?还记得我们在前面文章里介绍的接口测试框架吗?测试计划—>线程组—>请求—>查看结果树。

在实现这个需求的时候,还是要按照这样的框架来执行的,只不过需要在线程组下,添加一个CSV组件。其全称是CSV Data Set Config,配置路径是 线程组—>配置元件—>CSV Data Set Config。根据接口清单,查看是否需要设置content-type、charset等决定是否需要使用http信息头管理器。


如上图所示,在设置好CSV组件以后,就可以看到这样的界面了。上面红框就是名称和注释,没有什么好介绍的。重点是下面的红框,有比较多的注意事项。

从文件名来说,这里就是把已经准备好的存放50条数据的txt文件导入进来。这里有一个问题:文件首行是不是要有字段名呢?有也可以,没有也可以。我的建议是文件里不要设置字段名,响应地,在下面红框里的忽略首行里选择false。文件编码的话就是导入的文件是采用什么格式编码的,一般选择utf-8。那么如何txt文件不是utf-8怎么办呢?

如果编码不对,可能会出现乱码的情况。所以还是要确保编码方式对得上,如果txt文件不是utf-8编码的话,可以使用notepad++来将该文件的编码方式改成utf-8。这里记得要保存。

接下来是变量名称,即,在这里设置文档中的字段,后续在引用这里的变量的时候会用到变量名称。所以最好不要乱搞,并且要注意使用英文状态输入法下的逗号来分隔。忽略首行的选项,前面也说过了,保持默认值即可。

分隔符是要根据txt文件里来设置的,如果txt文件里同一条数据的不同字段是用逗号分隔的,那这里也填逗号即可。注意符合的中英文输入法。后面的设置保持默认设置即可。记得在往txt文档里填数据的时候别给数据加引号就成。

等等,怎么净是在说csv怎么设置,可是到底要怎么用,怎么进行参数化呢?别急,接下来就来介绍怎么进行参数化的内容。你还记得上面提到的变量名称吗?这里的变量名称与txt文件里的N条数据的每一条的每一个字段一一对应,那么也就意味着,只需要调用这里的变量名称,并且设置线程组里的循环次数就ok了。

循环次数设置是很简单的呀,只需要把数字改一下就可以了。那么怎么引用变量名称呢?引用的规则是什么呢?

在Jmeter中,引用参数化的格式是 参 数 名 , 比 如 说 参数名,比如说 apart_id,即,一个美元符号加一个大括号,然后在大括号里引用设置好的参数名即可。

比如说,在接口清单中规定,请求体中传入的数据格式是json格式,并且给了一个示例,如下图所示:

那么我们就知道应该怎么引用变量了,将上图的代码粘贴到body中,其他的方法之类根据接口清单填写,然后将需要设置的T01、test学员等几个数值分别用在csv中设置好的变量来替代就行了。替代的格式是美元符号加大括号,然后在大括号里填写设置好的变量。注意外部的双引号不要省略,这是和python不同的一点。

变量放进去以后,参数化就完成了。其实在正常的操作过程中,这个顺序是反过来的。一般是先搭建测试框架,即前述介绍的最后一步,然后设计测试用例并存储到txt文档中,然后根据测试框架里面需要的参数来设置CSV。即,整个过程到了个个,不过不管顺序是怎么样的,只要能够完成需求,实现测试任务就ok。

二、Jmeter核心功能之参数传递(关联)

所谓参数传递(关联),其实就是说如果有多个接口的话,如何让上一个接口中获得的变量值自动传递到下一个接口中去。实现的思路其实也是设置变量,给变量赋值,引用变量的这么一个过程。明白了思路,具体怎么操作呢?

我们如果将一个请求看做一个任务的话,任务前需要做一定的准备工作,任务后也需要做一定的善后工作。对应到参数传递这块,就是需要我们做一点善后工作,即,将任务完成后获得的值拿出来再给另外一个任务。在Jmeter里,做善后工作的组件都集中在后置处理器中,如下图所示:


我们常用的两个是xpath提取器和正则表达式提取器。下面我们来详细说说怎么使用,先为当前的请求添加一个xpath提取器吧。

一些基本的东西就不说了,第一个红框记得勾选,它代表当前处理的是html或者xml格式的数据。然后第二个红框里是需要说明一下的。所谓引用名称其实就是命名变量,和参数化过程中的变量名称是一个道理,xpath query则是基于xpath的提取表达式了。

有关于xpath的语法这里做一个简单的介绍,主要是/、//、[]、@这么几个,百度一下xpath语法然后搞清楚就可以了。使用xpath的场景为xml或者html格式的数据。匹配数字这一栏,-1代表全部,0代表随机,1代表匹配第一个,2代表匹配第二个,3代表匹配第三个,以此类推……

发现了吗?到这里变量已经被命名,并且命名的值也会由xpath提取表达式赋予,只要引用就可以了。引用的方法和参数化过程中的引用方法是一样的,即美元符号,大括号,然后大括号里面填上引用的变量名即可。

怎么样,是不是感觉超级简单呢?其实Jmeter这个软件,看着庞大,但是等自己真正了解了要执行过程的逻辑以后,操作是很简单的。

介绍完了xpath提取器来实现参数传递,我们就知道,正则表达式提取器来实现参数传递的过程也是差不多的。命名变量,通过正则表达式提取值并赋予变量,然后在需要引用的时候引用。用同样的方法为当前请求添加一个正则表达式提取器,得到的界面如下图所示:

其他的东西都类似,就不介绍了,重点还是红框里的几个选项。可以看到,红框里引用名称、正则表达式、匹配数字、缺省值等和xpath里面的都差不多,所以我们这里只重点介绍一下正则表达式和模板。

正则表达式主要是用到+、.、*、?这四个符号。其中?代表右侧匹配到第一个结果为止,不加?号右侧匹配至符合条件的最后一个结果。其中+号代表匹配一次或者多次。然后在要正则表达式里要提取的内容两侧加小括号。公式的模板是这样的:前缀识别()后缀识别。至于说模板的话,采用的是 一 个 数 字 一个数字 ,比如说 1 1 1代表全部取值, 0 0 0代表随机取值。

看下来是不是感觉很简单呢,就是在书写正则表达式和xpath表达式的时候麻烦一些,但那并不是Jmeter的问题,而是xpath和正则表达式的问题。稍微花点时间是可以搞定的。那么在什么情况下用xpath,在什么情况下用正则呢?

一般来说,对于提取页面内元素的属性值的话,可以考虑用xpath;对于提取其他内容的话,建议使用正则表达式。从上面的图片里可以看出,除了这两个提取器,还有很多提取器,其实使用的逻辑都是类似的,无非就是一些赋值变量的表达式不同罢了。如果需要用到的话,借鉴模仿一下就可以了。

到这里,Jmeter中最重要的单接口测试的参数化和关联接口测试的数据传递就介绍完了,你学会了吗?当然,这些都是比较基础的用法,重要的学会了内在的逻辑,其他的一通百通。接下来再来介绍一下数据库连接方法和断言。

三、Jmeter核心功能之直连数据库

之所以要介绍连接数据库,主要是有时候测试是需要和数据库里的数据进行比对的,所以还是要知道,要了解。当然,连接的操作也是很简单的,记住流程和几个注意点就行。

第一步:首先要加载一个数据库驱动。还记得我们在测试计划里提到的 添加目录或jar包到classpath 吗?就是要在这里用的。

这个包是需要自己下载的,可以百度搜索JDBC驱动包,然后合适的包下载。下载以后通过上图中红框里的浏览功能添加即可。

第二步:添加JDBC连接配置。第一步只是加载了驱动,还需要连接,这里就要用到Jmeter的一个名叫JDBC Connection Configuration的组件了。如下图,基于测试计划,一步步选择添加。

添加完毕以后,可以看到这样的一个界面,这就说明需要设置了:

屏幕有限,这里没有截全图,下面有一部分省略了。我把参数的含义列举到这里,自行对照吧:

Variable Name:数据库池名称【JDBC请求时要引用】;

Database URL: jdbc:mysql:C:\\……(其中jdbc:这是通过jdbc驱动连接数据库的固定格式,一般公司都用的是mysql,所以这里也就用mysql,其他的数据库大差不差,到时候百度一下即可,然后mysql:后面跟的是数据库的地址。这里需要注意的是由于Jmeter是用java开发的,而在java中\\代表转义字符,所以路径里需要用双反斜杠)。

JDBC Driver class:根据自己所用的选择即可

Username:连接数据库用户名

Password:数据库密码

好,到这里就设置完了。设置正确的话,在执行过程中就可以连接到数据库了。接下来就是要写sql命令去对数据库进行查询了,怎么写呢?在哪里写呢?这就需要用到Jmeter中的另一个请求了,注意,是请求。在前面我们主要介绍的都是http请求,这里在介绍一个jdbc request请求,这是请求是和数据库一块来用的。

基于线程组添加JDBC Request,可以得到如下图所示的界面,仍旧是需要做一些设置的。

由上至下,红框1里填我们在connection组件里面添的那个变量名称。红框2里是做选择的,如果是select则选择select,如果是update、delete、insert则选择update。红框3里面是填写sql语句的,书写的方法基本和我们在nvaicat里面书写是一致的,放心大胆地写就行了。红框4里面的variable name是定义一个变量并且将从数据库里返回的值赋值给这个变量,有的参数化和关联的基础,这里应该很好理解了。

只是有时候,数据库里返回的值是很多个,那他们是怎么存储在一个变量里的呢?存储的格式是这样的:变量名_N ,N代表返回的第N个结果。在引用的时候直接引用变量名_N 即可。那么如果自己忘记了怎么办呢?其实还可以添加调试取样器来查看返回的结果。

到这里直连数据库的使用方法就介绍完了,接下来介绍一点有关于断言的知识。所谓断言,就是判断请求执行的结果是否和预期结果吻合的一种判断。

四、Jmeter核心功能之断言

说实话,我感觉Jmeter里面的断言功能要比postman里面的断言功能好用多了。Jmeter中常用的断言形式有响应断言(如返回的状态码是否为200、返回的文本里是否有XXX等)、大小断言(主要用于返回的数据的大小)、持续时间断言等等。断言组件有很多,如下图所示:

但其实常用的就那么几个,而且用法都很简单。这里就不介绍了,如果后面有时间,再来介绍吧。

到这里,Jmeter中基本的接口测试过程中要用的核心功能和组件就介绍完了。记得点赞收藏关注偶~

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

最后也为大家准备了一份配套的学习资源,你能在 公众号:豆子熊!免费获取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中资料包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

以上是关于软件接口测试工具Jmeter使用核心详解的主要内容,如果未能解决你的问题,请参考以下文章

核心工具JMeter 接口测试专题

jmeter的基本功能使用详解

软件测试之接口测试核心-URL&HTTP协议详解重磅来袭,转发收藏

接口测试断言详解(Jmeter)

接口测试参数化详解(Jmeter)

jmeter压测dubbo详解