01_Jmeter

转自:后知者 https://www.cnblogs.com/houzhizhe/p/6838731.html

前言:

1、Jmeter公共数据可参考:https://www.juhe.cn/ 。个人中心-数据中心-我的数据

2、“RESTful”标准

  1. 当用“GET”方式时,只用来获取数据,成功了返回http状态码200。数据提交方式,方式1: URL?键=值&键=值  即{键:值,键:值}
  2. 当用“POST”方式时,只用来创建数据,成功了返回http状态码201。多个数据提交方式:方式1: URL?键=值&键=值  即{键:值,键:值}     方式2:JSON格式 (可读性较好)。响应的内容指添加的记录 
  3. 当用“PUT”方式时,只用来修改数据,成功了返回http状态码203。多个数据提交方式:方式1: URL?键=值&键=值  即{键:值,键:值}     方式2:JSON格式 (可读性较好)。
  4. 当用“DELETE”方式时,只用来删除数据,成功了返回http状态码204。数据提交方式,方式1: URL?键=值&键=值  即{键:值,键:值}
  5. 当请求发送失败,返回http状态码400

本次直接使用Jmeter工具来完成对Http接口的测试。

一、开发接口测试案例的整体方案:

  • 第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
  • 第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
  • 第三步:和开发一起对接口测试案例进行评审。
  • 第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
  • 第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。

二、接口自动化适用场景:

 目前设计的自动化接口测试案例有两个运行场景:

  1. 测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。【开发本地运行的方式就是打开JMeter工具,导入JMX文件,开始执行可。】


  2. 回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。

三、接口测试环境准备

四、创建一个测试工程
1、打开Jmeter:下载好Jmeter后,双击bin目录下的jmeter.bat文件:

2、添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定“循环次数”。

3、添加“HTTP Cookie管理器”:线程组右键-配置原件-http cookie管理器。

HTTP cookie管理器作用:比如说某些接口需要先登录才能操作,那么这时就要先调用登录接口而且要用用HTTP cookie Manager来保持登录状态,否则后面的接口判断没有登录状态就无法调用。

4、添加“Http请求默认值”组件,线程组右键-配置原件-http 请求默认值,当被测系统有唯一的访问域名和端口时,这个组件很好用

5、在“HTTP 请求默认值”组件配置页面,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。

6、在“线程组”里右键-Sampler-添加“HTTP 请求”

7、在HTTP请求设置页面,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数列表:

  (根据前言,不同的请求方法,有不同的数据提交格式,后面 五 会讲)

   

 8、设置检查点:“HTTP 请求”上-右键-添加断言-“响应断言”。断言用于检查测试中得到的相应数据等是否符合预期 

添加并写入希望在响应结果中看到的内容;

 

9、http 请求下加入“后置处理器”­>“正则表达式提取器”:
引用名称即使用的参数名;填入正则表达式;模板选取匹配的组;匹配数字为匹配的个
数,负数表示全部匹配;缺省值为没有匹配到时的取值

10、线程组右键-添加监听器:方便查看运行后的结果  

 

 五、接口测试之添加测试内容

1. 普通的以key-value传参的get请求

e.g. 获取用户信息

添加http请求;填写服务器域名或IP;方法选GET;填写路径;添加参数;运行并查看结果。

 

 2. 以Json串传参的post请求

e.g. 获取用户余额

添加http请求;填写服务器域名或IP;方法选POST;填写路径;在参数区域选Body Data标签;写入Json串参数,注意Json格式;运行并查看结果。

 

 *注意:

Json传参时,往往参数相对复杂,规模较大,很多时候是Json串再嵌套Json串,在写入body的时候如果哪里格式不对会影响传参,而JMeter本身是不能对Json进行格式校验的(Postman可以进行简单的Json校验),我们可以借助这个网站来校验你的Json串的格式,www.bejson.com 再把确保格式正确的Json串填入body。

 

3.  请求时需要http权限验证

e.g. 修改用户余额

添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;

 

添加授权管理器,右击线程组->添加->配置元件->HTTP授权管理器;

 

打开HTTP授权管理器,在基础URL添加路径;填写用户名、密码(接口文档会给出);添加域即请求的服务器域名或IP;其他默认;

 

运行请求并查看结果。(该接口暂时有问题请求返回500,只要掌握需要权限验证的接口如何做就好)

 

4.  请求时需要添加请求标头

标头 (header):是服务器以HTTP协议传HTML资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔,一般存放cookie、token等校验信息。

服务器是先接受header中的校验信息如cookie,进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。

 

e.g. 获取用户信息2

添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;

 

添加HTTP信息头管理器,右击线程组->添加->配置元件->HTTP信息头管理器;

 

打开HTTP信息头管理器,参照接口文档填写好header信息;

 

