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

【接口测试学习】白盒测试 接口测试 自动化测试

一、什么是白盒测试

  白盒测试是一种测试策略,这种策略允许我们检查程序的内部结构,对程序的逻辑结构进行检查,从中获取测试数据。白盒测试的对象基本是源程序,所以它又称为结构测试或逻辑驱动测试,白盒测试方法一般分为静态测试和动态测试。

二、如何去做白盒测试

  网上很多介绍白盒测试的文章会提到白盒测试的方法有:代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、路径覆盖等等。实际工作中的白盒测试并不是一上来就进行代码分析,我个人理解白盒测试应该从以下几个步骤来一步一步执行:

1、使用静态代码分析工具:Findbugs先找出一些简单的 bug

  • 操作空对象;
  • 数组访问越界;
  • 线程安全;
  • 字符串拼接;
  • 资源关闭;

2、diff评估影响范围,找边界和影响范围

  • 往上找,找它的调用链,找测试范围的边界;
  • 往下找,找它对下游的影响,找影响范围;

3、做单测,从上往下串

  • 不只是对改动方法做单测;
  • 还要找到它影响的点,从上到下往下串;

4、单独拉分支,梳理代码逻辑

  • checkpoint:根据checkpoint画出流程图/时序图,后面做接口测试的测试点/检查点;
  • bug:梳理代码时能够确定的问题;

5、接口测试

  • 基于第四步代码梳理的checkpoint来做接口测试;
  • 只做白盒测试不做接口测试,无法将代码的整个逻辑理顺;

6、debug再做一遍

  • 远程debug,将整个流程走一遍;

另外,对于接口测试和白盒测试,有些公司会引入代码覆盖率工具来衡量测试用例对代码的覆盖率,关于这一点我们将在其他文章中做详细介绍。

常用的代码覆盖率工具有:

  • Cobertura
  • EclEmma
  • Jacoco

三、接口测试的策略

  看过有些介绍接口测试的文档,核心思想就是根据接口文档,构造不同的参数组合,各种正常/异常的参数,然后组装请求发送服务端,最后进行返回结果的判断。这可能是很多测试同学认知的接口测试,我们不能说这么做是错的,但是,如果我们只是这样来做接口测试,对于线上系统来说有着极大的风险,因为随着业务的越来越复杂,很多测试点是接口文档所描述不到的。

  在上面描述白盒测试的步骤时我们说到会根据代码梳理的结果来画出流程图/时序图,然后根据时序图上的各个点来构造各种正常/异常的测试场景进行接口测试,这样才能更为完善的进行接口测试,减小线上的风险。

什么是时序图:

  时序图(Sequence Diagram),亦称为序列图、循序图,它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作,可以直观的传达系统内外之间的交互过程。我们可以简单的举个例子:

  • 程序从入口进来,先做了什么逻辑判断和处理;
  • 处理完成后进行入库,入库的数据是什么,关键的状态是什么;
  • 入库的数据哪些字段是我们要去检查的,状态是如何变更的;
  • 缓存的key是什么,缓存失败的策略又是什么;

如何设计接口测试

我们以下面这个微信扫描二维码支付为例来说明:

发起支付请求

  • 构造相同订单,基于并发或者多线程请求被测服务;
  • 超时;
  • 其他异常;

微信Server回调Pay接口生成预支付订单

  • 回调多次,是否能保证只生成一笔订单
  • 回调失败,内部又如何处理
  • 返回未知异常
  • 返回已知异常

调用微信下单接口提交预支付订单

  • 调用失败,如何处理
  • 预支付订单不存在
  • 预支付订单过期

确认订单

  • 密码正确
  • 密码不正确

返回订单详情

  • 订单不存在 

未收到支付状态

  • 查询不到结果
  • 查询到支付中/支付成功/支付失败

通过以上分析可以看出,为什么我们说做接口测试一定要先把代码的逻辑梳理清楚。如果我们只从接口文档的描述来做接口测试,我们对这些后台处理逻辑不清楚,那么这些测试点就会被遗漏,把所有风险都遗留到了线上。

四、接口自动化测试

1、分析功能及接口的优先级别

  在谈到自动化测试的时候,很多同学上来就说:我们使用 Python + UnitTest/Java + Junit,使用了什么什么技术,使用了什么什么框架。但是在我们考虑实施之前,首先应该明确自动化测试的目标,可以从以下几个维度考虑:

  • 功能维度
    • 支付
    • 代收
    • 代付
    • 开户...
    • 这些功能包括的接口有哪些,条用顺序是什么样的,具体的执行流程又是什么样的
  • 业务维度
    • 核心业务
  • 流量维度
    • 百万级别
    • 千万级别
  • 风险维度
    • 资金风险:出金、入金
  • 黄金流程维度
    • 核心业务流程

