接口测试

1.0接口测试

API测试、后台测试、app接口测试、web接口测试、SDK测试

2.0分类---方向

  • 接口功能测试 ---》手动查看响应码,cookies,请求头
    • Postman
    • JMeter
  • 接口自动化测试 ----》JMeter断言,代码
    • Postman + newman(命令行工具)
    • JMeter
    • Python + requests + pytest +allure
    • 接口自动化测试平台
  • 接口性能测试 ----》服务器相关指标达成
    • JMeter
    • LR = LoadRunner

接口类型

  • WebService 接口
    • SoapUI
  • http/https 接口
    • JMeter/Postman

传输类型

  • 同步类型
    • 阻塞调用,适用相应要求不高
    • 保证合理时间返回正确的结果,并能正确处理异常情况
  • 异步类型
    • 通过回调函数,Promise,Future,适用相应要求高
    • 验证异步机制的正确性,包括确保回调函数正确被调用,并处理接口调用的并发性和异步结果的处理

3.0接口文档

  • 某个接口的部分组成
    • 1.接口描述
    • 2.请求地址
    • 3.请求方法
    • 4.请求头
    • 5.请求实体/请求参数/入参/request body
    • 6.接口成功的返回数据/响应实体/响应内容/request body/出参
      • 一般为json格式
    • 7 的.接口不同失败情况的不同错误码和失败响应示例

4.0搭建接口测试环境(运维)

4.1接口功能测试流程

  • 1.接口文档
  • 2.分析接口文档(重点)
  • 3.列测试点
  • 4.写接口测试用例
  • 5.写JMeter脚本
  • 6.运行JMeter脚本,并提bug单
  • 7.写接口测试报告

5.0.接口功能测试

  • .按技术点来列出所有可能情况的接口
    • GET
      • 不带参数
      • 带参
        • param
        • 提醒:GET 请求不能发送 form/json 格式的请求实体!
    • POST/DELETE/PUT请求
      • 不带参数
      • 带参
        • param
        • from
        • param+from
        • json
          • 格式
        • 上传文件
    • 特殊情况处理
      • 发送GET/POST/DELETE/PUT时需要带cookies
        • 1.利用cookies管理器自动管理
        • 2.手动管理cookies
          • 通过抓包验证
        • 3.(✔)添加请求头

6.0接口自动化测试

线程组+参数化+断言+关联

  • 线程组理解
    • 一个线程组相当于一个业务
    • (默认情况先后执行顺序随机)
    • 特殊线程组
      • SetUp
        • 初始化工作
      • tearDown
        • 清理垃圾数据
    • 演示:
      • setup--->普通线程组--->teardown
    • 属性
    • 调度器--->
      • 负载测试
  • 组件
    • 用户定义的变量
      • 单个$
      • 数组data
        • data_1="张三"
        • data_2=“李四”
  • forEach控制器

6.1参数化

动态的获取测试数据的过程

  • 实现方式
    • 1.CSV Data Set Config(推荐,数据量少)
    • 2.用户参数
    • 3.用户定义的变量
    • 4.JMeter函数(推荐,数据量多)

6.11CSV Data Set Config

  • 1.准备好数据文件(utf-8)
  • 2.写HTTP请求
  • 3.HTTP请求中添加CSV组件
    • 文件名:数据文件绝对路径/相对路径
    • 文件编码:给测试数据文件 data.txt 的文件编码。UTF-8
    • 变量名列表:自定义的变量名列表。
  • 4.设置迭代次数
  • 【例】
    • 利用 CSV 组件来对新增学院接口来新增 3 个学院。这 3 个学院的信息是从 data.txt 中来的

6.22利用JMeter相关函数

  • 1.正常写http请求
  • 2.添加CSV组件
  • 3.在http请求用动态值替代固定值
  • 4.设置迭代次数

7.0JMeter绕开接口直接操作关系型数据库

流程:

  • 1.在测试计划上添加相干jar包
  • 2.添加连接配置文件
    • 指定 DB 的 IP、账号、密码,并且为这些信息取一个连接名
    • 后面的 JDBC 取样器中会需要这个连接名
  • 3.添加JDBC取样器
    • Parameter Values
      • JDBC 类型
        • 整数类型:Integer
        • 字符串类型:varchar
        • 浮点数类型:double
        • 日期类型:Date
  • 4.执行sql语句
    • 类型
        • 直接Select Statement
        • 间接Prepared Select Statement
      • 增删改
        • 直接Update Statement
        • 间接Prepared Update Statement
    • (参数化查询)
      • Sql=”select * from t_studen where name=?”

示例1:造大量的未加密的测试数据

示例2:造大量的加密数据

示例3:把某接口的响应数据提取出来并写入到 DB中

  • json 提取器+循环控制器或计数器(在配置元件中)+jdbc 取样器+V 函数嵌套解析

示例4:jdbc 取样器的查询结果再处理

8.0测试加密接口

  • 1.把加密jar包添加到测试计划中
    • 开发会给测试:加密 jar 包、示例代码
  • 2.写http取样器
  • 3.准备测试数据文件
  • 4.在http取样器中添加CSV组件
  • 5.在http取样器中添加”BeanShell前置处理器“
  • 6.在http取样器的固定值替换成动态值
  • 7.设置迭代次数

9.0关联技术

  • 解决依赖接口问题

实现方案

  • 1.Xpath提取器
    • 适用于从标签(html | XML)语言提取数据
  • 2.正则表达式提取器(推荐)
    • json/html
    • 响应内容的显示格式用“Text”格式
  • 3.json提取器(推荐)
    • json格式
  • 4.边界提取器
  • 说明:这三个提取器本质上就是从某取样器中提取某数据,然后把该数据保存到某个 JMeter线程组变量中

