JMeter接口测试
JMeter实现Web接口测试,大体可以分为四个步骤
1.2 当线程组内HTTP请求存在API有某些访问权限的设置,或是需要保留某些状态,也就是需要让服务器知道每次访问的用户是谁,于是在发送请求的时候需要带上Cookie。我们可以利用JMeter的配置元件-【HTTP Cookie 管理器】,管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie,同时,也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求,所以在线程组内添加一个HTTP Cookie 管理器,后续管许Cookie的问题就可以一劳永逸了,如:
a.名称/注释,建议维护成一眼就可以看出请求意图的相关信息
b.Web服务器:
协议,向目标服务器发送请求时的协议,http/https,不区分大小写,默认http
服务器名称或IP,服务器名称或IP地址
端口号,目标服务器的端口号,默认80,可不填
c.HTTP请求:
方法,是指这个接口的Request Method,JMeter发送Http请求支持很多方法,如:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
自动重定向, 如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 会自动重定向到新的页面,但是Jmeter是不记录重定向的过程内容。只能用于get和head方法,如果是post或者put请求则取样器不会发送。
跟随重定向, 默认选中,当响应code是3xx时,自动跳转到目标地址。与自动重定向不同,Jmeter会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,如有多个跳转则多个请求都会被记录下来,此为默认选项。 自动重定向和跟随重定向的区别只在于是否记录多个跳转的请求上
Use keep Alive,当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
Use multipart/from-data for POST,当发送HTTP POST 请求时,使用Use multipart/from-data方法或者application/x-www-form-urlencoded方法发送,默认不选中。 当入参数需要上传文件的时候,需要勾选。
Browser-compatible headers,当勾选multipart/form-data时,勾选此项会截掉http请求头中的Content-Type和Content-Transfer-Encoding,而只发送Content-Disposition部分。
d.同请求一起发送参数:
同请求一起发送参数,JMeter提供了三种方式,Parameters、Body Data以及Files Upload,具体使用哪一个,主要取决于在HTTP信息头管理器中Content-Type设置的什么类型,详情可以参考另一随笔,https://www.cnblogs.com/justyoutiao/p/11385964.html
##这里强调一下两个问题:
A. 实践过程中遇到的一个问题,依据HTTP信息头管理器中设置的Content-Type类型在表格中传入Parameters格式的参数,返回响应某个Parameter....is not present,实际查看log发现并未传参,仿效postman,将参数添加到路径中,然后发送请求,发现传参成功,正常响应。于是get了一种新的传参格式——将参数添加到请求的路径中(询问开发大佬是因为每个接口实现者方式不同,具体不是特别懂啦~)
B. 上传文件传参,实现模式往往是异步的,一个线程下来可能实际结果还没有出来~。当发现实际响应码正确,但是实际结果与预期不符合的时候,可以在发送对应请求前,sleep一段时间。实现方式就是在该请求下,添加一个固定定时器,这样JMeter在发送该请求前,会先等待定时器设置的时间。
Advanced(加强版设置)略过不说
2.2 参数化传参
一般来说,我们测试过程中不一定能保证数据的稳定或需要构造多个不同的参数进行处理 ,很多时候需要考虑做参数化的处理,一定程度上实现动态构造。简单说一下JMeter支持的四种参数化传参方式:
a.函数助手
调用形式:${__function() },如:
打开函数助手对话框,选择函数__Random(这个函数是随机函数,生成指定范围的随机数),用这个函数随机生成电话号码来举例
HTTP请求中,将函数助手中生成的函数字符串,当作参数的value输入表单
查看请求,验证函数传参成功
b.用户定义的变量
用户定义的变量,可以很好的参数化请求中重复出现且相同的变量,如服务器IP地址
线程组-》添加-》配置元件-》用户定义的变量
后续在HTTP请求表单中,用${URL}当作参数的value输入就可以实现该变量的参数化了
c.读取本地化文件进行参数化
线程组-》添加-〉配置元件-》CSV Data Set Config
在请求中,直接使用${key}代替对应的参数,即可实现参数化传参
d.提取响应中序列化的json信息
JMeter支持 正则表达式提取/json提取器提取 response返回的JSON格式数据
e.利用JDBC Request查询到的数据传参
主要可以分为两步:
(1)设置JDBC连接池(JDBC Connection Configuration)
设置连接池前,需要确认/apache-jmeter-3.2/lib目录下面有无数据库驱动jar包,用mysql举例,本地有jar包,则不需要额外添加,如
当本地没有对应数据库的jar包时,需要自己找资源下载(网上资源很多,这里略过),注意jar包跟JMeter版本的关系,下载好的jar可以直接拖到/lib路径下面,也可以在测试计划里面添加,见图:
jar包添加好,添加一个JDBC Connection Configuration(配置元件),完成对应的设置
database url: jdbc:mysql://数据库服务器地址:端口号/数据库名,在测试过程中遇到过因为编码问题,查询条件中的中文字符串不生效导致断言结果错误,所以需要添加编码方式,设置的与数据库本身的编码方式相同即可,我使用的是UTF-8 ,如:jdbc:mysql://host:3306/name?useUnicode=true&characterEncoding=utf8
JDBC Driver class:直接使用 com.mysql.jdbc.Driver
(2)添加JDBC Request (Sampler)
我们可以再添加一个Debug Sampler(调试工具) ,查看返回的各列数据的行数
在HTTP请求中,我们可以使用JDBC Request的返回结果 作为参数的value值传参了,如:C_1=13042390209
在请求中确认传参是否是:phoneNumber =C_1