接口测试——精通JMeter测试工具

文章目录

  • 前言
  • 一、JMeter工具介绍
  • 二、JMeter工具下载及安装
  • 三、JMeter的目录介绍
  • 四、JMeter常用组件以及作用域
    • 1.常用的组件以及执行顺序
    • 2.常用的组件(元件)的作用域
  • 五、使用JMeter执行接口测试
    • 1.测试计划
    • 2.线程组
    • 3.测试片段
    • 4.HTTP请求默认值
    • 5.HTTP Cookie管理器
  • 六、JMeter关联接口测试
    • 1.正则表达式提取器
    • 2.边界值提取器
    • 3.JSON提取器
    • 4.Xpath提取器
  • 七、JMeter不同参数的接口测试
  • 八、JMeter动态参数接口测试
    • 1.随机数字函数
      • 8.2.随机字符串函数
    • 3.随机时间戳函数
    • 4.其他函数
  • 九、JMeter调试文件上传接口
  • 十、JMeter接口测试常规断言和数据库断言
    • 1.常规断言
      • 1.1.响应断言
      • 1.2.JSON断言
      • 1.3.BeanShell断言(一般用在数据库断言中)
    • 2.数据库断言
  • 十一、JMeter参数化(用于实现正例和反例)
    • 1.CSV参数化(CSV 数据文件设置)
  • 十二、JMeter跨线程组实现接口关联
  • 十三、JMeter跨线程组实现Cookie关联
  • 十四、JMeter工具其他常用组件

前言

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

一、JMeter工具介绍

Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

二、JMeter工具下载及安装

安装java环境,因为JMeter工具是基于java开发的(安装JDK)

  • JDK下载与安装:https://blog.csdn.net/weixin_44904239/article/details/116291544

JMeter工具下载与安装

  • JMeter工具下载与安装:https://blog.csdn.net/weixin_44904239/article/details/134947255

三、JMeter的目录介绍

  • backups目录:备份脚本(没有写脚本没有此目录)
  • bin目录:模板,主要jar包,启动文件,jmeter.properties全局配置文件。jmeter-server.bat分布式压测
  • extras目录:存放和集成第三方的一些文件
  • lib目录:存放jar包

接口测试——精通JMeter测试工具_第1张图片

四、JMeter常用组件以及作用域

1.常用的组件以及执行顺序

  • (1)测试计划:JMeter启动,其它组件的容器
  • (2)线程组(测试片段):代表一定虚拟用户数,测试片段代表模块
  • (3)配置元件:配置信息
  • (4)前置处理器:请求之前的操作
  • (5)逻辑控制器:控制请求
  • (6)定时器:控制延迟请求
  • (7)取样器:发送请求
  • (8)后置处理器:请求之后的操作
  • (9)断言:判断结果是否正常
  • (10)监听器:收集和查看结果

2.常用的组件(元件)的作用域

  • 组件可以作用于父组件
  • 组件可以作用于同级组件
  • 组件可以作用于同级组件的子组件

五、使用JMeter执行接口测试

1.测试计划

接口测试——精通JMeter测试工具_第2张图片

  • 线程组之间在执行是没有顺序。如果希望线程按顺序执行,则需要勾上【独立运行每个线程组】

    接口测试——精通JMeter测试工具_第3张图片
    接口测试——精通JMeter测试工具_第4张图片

  • 勾上【独立运行每个线程组】以后,线程组按顺序执行

    接口测试——精通JMeter测试工具_第5张图片

2.线程组

接口测试——精通JMeter测试工具_第6张图片

  • 线程组:

    接口测试——精通JMeter测试工具_第7张图片

  • setUp 线程组中的请求会在所有请求之前执行,tearDown 线程组中的请求会在所有请求之后执行

    接口测试——精通JMeter测试工具_第8张图片
    接口测试——精通JMeter测试工具_第9张图片

3.测试片段

