• Jmeter使用


    一、背景

    Jmeter是目前非常流程测试软件,JMeter是纯JAVA语言写的应用程序,它支持主流测协议,包括FTP/LDAP/JMS/HTTP(S)/JDBC等。

    二、常见的测试接口分类

    • Soap框架
      基于webservice的协议:接口地址:http://…?wsdl
    • RPC框架
      基于(dubbo(thwift))协议的接口:dubbo://
    • RestFull框架(80%)
      基于http协议:

      请求:请求行(请求方式和请求路劲),请求头,请求报文
      请求方式:get、post、put、delete
      请求路径:url
      请求头:
      Accept:如application/json; 指定客户端接收的数据格式
      Content-type:如application/json;指定客户端发送的数据格式
      X-Requested-with:异步请求(登录,ajax)
      User-Agent:如User-Agent: Mozilla/5.0 客户端的类型,表示浏览器请求还是其他什么设备请求
      Cookie:服务器返回给客户端并且保存的Cookie信息
      响应:响应行(响应码和响应信息),响应头,响应报文
      响应码:一般情况:1xx状态;200成功;3xx重定向;4xx客户端错误;5xx服务端错误
    ## 三、目录结构说明 ![在这里插入图片描述](https://img-blog.csdnimg.cn/29f579a0388748f5a723bf897fe5a98d.png) 最重要的三个文件夹:
    • backups 备份目录,jmx的脚本,自动的保存在此处。
    • bin 存放jmeter的启动脚本,配置文件,模块文件
      jmeter.bat 启动脚本
      jmeter.properties 全局配置文件,如:永久中文 修改 language=ZH_CN
    • extras 存放和第三方构建的文件,比如:Ant,build.xml

    四、组件和执行顺序和作用域

    4.1 组件

    1. 测试计划:jmeter的起点和容器
    2. 线程组:代表一定的虚拟用户
    3. ★取样器:发送请求的最小单元
    4. 逻辑控制器:控制组件的执行顺序
    5. 前置处理器:在请求之前执行
    6. 后置处理器:在请求之后执行
    7. 断言:判断请求是否成功
    8. 定时器:是否延迟或间隔发送请求
    9. 配置原件:请求期的配置信息
      10.监听器:负责收集测试的结果

    4.2 执行顺序

    执行计划→ 线程组→配置原件→前置处理器→定时器→取样器→后置处理器→断言→监听器

    4.3 组件作用域

    基本每个组件的作用域都适合一下规则:组件会作用于它的父级组件及同级组件以及同级组件的子组件

    4.4 接口测试流程

    一般一个接口:20到30个用例是比较正常的。

    五、第一个测试实例

    一个标准的使用用例一般要包括如下内容

    5.1 添加测试计划

    略

    5.2 在测试计划下添加线程组

    在这里插入图片描述

    5.3 在线程组下添加【配置元件】

    5.3.1 添加 cookie管理器

    在这里插入图片描述

    5.3.2 添加【用户自定义的变量】

    在这里插入图片描述
    引用变量:${xxx}
    在这里插入图片描述

    5.3.3 添加【HTTP请求默认值】

    一般是添加请求的ip和端口,这样在取样器里面就不需要再写ip和端口了。
    在这里插入图片描述
    在这里插入图片描述

    5.4 ★在线程组下添加【取样器】

    5.4.1 【HTTP请求】取样器

    在这里插入图片描述在这里插入图片描述

    ★5.4.2 【BeanShell取样器】

    beanshell的基本用法
    在这里插入图片描述
    在这里插入图片描述

    5.5 在线程组下添加【监听器】用于查看结果,以【查看结果树】为例

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.5.1 常用的筛选方式【正则表示式】

    在这里插入图片描述

    5.5.2 常用的筛选方式【json表示式】

    在这里插入图片描述
    在这里插入图片描述

    5.6 在取样器下添加提取器,最常用的是【正则表达式提取器】和【JSON提取器】

    提取器可以在5.5中去测试正确性

    5.6.1 正则表达式提取器

    在这里插入图片描述
    在这里插入图片描述

    ★ 万能的正则表达式提取器

    在这里插入图片描述

    "label":"(.*?)",[\s\S]*?"sValue":"(.*?)"
    
    • 1

    5.6.2 JSON提取器

    在这里插入图片描述
    在这里插入图片描述

    5.6.3 添加调试取样器,用来查看取样器的结果

    在这里插入图片描述
    在这里插入图片描述

    5.7 添加调试取样器

    通过调试取样器,可以更好的查看取样器里面拿到的内容
    在这里插入图片描述
    在这里插入图片描述

    5.8 ForEach控制器,使用它来实现批量删除。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.9 定时器

    在这里插入图片描述
    在这里插入图片描述

    5.10 文件上传接口

    在这里插入图片描述

    5.11 接口断言【响应断言】,【JSON断言】,【BeanShell断言】

    在这里插入图片描述

    5.11.1 响应断言-状态断言

    在这里插入图片描述

    5.11.2 响应断言-业务断言

    在这里插入图片描述

    5.11.3 断言成功

    在这里插入图片描述

    5.12 数据驱动,批量自定义参数,有些接口需要进行反例测试时可以使用,批量操作。

    新建一个.csv 文件 把参数写进去
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    5.13 数据库驱动

    5.13.1 在jemeter下添加mysql连接驱动

    在这里插入图片描述

    5.13.2 JDBC连接池配置

    在这里插入图片描述
    在这里插入图片描述

    5.13.3 JDBC Request jdbc请求

    在这里插入图片描述
    在这里插入图片描述

    5.13.4 返回结果处理

    在这里插入图片描述

    六、通过jemeter录制接口文档通过jmeter的http代理服务实现。

    6.1 添加一个【HTTP代理服务器】

    在这里插入图片描述

    6.2 代理服务设置

    6.2.1 添加代理服务器

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    6.2.3 启动

    在这里插入图片描述

    七、变量的产生使用

    7.1 ★变量的使用

    1.json或正则表达式提取器变量:${变量名} (这种方式只能访问线程内的)去访问,可以 用在http请求地址栏,请求体等地方法
    2.beanshell中的变量:

    //添加全局变量
    props.put("_all_name","张三");
    props.put("_all_age",23+"");
    // 添加线程内的变量
    vars.put("_name","李四");
    vars.put("_age",8+"");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    // 获取全局
    log.info(props.get("_all_name"));
    log.info(props.get("_all_age"));
    或通过函数获取全局变量
    log.info("线程2---"+props.get("_all_name")+":"+props.get("_all_age"));
    log.info("线程22---${__property(_all_name,,)}"+":${__property(_all_age,,)}");
    
    // 获取线程内
    log.info(vars.get("_name"));
    log.info(vars.get("_age"));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    八、函数的使用

    ## 1-100的随机数
    ${__Random(1,100,aaa)} 
    ## 从abcdefg随机找出2个字母
    ${__RandomString(2,abcdefg,)}
    ## 设置全局变量password=111111
    ${__setProperty(passwrd,111111,000000)}
    ## 获取全局变量的值
    ${__P(passwrd,)} 或 ${__property(passwrd,,)}x
    ## 分割成数组,可以用${data_x} 访问
    ${__split(a;b;c;d,data,;)}
    结果:
    		data_n=4
    		data_2=b
    		data_1=a
    		data_4=d
    ## 当前时间戳
    ${__time(,)}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    九、最佳实战

    在这里插入图片描述

  • 相关阅读:
    aj-report页面嵌入其他项目
    用 Python 实现微信推送消息
    在 React Native 中实现 3D 动画
    网络安全笔记7——防火墙技术
    Mysql加密功能
    XXL-Job的基本使用
    数字图像处理考点分析(二)
    Mysql主从复制的三种同步方式和半同步复制配置
    Python使用大漠插件前的准备工作
    React - 高级用法
  • 原文地址:https://blog.csdn.net/fen_dou_shao_nian/article/details/125271107