白盒测试 接口测试 自动化测试

一、什么是白盒测试

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

二、如何去做白盒测试

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

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 划分就不太合理,会使一个商户的所有数据都在同一张表;
  • 分库分表后的查询:插入和取出逻辑一致;
  • 关注性能:不能比分之前差;

2023最新Jmeter接口测试从入门到精通(全套项目实战教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python编程基础:数据类型和运算符解析

想要学习Python编程语言?本文将为您介绍Python中常见的数据类型和运算符,为您打下坚实的编程基础。了解不同的数据类型和运算符,掌握它们之间的配合方式,让您能够更轻松地进行数据处理和计算任务。无论您是初学者还是有一定经验的…

电能量数据采集终端是电表采集器吗?

随着科技的发展和能源管理的日益精细化,电能量数据采集终端——电表采集器在保障电力系统稳定运行、实现节能减排等方面发挥着越来越重要的作用。下面,小编来为大家全面介绍电表采集器的功能、应用场景及其在我国能源领域的价值。 一、电表采集器的定义与…

第二十章Java博客

如果一次只完成一件事情,很容易实现。但现实生活中,很多事情都是同时进行的。Java中为了模拟这种状态,引入了线程机制。简单地说,当程序同时完成多件事情时,就是所谓的多线程。多线程应用相当广泛,使用多线…

【Java学习笔记】 74 - 本章作业

1.验证电子邮件格式是否合法 规定电子邮件规则为 1.只能有一个 2. 前面是用户名,可以是a-z A-Z 0-9 _ - 字符 3. 后面是域名,并且域名只能是英文字母,比如sohu.com或者tsinghua.org.cn 4.写出对应的正则表达式,验证输入的字符串是否为满…

浏览器触发下载Excel文件-Java实现

目录 1:引入maven 2:代码实现 3.导出通讯录信息到Excel文件 4.生成并下载Excel文件部分解释 1:引入maven 添加依赖:首先,在你的项目中添加EasyExcel库的依赖。你可以在项目的构建文件(如Maven的pom.xml)中添加以下依赖项:<dependency><groupId>com.alib…

Python基础语法之学习input()函数

Python基础语法之学习input函数 前言一、代码二、效果 前言 一、代码 # 默认是字符串类型 number input("请输入一个数字&#xff1a;") print("输入的数字是",number)二、效果 没有人可以阻止你成为自己想成为的人&#xff0c;只有你自己才能放弃梦想。…

【LeetCode刷题笔记】160.相交链表

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法知识专栏&#xff1a;算法分析&#x1f525; 给大家跳段街舞感谢…

Spring(2):Spring事务管理机制

Spring事务管理高层抽象主要包括3个接口&#xff0c;Spring的事务主要是由他们共同完成的&#xff1a; PlatformTransactionManager&#xff1a;事务管理器—主要用于平台相关事务的管理。TransactionDefinition&#xff1a; 事务定义信息(隔离、传播、超时、只读)—通过配置如…

LeetCode算法题解(动态规划)|LeetCode198. 打家劫舍、LeetCode213. 打家劫舍 II、LeetCode337. 打家劫舍 III

一、LeetCode198. 打家劫舍 题目链接&#xff1a;198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的…

哪里可了解低代码数据可视化开发平台?

如果想要提升办公协作效率&#xff0c;可以用什么样的平台助力实现这一目标&#xff1f;其实&#xff0c;随着市场竞争的日益加剧&#xff0c;低代码技术平台的应用价值也逐渐凸显出来&#xff0c;其可视化、易操作、灵活便利等优势特点&#xff0c;是很多中大型企业倾向于使用…

Nature子刊最新研究:Hi-C宏基因组揭示土壤-噬菌体-宿主相互作用

土壤中有大量的噬菌体。然而&#xff0c;大多数宿主未知&#xff0c;无法获得其基因组特征。2023年11月23日&#xff0c;最新发表于《Nature communications》期刊题为“Hi-C metagenome sequencing reveals soil phage–host interactions”的文章&#xff0c;通过高通量染色体…

2023 最新版navicat 下载与安装 步骤及演示 (图示版)

2023 最新版navicat 下载与安装 步骤演示 -图示版 1. 下载Navicat2 .安装navicat 160 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c…

时钟控制模块

时钟控制模块 锁相环电路简单的理解 https://www.bilibili.com/video/BV1yS4y1n7vV/?spm_id_from333.337.search-card.all.click&vd_source712cdb762d6632543eeeadb56271617a一 时钟是从哪里来的 时钟晶振&#xff08;32.768KHz&#xff09;供给RTC使用在IMX6ULL的T16和…

计算机图形学:直线的扫描转换算法解析与实现

直线的扫描转换&#xff1a; DDA算法&#xff1a; 推理&#xff1a; 在计算机显示图形时&#xff0c;由于显示计算机的分辨率是有限的所以我们在绘制图形时需要将图形从连续量转换成离散量才能完成图形的绘制&#xff0c;直线的扫描转换就是将连续量转换为离散量的过程。 对…

wsj0数据集原始文件.wv1.wv2转换成wav文件

文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 ​ 最近做语音分离实验需要用到wsj0-2mix数据集&#xff0c;但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后&#xff0c;由于原始的语音文件后缀是wv1或…

怎么在NAS里找照片?教你一招,精准定位

每次拍照 咔咔一顿拍 好多文档 咔咔一顿存 需要到的时候 却依稀只记得时间和部分关键词 那么怎么快速在NAS里精准定位 找到“命中注定”的它呢 嘿还真有 铁威马的Terra Search 精准搜索 快速定位 So easy&#xff01; 01 什么是Terra Search Terra Search 通过建立数据…

中国信通院发布《中国算力发展指数白皮书》(2023)

加gzh“大数据食铁兽”&#xff0c;回复“20231129”&#xff0c;获取材料完整版 导读 2023 年白皮书在 2022 年的基础上&#xff0c;加强了全球和我国算力发展的研究&#xff0c;客观评估我国整体、各省份及各城市现阶段的算力发展水平进一步给出我国算力二十强市榜单&…

网关路由器双栈配置中的IPv6相关选项解析

1、引言 讲知识往往是枯燥无味的&#xff0c;我们先从问题入手。家庭网关&#xff08;光猫&#xff09;、路由器是我们每个人或多或少都有所接触的2种设备。现在一般都是光纤入户&#xff0c;通常每个家庭配备一个光猫和一台家用路由器。 目前有许多网络服务已经提供了IPv6支…

ASUS(华硕) B760M-AYW WIFI D4_解决wifi不能使用

1、最近新购买了一套 diy电脑主机&#xff0c;选用的是 ASUS B760M-AYW WIFI D4电脑主板 win10 系统&#xff0c;到货后 发现右下角电脑图标处及网络适配器中 没有wifi选项 首先 在官网和旗舰店客服处&#xff0c;确认了 该主板 有集成wifi模块&#xff0c;鲨鱼鳍天线未安装…

Motion Plan之带动力学约束路径搜索

Motion Plan之搜索算法笔记 Motion Plan之基于采样的路径规划算法笔记 为什么要动力学规划&#xff1a; 前面几章介绍的路径规划&#xff0c;我们只是认为机器人是质点&#xff0c;这节课要说的就是&#xff0c;如何在考虑机器人的运动学模型下再去找一个安全可行的路径。考虑…