接口测试——精通JMeter测试工具_第10张图片

  • 测试片段:可以理解为是特殊的线程组,和线程组同级别。用于多个测试之间协同做接口测试。主要是和模块控制器以及Include控制结合使用

  • 使用情况:

    • 接口数量不多,一个人就可以完成 —— 可以使用 线程组
    • 接口数量巨大,需要多个测试协同测试 —— 可以使用 测试片段 + 线程组
  • 特点:

    • 1.默认是禁用状态

      接口测试——精通JMeter测试工具_第11张图片

    • 2.单个测试片段无法执行,需要结合模块控制器(自己调试)以及Include控制器(leader-领导)执行

      • 单个测试调试

        接口测试——精通JMeter测试工具_第12张图片
        接口测试——精通JMeter测试工具_第13张图片

      • 多个测试调试:多个测试片段需要配合多个模块控制器使用

        接口测试——精通JMeter测试工具_第14张图片

  • 组员如何保存测试片段:选中要保存的测试片段→鼠标右击→选中部分保存为

    接口测试——精通JMeter测试工具_第15张图片

  • 模拟Leader调试组员的测试片段

    创建一个 “线程组” → 线程组中创建一个 “Include控制器” → 浏览文件 "选择组员的保存的测试片段→创建 “查看结果树” → 运行查看结果

    接口测试——精通JMeter测试工具_第16张图片
    接口测试——精通JMeter测试工具_第17张图片

4.HTTP请求默认值

  • HTTP请求默认值:设置一次,其他接口可以进行调用
  • http协议端口:80
  • https协议端口:443

接口测试——精通JMeter测试工具_第18张图片
接口测试——精通JMeter测试工具_第19张图片

5.HTTP Cookie管理器

  • HTTP Cookie管理器:自动的处理有cookie关联的接口

    接口测试——精通JMeter测试工具_第20张图片

六、JMeter关联接口测试

什么是关联接口:一个接口的返回值会作为另外一个接口的入参

1.正则表达式提取器

接口测试——精通JMeter测试工具_第21张图片

  • 正则表达式提取器:左边界和右边界不能缺失,如果有特殊字符必须用 “\” 转义符

  • 关联接口如何进行接口测试:把接口返回值当做一个变量

  • 返回值如何进行设置到对应变量:

    • 正则表达式提取器:对文本进行提取
      • 匹配字符串中特定字符的字符串
      • 正则表达式包含字符 + 限定符
      • 正则表达式写法:左边界 + (. + ?) + 右边界
      • 如何调用变量:${变量名}
      • 万能正则表达式:.*?
  • 基本用法:

    • 自定义名称
    • 正则表达式
    • 使用第一个正则表达式取匹配值
    • 匹配数字:0代表随机,1代表取第一个值,-1代表取所有的值
    • 默认值:没有匹配到使用默认值

    接口测试——精通JMeter测试工具_第22张图片
    接口测试——精通JMeter测试工具_第23张图片
    接口测试——精通JMeter测试工具_第24张图片

  • 多个值的用法:

    接口测试——精通JMeter测试工具_第25张图片
    接口测试——精通JMeter测试工具_第26张图片

2.边界值提取器

接口测试——精通JMeter测试工具_第27张图片

  • 基本用法

    接口测试——精通JMeter测试工具_第28张图片
    接口测试——精通JMeter测试工具_第29张图片

3.JSON提取器

接口测试——精通JMeter测试工具_第30张图片

  • 了解JSON语法:
    • (1) $ 根节点

    • (2) .键名["键名"] 去子节点

      接口测试——精通JMeter测试工具_第31张图片
      接口测试——精通JMeter测试工具_第32张图片

    • (3)如果是数组(llist),则通过下标取值

      接口测试——精通JMeter测试工具_第33张图片
      接口测试——精通JMeter测试工具_第34张图片

    • (4)相对路径用法:$..键名 这里的name一般需要唯一

      接口测试——精通JMeter测试工具_第35张图片

    • (5)列表切片:$.tags[0:2]$.tags[开始下标:结束下标] 取值包括开始下标的值,不包括结束下标的值)

      接口测试——精通JMeter测试工具_第36张图片

总结:看到字典则用.看到列表则用[0]下标,下标从0开始。

  • JSON提取器基本用法

    接口测试——精通JMeter测试工具_第37张图片

    接口测试——精通JMeter测试工具_第38张图片

4.Xpath提取器

接口测试——精通JMeter测试工具_第39张图片

  • web自动化里面的定位,一般用于返回html网页时

七、JMeter不同参数的接口测试

  • 参数:表单键值对,表格。
    接口测试——精通JMeter测试工具_第40张图片
    接口测试——精通JMeter测试工具_第41张图片

  • 消息体数据:JSON数据,以 {}[] 组成的数据

    接口测试——精通JMeter测试工具_第42张图片
    接口测试——精通JMeter测试工具_第43张图片

  • 文件上传:文件

    接口测试——精通JMeter测试工具_第44张图片
    接口测试——精通JMeter测试工具_第45张图片

八、JMeter动态参数接口测试

  • 工具 → 函数助手对话框

    接口测试——精通JMeter测试工具_第46张图片

1.随机数字函数

  • 函数:Random
    接口测试——精通JMeter测试工具_第47张图片
    接口测试——精通JMeter测试工具_第48张图片