示例

  • 方案一:XPATH 提取器来实现关联 //了解
    • 1.新增http01
    • 2.在http01中新增下xpath提取器
    • (可选)验证提取成功与否
    • 3.使用线程组变量
  • 方案四:边界值提取器 //了解
  • 方案二01:JSON提取器来实现关联
    • 前提:
      • B 接口的响应实体是 json 格式,才可以使用 json 提取器
    • 1.添加http01:查询所有学院信息
    • 2.在http01中添加json提取器
    • (可选)验证提取是否正确
    • 3.新增http02
  • 方案二02 一个 json 提取器同时提取多个值
    • 1.添加http01:
      • 查询出所有学院
    • 2.在http01中添加json提取器
    • [可选]验证线程组变量是否有值
    • 3.拼接字符串
    • 4.添加控制循环器
    • 5.在循环控制器中添加http02
  • 方案三:正则表达式提取器实现关联

10.0动态请求

11.0JMeter断言

00---Tips

  • 1.如果一个 http 请求发送失败的可能原因

    • 请求方式不对
    • 请求地址不对
    • 请求实体的格式不对
    • 缺少相关的请求头
  • 2.与DB相干

    • 1.对sql评测
    • 2.对DB进行CRUD
    • 3.在DB中造大量的测试数据
    • 4.从 DB 中获取测试数据,然后把获取到的测试数据交给 http 取样器
  • 3.动态值

    • $
  • 4.JMeter

    • Count函数
    • Random函数
      • 随机int
      • RandomString
      • RandonDate
    • 浮点数
      • 整数+点+小数
  • 5.线程组先后执行顺序

    • 默认随机
  • 6.线程组层次——>

    • 原则:自动化为了能循环执行,一般都要求不产生任何垃圾数据,即 DB 中、日志文件等都应该是回到原始状态
    • SetUp线程组/脚本
      • 用于初始化工作
    • 普通线程组1
    • 普通线程组2
    • teardown
      • 清理垃圾数据
  • 7.用户定义的变量

    • 单个变量
      • $
    • 数组变量: data
      • data_1="张三"
      • data_2="李四"
      • 利用线程组中
        • forEach控制器
  • 8.测试数据的来源

    • 1.测试数据文件
    • 2.通过算法/函数动态生产
    • 3.从DB中获取数据
      • 用JDBC 取样器把某接口的响应数据提取出来并写入到 DB 中
      • 例:直接从 t_user 表查询出用户信息,然后把这些信息传递给 http 取样器
  • 9.变量

    • JMeter线程组变量
      • $
    • JMeter全局变量
      • 该变量可以在所有线程组中使用
    • Java变量
      • 使用
        • 需要通过这 3 个beanShell 来把 Java 变量的值存储到某个 JMeter 线程组变量中vars.put(“线程组变量名”,Java变量名);
  • 10.调试取样器:

    • 看它上面的取样器中保存的线程组变量的值

      • 规则

        • ${变量名_#}:该线程组变量中保存的值的数量!int

          ${变量名_N}:该线程组变量中的保存的第 N 个值。N 从 1 开始!

  • 11.循环控制器

  • 12.Xpath query: 指定提取规则

  • 13./json 提取的语法:

    • $:整个响应实体。

      • 即整个 json!
    • $.Key: 获取某元素的值!

      • 例如:$.count:16
    • $.results[索引]:

      • $.results[0]:

        {

        ​ "dep_id": "T01",

        ​ "dep_name": "Test201 学院",

        ​ "slogan": "Slogan201",

        ​ "master_name": "Master201"

        }

      • $.results[*]:

        • 代表所有
      • $.results[0].dep_id:T01

      • $.results[1].dep_id:T01

      • $.results[*].dep_id:T01

    • Names of created variables
      • 自定义的线程组变量列表,用英文分号分隔
      • 这些提取到的值分别自动保存在这些线程组变量中
    • JSON Path expressions
      • json 提取规则的列表,用英文分号分隔
    • Match No: 匹配数字。Int
        1. N : 提取第 N 个匹配项
        1. 0: 提取随机一个匹配项
        1. -1:提取所有匹配项
        1. 不给值

12.接口性能测试

方向

  • 1.客户端性能测试
    • app
    • Web端
      • 没必要做
  • 2.服务器端性能测试(一般指的是)
    • 1.对后端接口进行性能测试
      • Jmeter
    • 2.对整个后端系统
      • LR//LoadRun

分类

  • 1.负载测试
  • 2.压力测试
  • 3.并发测试
  • 4.稳定性测试

步骤

  • 1.拿到性能指标/需求文档

  • 2.手工熟悉被测项目

  1. 分析某性能指标

\4. 性能测试计划、测试方案

\5. 搭建性能测试环境

\6. 测试用例、测试数据

\7. 根据该性能指标搭建性能场景 //Jmeter 场景/脚本

\8. 运行性能场景

\9. 分析性能场景的运行结果

如果实际结果达到预期结果(性能指标中的该指标)!

后面步骤不用做啦!

\10. 定位性能瓶颈的原因

\11. 解决性能瓶颈

tips:

  • 用户定义的变量

  • foreach请求

  • 变量前缀

  • csv文件传输

  • json数据---csv传输

    • Content-Type-------------application/json
  • 利用函数助手造数据

  • 连接数据库

    • JDBC Connection Configurantion
posted @   代码世界faq  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示