JMETER 接口自动化测试案例
接口测试是测试系统组件间接口的一种测试,主要用于测试系统与外部其它系统间的接口,以及系统内部各个子模块之间的接口。测试的重点是要检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况容错处理的完整性和合理性。传统的接口测试方法为:构造发送报文--报文发送--获得返回报文--检查返回报文的正确性(通过查询数据库或者数据文件计算对比)。传统的接口测试方法效率低,并且不可重复执行,不适合当前软件系统快速开发迭代的趋势。接口的自动化测试成本低收益高,使用一些开源工具或一些轻量级的方法,在测试用例开发成本不高的情况下能取得较好的测试效果。开源测试工具Jmeter可以承担接口请求、结果解析和断言的工作,可以作为轻量级接口自动化的实现手段。
JMeter 测试工具中,可以通过参数化设置输入变量,通过文件或者数据库的形式存储测试案例的输入接口数据,获得接口返回数据后,通过查询数据库(根据实际案例,对验证的数据项进行适当的逻辑加工),数据库返回的数据和接口返回的数据进行对比,如果数据一致认为接口功能正确,否则不通过。接口自动化的测试流程如下:访问接口-获取返回值-解析回参-构造SQL-查询-判断结果。
本文以一个简单的客户手机号查询接口为例(以简化的方式说明实现的原理),来详细说明JMeter自动化接口测试的过程。
本例中发送报文格式为:
{
"data" : {
"CustNO" :"${CustNo}" //客户号
}
}
|
返回报文格式为
{
"data": {
"CUST": {
"CUST_NO": "16101000000694680001", //客户号
"MOB": "694680001" //手机号
},
"extension": {
"retType": "N" //返回类型,“N”成功,“E”失败
}
}
}
|
代码处理逻辑:在文件中保存待测功能的客户号作为输入参数,向服务器端发送报文,通过JSON后置处理器解析出该客户的手机号码,从Cust_Mob表中直接查询到该客户的手机号,数据库返回值与服务器返回的报文中手机号进行对比,比对一致认为该交易正确,对应表结构如下:
测试的思路为,按照实现的业务逻辑,用手机号作为断言字段,并构造SQL进行查询,如果查询到对应数据,则证明接口返回通过。具体构造的SQL如下:
SELECT
Mob
FROM
Cust_Mob
WHERE
CustNO= ‘$CustNo’
|
按照接口数据参数化-发送接口报文-获取返回报文-解析回参-构造SQL-查询-判断结果,具体操作过程如下:
一、设置参数数据集
一般来说,我们测试过程中不一定能保证数据的稳定或需要构造多个不同的参数进行处理 ,很多时候需要考虑做参数化的处理,一定程度上实现动态构造。Jmeter中提供了通过读取本地文件进行参数化的功能:读取配置文件中的参数。
在线程组下新增配置元件-CSV DATA SET CONFIG:并按照如下配置参数
二、增加Http请求
在测试计划下新增一个线程组,并在线程组下新增一个http请求,并按照如下红线设置参数:
一般来说,接口在访问的时候都需要在验证Header中的身份信息,Jmeter中提供了头信息管理的功能:添加-配置元件-Http请求头管理器:
添加-断言-响应断言,响应文本中包括关键的参数即可:
使用结果树查看接口返回值:添加-监听器-查看结果树,可以明确看到接口的返回报文。
三、采用后置JsonExtrator获取返回报文参数
通常来说,现在大部分的接口返回值都序列化处理成为Json格式进行返回。虽然使用正则获取返回值也可以,但是Jmeter提供了一个更加方便的插件:JSON Extractor处理Json。
我们以处理以下Json中的MOB为例,来获得对应的值:
{
"data": {
"CUST": {
"CUST_NO": "16101000000694680001", //客户号
"MOB": "694680001" //手机号
},
"extension": {
"retType": "N" //返回类型,“N”成功,“E”失败
}
}
}
|
注意到MOB在Json数组中,所以Json路径为data[0].CUST[0].MOB,需要添加Json数组中的索引值 。我们在Json?Path?Expreeions填入 .data[0].CUST[0].MOB,这样我们就取出了MOB的值;在后续之后,我们就可以通过{MOB}的方式调用取出的值。
四、配置数据库连接,访问数据库,获得相应数据
1、在测试计划下添加,导入对应的JDBC驱动包:
2.添加-配置元件,JDBC Connection Configuration
3.使用JDBC?Request进行数据库操作:添加-Sampler-JDBC?Request
JDBC的操作比较简单,我们只需要通过参数名调用设置的JDBC?Connection?Configuration,然后输入要执行的SQL即可:
五、使用断言验证数据一致性
Jmeter提供了丰富的断言功能,可以用于检查响应数据与预期是否一致,可以用作接口自动化测试的结果校验。JDBC Request的返回值中是一定有我们的传入的参数的,我们就可以直接使用基本的文本工具来进行断言的验证,返回结果包含一个或几个断言字段,那么就能断言测试通过了:
添加-断言-响应断言,响应文本中包括关键的参数即可:
六、总结
本文讨论了接口自动化测试的一般流程,并通过一个例子详细描述Jmeter自动化测试工具进行实现,对流程中用到的各Jmeter组件配置进行详细的配置说明。该自动化测试流程很好的满足了自动化测试的如下几个原则1、自验证原则:测试必须能够自动化完成,而非交互式的,使用断言验证测试结果而不是打印执行结果后人工核对,以便持续集成时自动化完成测试验证;2、独立性原则:测试方法必须可以独立完成,测试方法之间不应该相互依赖且不应限制执行的先后次序;3、可回归原则:测试必须产生可重复、一致的结果,以便于自动化的定期执行4、环境无影响原则:测试后不应改变测试机器状态,应回复到测试以前的环境(包括临时文件、目录、数据库等,需要删除或者回滚);5、数据自维护原则:使用数据库的测试,不应对使用到的数据做任何存在性假设,应在测试前准备必要的数据,在测试后回滚修改。
评论已关闭!