我们需要从以上五个方面去考虑需要做接口自动化测试的接口有哪些,然后就能够梳理出各接口及业务的的级别(P0/P1/P2)。

2、自动化策略

基于以上分析,我们就定义接口测试的策略,是要做单接口的还是模块级甚至是系统级的接口测试,又或者是这三者都要做。

  • 场景级 --> 单接口
  • 模块级 --> 只在模块内,预下单->提交订单->确认支付
  • 系统级 --> 整个业务流程->订单->支付->网关->回调

3、定义自动化达成目标

定义好自动化测试的策略后,然后需要定义自动化测试要达成的目标。例如:

  • 核心接口覆盖率 达到 50%
  • 黄金流程覆盖率, normal级别case, 场景级40%, 模块30%,系统 30%
  • 出金业务, 100% normal级覆盖
  • 入金, 60% normal级覆盖

4、框架建设

基本诉求

  • case规范要求
  • case量级, 预估, 2000多条.
  • 现状: 系统变更频繁程度, 业务接入的快慢程度, 当前资源投入情况. 变更的倾向性

实现

  • common + env --> 工具 + 环境
  • dao + client --> MySQL、Redis、Dubbo、Http
  • core(extension) --> 测试用例能力扩展,执行前,执行后,参数处理等
  • gen --> 自动生成代码
  • manager -- > case管理, 报告输出等等

case模板

  • 1.clean db,
  • 2.db init(user_info)|= redis init |= Hive, Hbase,
  • 3.mock client add
  • 4.build request param
  • 5.send request(Dubbo|Http,Thrift, RPC), RetMsg. 1000,2000,
    • sendRequestForSuccess()
  • 6.response assert,(errNo=200,)
  • 7.db assert|redis assert.
    • AccountDao().of().query(ColumnHolder.of().addColumn(order_id,111))
    • ColumnHolder.getColumn("amount");
    • Assert.assertEquals(ColumnHolder.getColumn("amount"),100)
    • AccountDaoAssert.assertEquals("amount","200")
  • 8.log assert(weak)
  • 9.db clean

五、分库分表关注点

  • 表的数量:2的幂指数;
  • 字段的选择:
    • 一般基于单个字段去分,也有少数情况是基于多个字段;
    • 一般基于索引字段;
    • 能够让请求均分到各张表,如:按 OrderID 划分比较合理,按 MerchID 划分就不太合理,会使一个商户的所有数据都在同一张表;
  • 分库分表后的查询:插入和取出逻辑一致;

相关文章:

【接口测试学习】白盒测试 接口测试 自动化测试

一、什么是白盒测试 白盒测试是一种测试策略,这种策略允许我们检查程序的内部结构,对程序的逻辑结构进行检查,从中获取测试数据。白盒测试的对象基本是源程序,所以它又称为结构测试或逻辑驱动测试,白盒测试方法一般分为…...

7.网络原理之TCP_IP(下)

