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.函数助手

  b.用户定义的变量

  c.读取本地化文件进行参数化

线程组-》添加-〉配置元件-》CSV Data Set Config

在请求中,直接使用${key}代替对应的参数,即可实现参数化传参

  d.提取响应中序列化的json信息

  JMeter支持 正则表达式提取/json提取器提取 response返回的JSON格式数据

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

版权声明:本文为justyoutiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/justyoutiao/p/11354380.html