8.2.随机字符串函数

  • 函数:RandomString
    接口测试——精通JMeter测试工具_第49张图片
    接口测试——精通JMeter测试工具_第50张图片

3.随机时间戳函数

  • 函数:time
    接口测试——精通JMeter测试工具_第51张图片
    接口测试——精通JMeter测试工具_第52张图片

4.其他函数

  • 函数:BeanShell(将小写字母变成大写)

  • 函数:javaScript(将小写字母变成大写)

  • 先使用随机字符串函数生成一个3位随机小写字母 → 然后使用BeanShell函数或者javaScript函数将小写字母变成大写

    #随机字符串函数生成3位随机小写字母
    ${__RandomString(3,abcdefghijklmnopqrstuvwxyz,)}
    #BeanShell函数将小写变成大写
    ${__BeanShell("${__RandomString(3,abcdefghijklmnopqrstuvwxyz,)}".toUpperCase(),)}
    #javaScript函数将小写变成大写
    ${__javaScript("${__RandomString(3,abcdefghijklmnopqrstuvwxyz,)}".toUpperCase(),)}
    

    接口测试——精通JMeter测试工具_第53张图片
    接口测试——精通JMeter测试工具_第54张图片
    接口测试——精通JMeter测试工具_第55张图片

九、JMeter调试文件上传接口

  • 文件的类型
    接口测试——精通JMeter测试工具_第56张图片

十、JMeter接口测试常规断言和数据库断言

接口测试——精通JMeter测试工具_第57张图片

1.常规断言

1.1.响应断言

接口测试——精通JMeter测试工具_第58张图片

1.2.JSON断言

在这里插入图片描述
接口测试——精通JMeter测试工具_第59张图片

1.3.BeanShell断言(一般用在数据库断言中)

  • 主要通过Failure标识是否失败和FailureMessage标识失败信息。Failure=true 失败,Failure=false 成功

    //注释:断言返回的状态码为200
    if("200".equals(""+ResponseCode)){
    	Failure = false;
    	FailureMessage = "断言状态码为200成功!";
    }else{
    	Failure = false;
    	FailureMessage = "断言状态码不为200失败,返回的状态码为:"+ResponseCode;
    }
    		
    //注释:断言返回的结果中包含有某一个字符串
    //获取返回的结果
    var result = prev.getResponseDataAsString();
    if(result.contains("星标组")){
    	Failure = false;
    	FailureMessage = "断言返回结果包含[星标组]成功!";
    }else{
    	Failure = false;
    	FailureMessage = "断言返回结果不包含[星标组]失败,返回的信息为:"+result;
    }
    

    接口测试——精通JMeter测试工具_第60张图片

2.数据库断言

  • 数据库断言使用

    1.在测试计划中引入数据库驱动jar包或将数据库驱动jar包拷贝到JMeter安装目录中的lib目录中

    接口测试——精通JMeter测试工具_第61张图片
    接口测试——精通JMeter测试工具_第62张图片
    接口测试——精通JMeter测试工具_第63张图片

    2.新建:JDBC Connection Configuration

    接口测试——精通JMeter测试工具_第64张图片
    接口测试——精通JMeter测试工具_第65张图片

    3.新建:JDBC Request

    接口测试——精通JMeter测试工具_第66张图片
    接口测试——精通JMeter测试工具_第67张图片

    4.使用BeanShell断言实现数据库断言

    //获取数据库查询的数据
    //name = 星标组
    String name = vars.getObject("result").get(4).get("name");
    //打印查看信息
    log.info(name);
    
    var result = prev.getResponseDataAsString();
    if(result.contains(name)){
    	Failure = false;
    	FailureMessage = "断言返回结果包含" + name + "成功!";
    }else{
    	Failure = false;
    	FailureMessage = "断言返回结果不包含" + name + "失败,返回的信息为:"+result;
    }
    

    接口测试——精通JMeter测试工具_第68张图片
    接口测试——精通JMeter测试工具_第69张图片

十一、JMeter参数化(用于实现正例和反例)

  • 参数化:用不同的测试数据对同一个接口进行循环测试(用于实现正例和反例)