文章目录 4.传输层重点协议4.1TCP协议4.1.1TCP协议段格式4.1.2TCP原理4.1.2.1确认应答机制 ACK(安全机制)4.1.2.2超时重传机制(安全机制)4.1.2.3连接管理机制(安全机制)4.1.2.4滑动窗口(效率机制…...

Docker Dockerfile解析

Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 官网:Dockerfile reference | Docker Docs 构建三步骤: 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容…...

浏览器从输入URL到页面展示这个过程中都经历了什么

一. URL输入 URL是统一资源定位符,用于定位互联网上的资源,俗称网址。我们在地址栏输入网址后敲下回车,浏览器会对输入的信息进行以下判断: 1. 检查输入的内容是否是一个合法的URL连接 2. 如果合法的话,则会判断URL…...

2023-09-22 monetdb-事务管理-乐观并发控制-记录

摘要: 2023-09-22 monetdb-事务管理-记录 相关文档: Transaction Management | MonetDB Docs https://en.wikipedia.org/wiki/Optimistic_concurrency_control monetdb事务管理: MonetDB/SQL 支持以 START TRANSACTION 标记并以 COMMIT 或 ROLLBACK 关闭的多语句事务方案。如果…...

蓝桥等考Python组别四级008

第一部分:选择题 1、Python L4 (15分) 字符“D”的ASCII码值比字符“F”的ASCII码值小( )。 1234正确答案:B 2、Python L4 (15分) 下面的Python变量名正…...

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…...

交换机之间配置手动|静态链路聚合

两台交换机&#xff0c;配置链路聚合&#xff1a; 1、禁止自动协商速率&#xff0c;配置固定速率 int G0/0/1 undo negotiation auto speed 100int G0/0/2 undo negotiation auto speed 100 2、配置eth-trunk int eth-trunk 1 mode manual | lacp-staticint G0/0/1 eth-trun…...

Shiro高级及SaaS-HRM的认证授权

Shiro在SpringBoot工程的应用 Apache Shiro是一个功能强大、灵活的&#xff0c;开源的安全框架。它可以干净利落地处理身份验证、授权、企业会话管理和加密。越来越多的企业使用Shiro作为项目的安全框架&#xff0c;保证项目的平稳运行。 在之前的讲解中只是单独的使用shiro&…...

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示&#xff1a; 2.输入“svn”,再按回车&#xff0c;如下图&#xff1a; 3.这我选择的是 Subversive,点击后面的“install”按钮&#xff0c;如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…...

C语言 cortex-A7核 UART总线 实验

一、C 1&#xff09;uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…...

不同走向地下管线的地质雷达响应特征分析

不同走向地下管线的地质雷达响应特征分析 前言 以PVC管线为例&#xff0c;建立不同走向&#xff08;水平倾斜、垂直倾斜、水平相邻&#xff09;的三维管线地质模型&#xff0c;进行三维地质雷达数据模拟&#xff0c;分析不同走向地下管线的地质雷达响应特征。 文章目录 不同…...

Nginx负载均衡详解

一、负载均衡介绍 1、负载均衡的定义 单体服务器解决不了并发量大的请求&#xff0c;所以&#xff0c;我们可以横向增加服务器的数量&#xff08;集群&#xff09;&#xff0c;然后将请求分发到各个服务器上&#xff0c;将原先请求集中到单个服务器上的情况改为将请求分发到多…...

基于Spring Boot的宠物咖啡馆平台的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 看护师信息管理 宠物寄养管理 健康状况管理 点单 宠物体验 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已…...

TYVJ P1026 犁田机器人

描述 Farmer John為了让自己从无穷无尽的犁田工作中解放出来&#xff0c;於是买了个新机器人帮助他犁田。这个机器人可以完成犁田的任务&#xff0c;可惜有一个小小的缺点&#xff1a;这个犁田机器人一次只能犁一个边的长度是整数的长方形的田地。 因為FJ的田地有树和其他障碍…...

软件测试面试经验分享,真实面试题

前言 本人普通本科计算机专业&#xff0c;做测试也有3年的时间了&#xff0c;讲下我的经历&#xff0c;我刚毕业就进了一个小自研薪资还不错&#xff0c;有10.5k&#xff08;个人觉得我很优秀&#xff09;&#xff0c;在里面呆了两年&#xff0c;积累了一些的经验和技能&#…...

计算机网络 - 链路层

计算机网络 - 链路层 计算机网络 - 链路层 基本问题 1. 封装成帧2. 透明传输3. 差错检测 信道分类 1. 广播信道2. 点对点信道 信道复用技术 1. 频分复用2. 时分复用3. 统计时分复用4. 波分复用5. 码分复用 CSMA/CD 协议PPP 协议MAC 地址局域网以太网交换机虚拟局域网 基本问题…...

5.wifi开发【智能家居:上】,开发准备:智能开关灯,智能采集温湿,智能调彩灯

一。wifi智能家居项目开发 【开发准备1】&#xff1a;继电器控制开发 1.智能开关 器件准备&#xff1a;wifi&#xff08;esp8266&#xff0c;使用CP2102&#xff09;继电器 结果&#xff1a; 2.继电器工作原理 &#xff08;1&#xff09;继电器是一种自动电气开关 &#xff…...

26523-2022 精制硫酸钴 随笔练习

声明 本文是学习GB-T 26523-2022 精制硫酸钴. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了精制硫酸钴的要求、试验方法、检验规则、标志、标签、包装、运输和贮存。 本文件适用于精制硫酸钴。 注&#xff1a;该产品主要用于…...

企业该如何选择数字化转型工具?_光点科技

随着科技的不断进步和数字化的浪潮席卷全球&#xff0c;企业数字化转型已经成为了保持竞争力和持续增长的关键因素之一。无论企业规模大小&#xff0c;数字化转型都可以提高效率、降低成本、改善客户体验&#xff0c;从而实现更好的业务结果。然而&#xff0c;要成功进行数字化…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...