运行请求并查看结果。

 

5.  请求时需要添加Cookie

e.g. 修改用户余额2

添加http请求;填写服务器域名或IP;方法选POST;填写路径;填写参数;

 

添加HTTP Cookie管理器,右击线程组->添加->配置元件->HTTP Cookie管理器;

 

打开Cookie管理器,参照接口文档填写好Cookie信息;

 

 发送请求并查看结果。

 

6.  请求通过某个接口上传文件

    e.g.上传文件

    添加http请求;填写服务器域名或IP;方法选POST;填写路径;在参数区域选Files Upload标签,添加文件全名(包含绝对路径,也可以点击浏览按钮添加),写入参数名;发送请求并查看结果。

 

 

 

JMeter的参数化

1. 指定参数值

这种方法常用来解决线程组中多个请求共用相同的数据,比如我们以上所有请求都有相同的IP地址,当地址改变时可以一改全改。

添加用户定义的变量,右击线程组->添加->配置元件->用户定义的变量;

 

打开用户定义的变量,添加变量,写好名称和值;

 

脚本中用到该值的所有地方都可以引用这个变量名了,引用变量的格式为 ${变量名};

 

2. 借助函数生成参数

测试过程中,有时候数据不适合被指定,可选择借助函数来生成,以下是最常用的几种。

  • ž     用函数生成随机数:(__Random)

在Jmeter中点击 选项->函数助手对话框;

 

在弹出的对话框中选__Random,填写随机数的范围,点击生成按钮,就看到你需要的字符串了;

 

尝试在请求中使用生成的随机数,把刚拷贝的字符串粘贴到请求的参数里;

 

发送请求,查看请求中参数值的情况,参数生效了。

 

 

  • ž    用函数生成当前时间:(__time)

 

 

  • ž    用函数生成通用的唯一识别码:(__UUID)

 

 

 

3. 文件传参

用于读取在文件中维护的参数,如参数文件内容如下;之间用英文半角逗号隔开,保存为.dat格式文件

 

注意,Jmeter读取文件总的参数是从第一行就开始了的,千万不要犯下面的错误。

 

在Jmeter中右击线程组->添加->配置元件->CSV Data Set Config;

 

打开设置窗口,写入参数文件的全名(含绝对路径),变量名,Delimiter就用默认的逗号,表示在准备参数文件时参数表的列之间用逗号隔开;

 

在请求中引用参数时应该是酱紫的:${username}  ${pwd},用它们来顶替对应的参数值。

 

4. 关联传参

在线程组内,当你想用一个请求的响应结果作为另一个请求的入参时就需要用到关联。

  • ž用正则表达式关联

思路是先从某个请求的响应数据中提取你需要的值,在把这个值在另一个请求中入参,操作如下:

在需要被提取响应数据的请求下添加正则表达式提取器,右击添加->后置处理器->正则表达式提取器;

 

在正则表达式提取器中填写 引用名称,不说也知道用途;正则表达式,最简单的办法是在响应数据中把要提取的目标值左右若干字符包含目标值的一行拷贝出来,粘贴到正则表达式框内,在把目标值用一对小括号替换,括号里用添上合适的匹配符本例如(.*); 注意在响应数据中拷贝时尽量避开需要转义的字符如果不能避开,请转义;模板通常固定填$1$;匹配数字1代表区匹配的第一个值;缺省值是在匹配失败时取得的值,通常用来检查匹配是否成功;

 

用${age}入参给另一个请求,查看结果传参成功。

 

 

 

  • ž用Json Path Extractor 插件关联

只针对Json格式的Response 取值,右击请求添加->后置处理器->JSON Path Extractor;

 

在JSON Path Extractor中填入引用名和JSONPath Expression;

 

在另一个请求中入参,也和上面的结果一样转参成功。

注意,JSON Path Extractor这个插件只能在Jmeter3.x以上的版本安装。

Jmeter添加断言检查结果

右击请求添加->断言->响应断言;

 

 

添加并写入希望在响应结果中看到的内容;

 

发送请求,查看结果;

 

 Jmeter操作Mysql

测试计划添加.jar包 mysql-connector-java-5.1.7-bin.jar用于使Jmeter可以读取Mysql;

 

 线程组添加 JDBC Connection Configuration (添加->配置元件-> JDBC Connection Configuration)用于配置Jmeter和Mysql的连接;

 

JDBC Driver class是固定的,Jmeter操作各类数据的Driver参考下图;

 

线程组添加JDBC Request(添加->Sampler-> JDBC Request) 用于写sql来操作Mysql;

 

发送请求,成功访问Msql。

 

 

猜你喜欢

转载自www.cnblogs.com/dashu123/p/11793901.html
01
#01