当前位置: 首页 > article >正文

四、Jmeter工具接口脚本编写

目录

1 Jmeter工具的不同控件的功能概述

1.1 线程组

1.2 取样器

1.3 配置元件

1.4 监听器

1.5 定时器

1.6 逻辑控制器

1.7 前置处理器

1.8 后置处理器

1.9 断言

2 Jmeter写单接口测试脚本

2.1 添加线程组 - 普通线程组    

2.2 添加取样器

 2.3 添加消息头管理器

 2.3 添加查看结果树

2.4 拓展介绍    ​编辑


注:还不会安装的同学,参考Mac环境下安装JDK与JMeter详细教程-CSDN博客

1 Jmeter工具的不同控件的功能概述

1.1 线程组

        用来性能场景设计的,默认有三种:setup、teardown、普通线程组。

        还有一些通过插件增加的其他线程组,后续将性能场景设计的时候会讲到。

1.2 取样器

        根据不同的协议,选择不同的取样器

        http取样器用的最多;jdbc请求连接数据的;调试取样器用来调试脚本

1.3 配置元件

        整个脚本的公共信息,它的优先级最高,运行时最先执行

        如:信息头管理器、用户定义变量等

1.4 监听器

        从不同维度展示测试的结果

        如:查看结果数、聚合报告等。还有一些插件带来的监听器,也是后续讲到

1.5 定时器

        控制运行节奏,比如控制某个请求延迟发送请求,不过这个性能测试用的比较少

1.6 逻辑控制器

        控制脚本运行逻辑,比如循环和判断

1.7 前置处理器

        取样器执行之前,先执行的一类元件。如:用户参数等

1.8 后置处理器

        取样器执行之后,对数据处理的一类元件。如:json提取器、正则提取器等

1.9 断言

        用户给接口请求做结果断言判断是否符合预期。

        接口测试会用到比较多,性能测试一般不会使用

2 Jmeter写单接口测试脚本

注:这里尽量找项目的接口文档,编写接口脚本

接口测试五大要素:
        请求地址  :  取样器 / 配置元件 - http请求默认值
        请求方法  :    取样器
        请求参数  :    取样器
        请求头部  :    配置元件 - http信息头管理器
        响应消息体 : 监听器 - 察看结果树

2.1 添加线程组 - 普通线程组    

        右键测试计划,添加线程组

2.2 添加取样器

        线程组右键,添加取样器 --> http请求