1.CSV参数化(CSV 数据文件设置)

  • CSV参数化(CSV 数据文件设置)使用

    1.准备一个csv数据文件,按照测试接口需求填写准备对应的数据

    接口测试——精通JMeter测试工具_第70张图片

    2.新建一个 “CSV 数据文件设置” → 填写对应的信息

    接口测试——精通JMeter测试工具_第71张图片
    接口测试——精通JMeter测试工具_第72张图片

    3.调用 “CSV 数据文件设置” 里面的变量

    接口测试——精通JMeter测试工具_第73张图片

    4.创建一个 “响应断言”(断言响应返回的数据是否跟CSV数据文件里面设置的断言结果相同) → 调用CSV数据文件里设置的断言结果变量

    接口测试——精通JMeter测试工具_第74张图片

    5.创建一个 “循环控制器” → 将测试的接口放到循环控制器中

    接口测试——精通JMeter测试工具_第75张图片
    接口测试——精通JMeter测试工具_第76张图片

    6.查看执行结果

    接口测试——精通JMeter测试工具_第77张图片

注意:如果有接口关联,后面的接口需要用到前面接口的数据,那么就要把与预期结果相同的数据放到CSV数据文件的最后,避免后面关联的接口获取不到前面的数据

十二、JMeter跨线程组实现接口关联

对第2个接口做基准(压力)测试,但是第二个接口又依赖于第一个接口,那么把他们放到同一个线程组测试则相当于是对两个接口进行测试,而不是单独对第2个接口进行测试,造成测试不准确

接口测试——精通JMeter测试工具_第78张图片

  • 跨线程组实现接口关联

    1.线程组1中的接口使用了JSON提取器提取了接口返回数据中某个键的值

    接口测试——精通JMeter测试工具_第79张图片
    2.线程组1中的接口新建一个 “BeanShell 后置处理程序”

    接口测试——精通JMeter测试工具_第80张图片

    3.使用 “函数助手对话框” 中的 "setProperty"函数 (如图所示进行操作) → 复制生成的函数字符串 → 在 “函数助手对话框” 中使用setProperty函数生成的函数字符串

    接口测试——精通JMeter测试工具_第81张图片
    接口测试——精通JMeter测试工具_第82张图片
    接口测试——精通JMeter测试工具_第83张图片

    4.使用 “函数助手对话框” 中的 "property"函数 (如图所示进行操作) → 复制生成的函数字符串

    接口测试——精通JMeter测试工具_第84张图片
    接口测试——精通JMeter测试工具_第85张图片

    5.调用"property"函数生成的函数字符串

    接口测试——精通JMeter测试工具_第86张图片

    6.勾选 “独立运行每个线程组” (因为线程组之间在执行是没有顺序,不勾选可能会导致线程2比线程1先执行,就会导致结果错误)

    接口测试——精通JMeter测试工具_第87张图片

    7.查看测试结果

    接口测试——精通JMeter测试工具_第88张图片

注意:在测试计划中需要勾选上【独立运行每个线程组】

十三、JMeter跨线程组实现Cookie关联

  • 同一个线程:可以增加HTTP Cookie管理器就可以自动化管理

  • 如果是跨线程:

    • 1.(可以按照上面的跨线程组实现接口关联方式先操作,操作完成后执行下面步骤)

    • 2.修改JMeter安装目录下的bin目录中的 “jmeter.properties” 配置文件(修改如图所示——配置完成后关掉命令提示符及JMeter工具,然后重启JMeter)

      CookieManager.save.cookies=True
      

      接口测试——精通JMeter测试工具_第89张图片

    • 3.查看如下图所示两个地方的Cookie值,如果两组数据一致表示Cookie值百分百正确,如果两组数据不一致,取数据多的那一组

    接口测试——精通JMeter测试工具_第90张图片
    接口测试——精通JMeter测试工具_第91张图片

    • 4.从调试取样器中取得Cookie的值并在 “BeanShell 后置处理程序” 中设置为全局变量

      注意:变量名不能随便取,必须和响应头里面的变量名一致

      接口测试——精通JMeter测试工具_第92张图片
      接口测试——精通JMeter测试工具_第93张图片

    • 5.将 “BeanShell 后置处理程序处理器” 中设置的全局变量添加到 “HTTP Cookie管理器” 中

      接口测试——精通JMeter测试工具_第94张图片
      接口测试——精通JMeter测试工具_第95张图片

    • 6.将关联的接口实现Cookie关联

      接口测试——精通JMeter测试工具_第96张图片
      接口测试——精通JMeter测试工具_第97张图片

十四、JMeter工具其他常用组件

  • 调试取样器
    接口测试——精通JMeter测试工具_第98张图片

  • 固定定时器

    接口测试——精通JMeter测试工具_第99张图片

  • 用户定义的变量

    接口测试——精通JMeter测试工具_第100张图片

你可能感兴趣的:(软件测试,jmeter,测试工具,接口测试)