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

一、什么是白盒测试

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

二、如何去做白盒测试

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

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年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通


二、接口自动化项目实战 

三、Web自动化项目实战


四、App自动化项目实战 

五、一线大厂简历


六、测试开发DevOps体系 

七、常用自动化测试工具


八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

OpenGLES:glReadPixels()获取相机GLSurfaceView预览数据并保存

Android现行的Camera API2机制可以通过onImageAvailable(ImageReader reader)回调从底层获取到Jpeg、Yuv和Raw三种格式的Image,然后通过保存Image实现拍照功能,但是却并没有Api能直接在上层直接拿到实时预览的数据。 Android Camera预览的实现是上层下发…

cache教程1.LRU 缓存淘汰策略

这一节实现LRU算法,要理解明白其使用的数据结构。 FIFO/LFU/LRU 算法简介 Cache的缓存全部存储在内存中,内存是有限的,因此不可能无限制地添加数据。当占用内存超过了给定的内存大小时候,就需要从缓存中移除一条或多条数据了。我…

【机器学习】042_迁移学习

一、概述、定义 目的: 迁移学习的目的是将某个领域或任务上学习到的模式、知识应用到不同但相关的领域里,获取更多数据,而不必投入许多时间人力来进行数据的标注。 举例: 已经会下中国象棋,就可以类比着来学习国际…

shell脚本实战之mysql-物理备份实现周内备份策略

一.shell脚本要求 # 数据库备份脚本方式: 物理备份# 工具:xtrabackup过程# 需求1:不允许有任何的安在脚本中,# 需求2:在脚本中,不允许有任何的交互式代码容,使用日志记录# 需求3:在脚本中,不允许有任何输出# 需求4:每周为一个循环…

SSD数据在写入NAND之前为何要随机化?-part2

接part1介绍: 如何达到这个目的?业内常用的是对写入数据的数据进行随机化处理,这部分主要在SSD控制器中通过硬件实现。 上图b/c:在控制器芯片通过硬件方式实现随机化的读写流程,这个也是业内通常做法。随机化处理是在写…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口,效果如下所示: java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息,其中最重要的配置信息就是,当前使用的G1回收器…

机器学习算法性能评估常用指标总结

考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive&#xff0…

Java到底是什么?学了我们能做什么?

一、Java是什么? Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实…

软件设计中如何画各类图之九活动图:系统行为与流程的可视化描述

目录 1 前言2 活动图的符号及说明2.1 开始和结束节点2.2 活动(Action)2.3 控制流(Control Flow)2.4 决策节点(Decision Node)2.5 合并节点(Merge Node) 3 画活动图的步骤3.1 确定活动…

Vue3拖拽功能【VueDraggablePlus】

一、介绍 由于 Sortablejs 的 vue3 组件一直没有更新,已经跟 vue3 严重脱节,所以诞生了这个项目,这个组件是基于 Sortablejs 的,所以如果你想了解更多关于 Sortablejs 的信息,可以查看Sortablejs 官网。VueDraggableP…

WIFI直连(Wi-Fi P2P)

一、概述 Wifi peer-to-peer(也称Wifi-Direct)是Wifi联盟推出的一项基于原来WIfi技术的可以让设备与设备间直接连接的技术,使用户不需要借助局域网或者AP(Access Point)就可以进行一对一或一对多通信。这种技术的应用…