注:

        1、协议:当http请求时,可以不写。但是https时一定要写

        2、服务器ip: 项目的ip或者域名,前后不能有空格

        3、端口:不写默认8080,如果项目有自己的端口一定要带上。https协议这里是443

        4、请求方法:根据接口协议定,不要写错

        5、路径:接口地址,前后不能有空格

        6、编码:utf8 -- 支持中文格式字符

                   6.1 当消息体是json格式,并其中有中文或特殊字符时,【两个二选一】

                        1、配置编码为 utf8;

                        2、在请求头里配置:ContentType:application/json;charset=utf8

                   6.1 当参数为表单的数据,以上两个配置无效,需要勾选参数列表种的‘编码'

                        (这是对参数进行 urlencode 编码,否则会乱码;一般建议默认都勾上)

        7、请求体:

                 7.1 参数和消息体数据是互斥,不能同时使用。
                 7.2  当接口请求体为json或xml ,就把请求体写在消息体数据中;
                                json格式: {"name":"tricy"} --键值对的
                                XML格式: <name>polly</name> 【soap协议 webservice接口】
                7.3  当接口为 GET方法的时候, 请求体一般都是表单格式

                                请求体就写在【参数】中 
                                请求体的参数值的类型为数字/ 字符串类型时,值是没有双引号。
                                表单数据的值是没有类型之分的。(因为这个值都是跟在URL地址后

                                面的,会进行urlencode编码,都是文本,所以没有类型之分)

        8、自动重定向:直接跳跃到最终的地址上,查看结果树中看不到中间过程,所以无法提取到中间过程的数据。【一般不勾选】
        9、跟随重定向:默认勾选,查看结果树中看到重定向的过程,而且我们可以提取过程中的数据。
        10、使用keepalive: 默认勾选,使用http的长连接;不勾选,就是短连接。(http协议默认是长连接协议,连上之后保持一段时间再释放。节省TCP三次握手和四次挥手的资源消耗,默认是长连接
        11、对post使用multipart/form-data:文件上传的接口需要勾选这个二进制流的数据格式

 2.3 添加消息头管理器

        线程组右键 --> 配置元件  --> http信息头管理器

 注:

        如果是json消息体数据,必须添加消息头,写上 Content-Type:application/json;
        application/json :json数据,请求体为json就一定要配置添加消息头
        application/x-www-form-urlencoded : 表单数据,可以不加content-type请求头
        form-data:post方法提交表单数据,可以不加content-type请求头
        还有其他的请求头是否要加看开发接口封装: 接口文档 + 抓包+沟通开发确认 

 2.3 添加查看结果树

        线程组右键 --> 监听器  --> 查看结果树    

发送请求成功会出现如下信息

注:查看结果树的结果检查
        1、绿色,仅仅代表网络成功,服务器收到并处理了请求;http的响应状态码为 1xx 2xx 3xx,不代表结果符合预期,要进行响应结果的确认 判断接口是否执行通过。
        2、红色,仅仅代码网络请求失败,响应状态码为 4xx\5xx。
        3、HTTP取样器结果分析【单位是ms】
                3.1 load time加载时间=响应时间:

                从发送请求到收到最后的响应时间,所花费的时间,即响应时间(RT)
                3.2 Latency延迟时间 <= 响应时间:

                从发送请求到收到第一个响应【报文太大,需要分组分包发送】,所花费的时间。
                3.3 connect time(连接时间):建立连接所花费的时间,例如TCP的三次握手。

http协议不太熟悉的同学,可以参考(7)http请求、https请求详解-CSDN博客

        4、如果响应结果是中文乱码:需要修改jmeter配置文件
                4.1 进入Jmeter的bin目录下,找到jmeter.properties文件,
                4.2 将#sampleresult.default.encoding=ISO-8859-1的注释去掉,
                4.3 改成:sampleresult.default.encoding=UTF-8,
                4.4 重启Jmeter,会再次重新加载配置文件

        

2.4 拓展介绍    

右上角的运行结果:
        前面是运行时间
        三角形: Jmeter工具的日志,运行报错红色的数字
        后面的数字:目前正在运行的线程数 / 将要启动的线程数 【负载测试】

http请求默认值:
1、多个接口的公共部分可以放在默认值里,简化配置。就不用给每一个接口添加一个(2.3 添加消息头管理器)
2、如果接口本身也配置了消息头管理器,根据就近原则以接口自己的配置为准发送

http://www.kler.cn/a/586564.html

相关文章:

  • 用Python实现持续集成与部署(CI/CD)流程:自动化测试、构建与部署
  • 什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
  • 向量数据库:A Brief Introduction
  • 04_Linux驱动_05_pinctrl子系统
  • 阿里云oss开发实践:大文件分片、断点续传、实时进度 React+Node+Socket.IO
  • 【接口封装】——22、读写文件
  • iOS底层原理系列03-Objective-C运行时机制
  • ubuntu24.04执行nvidia-smi报错,实际生产报错,处理过程
  • Docker部署Laravel项目
  • 数据结构与算法-图论-二分图
  • Unity3D手游内存深度优化指南
  • PL/SQL语言的神经网络
  • Python语言的代码重构
  • ubuntu20.04装nv驱动的一些坑
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(54)落宝金钱寻最优 - 跳跃游戏(贪心策略)
  • 洛谷 P1068 [NOIP 2009 普及组] 分数线划定 python
  • 【Kubernets】Deployment 和 StatefulSet 有什么区别?什么时候用 StatefulSet?
  • 内存泄漏的防范:检测与预防
  • 稳定运行的以Oracle数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
  • Windows下安装MongoDB 8