JMeter接口测试

JMeter实现Web接口测试,大体可以分为四个步骤

1.添加线程组
测试计划-》Threads(Users)-》线程组
 
线程组页面,主要有三个参数需要设置
 
##使用补充:
  1.1 当线程组内的HTTP请求是发向同一个服务器时,可以在线程组内添加配置元件-【HTTP请求默认值】,后续就不需要在每个HTTP请求中都维护服务器这一项信息,如:
 

  1.2 当线程组内HTTP请求存在API有某些访问权限的设置,或是需要保留某些状态,也就是需要让服务器知道每次访问的用户是谁,于是在发送请求的时候需要带上Cookie。我们可以利用JMeter的配置元件-【HTTP Cookie 管理器】,管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie,同时,也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求,所以在线程组内添加一个HTTP Cookie 管理器,后续管许Cookie的问题就可以一劳永逸了,如:

 

2.添加HTTP请求
线程组-》添加-》Sampler-》HTTP请求
 
2.1 HTTP请求设置说明:

a.名称/注释,建议维护成一眼就可以看出请求意图的相关信息

b.Web服务器:

  协议,向目标服务器发送请求时的协议,http/https,不区分大小写,默认http

  服务器名称或IP,服务器名称或IP地址

  端口号,目标服务器的端口号,默认80,可不填

c.HTTP请求:

  方法,是指这个接口的Request Method,JMeter发送Http请求支持很多方法,如:GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

  路径,URL地址,不包含服务器地址和端口
  Content encoding ,内容的编码方式,默认值为iso8859;注意Content encoding并不能影响返回结果,当出现乱码的情况,一般是Content encoding没有设置,常用UTF-8

  自动重定向, 如果选中该选项,当发送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

3.添加响应断言
HTTP请求-〉添加-》断言-〉响应断言
  断言很好的解决了人眼对比对接口返回的数据问题。
  Jmeter提供了丰富的断言功能,可以用于检查响应数据与预期是否一致,可以用作接口自动化测试的结果校验。对于一次请求,如果通过的话,断言结果中只会打印一行请求的名称;如果失败,则除了请求的名称外,还会有一行失败的原因(不同类型的断言,结果不同),也可以帮助我们定位返回值错误的内容。此外,一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。
  常用的断言方式有:
a.响应断言-响应文本,检查校验响应中的文本(关键词)
b.不仅仅用响应断言来匹配预期结果 。 其实用另外接口的响应 也可以判断上一个接口的逻辑是否正确
c. 使用JDBC Request进行数据库操作,校验SQL执行结果跟响应返回数据是否一致,判断结果是否正确,返回结果包含一个或几个断言字段,那么就能断言测试通过了
 
3.1 实践使用记录:
  a. 响应断言-响应文本,当模式匹配规则选择的是-包括&响应文本包含中文时,响应文本就必须是纯文本,不可以有其他的东西
 
 
4.添加监听器
线程组-》添加-〉监听器-》察看结果树
启动测试,就可以在结果树中,看见本线程all请求的结果了。
 
##感受体会##
  1.接口测试本质上还是数据的表演【数据】
  2.JMeter接口测试过程大致划分为:线程组-》HTTP请求-》断言-》结果分析,难点应该在http请求参数的添加,还有断言的选择,即如何传入参数,以及如何根据响应来判断结果的正确性,即实际结果与预期结果的比对

转载于:https://www.cnblogs.com/justyoutiao/p/11354380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值