当前位置: 首页 > 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;要成功进行数字化…...

算法与数据结构-Trie树

文章目录 什么是“Trie 树”&#xff1f;如何实现一棵 Trie 树&#xff1f;Trie 树真的很耗内存吗&#xff1f;Trie 树与散列表、红黑树的比较 什么是“Trie 树”&#xff1f; Trie 树&#xff0c;也叫“字典树”。顾名思义&#xff0c;它是一个树形结构。它是一种专门处理字符…...

语音助手开发小记(2023.9.25)

通道问题 在使用函数swr_alloc_set_opts给SwrContext传递输入输出的音频参数时&#xff0c;需要设置通道&#xff0c;这里通道为2&#xff0c;但是通道布局不能传递2.比如AV_CH_LAYOUT_STEREO 实际值为3 如果要计算通道布局的通道数使用函数av_get_channel_layout_nb_channels…...

FastestDet---模型训练

代码:https://github.com/dog-qiuqiu/FastestDet 一、构造数据集 数据集格式YOLO相同,每张图片对应一个txt标签文件。标签格式:“category cx cy wh”,category为类别id,cx, cy为归一化标签框中心点的坐标,w, h为归一化标签框的宽度和高度, .txt标签文件内容示例如下: 0…...

基于SpringBoot的医院管理系统

目录 前言 一、技术栈 二、系统功能介绍 病床信息管理 药房信息管理 个人中心管理 药房信息 病床类别 科室信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介…...

java图片转pdf ,pdf 导出

pom引入jar <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency> 转pdf方法 /*** 使用pdfbox将jpg转成pdf** throws IOException IOException*/pu…...

掌握Go的运行时:从编译到执行

目录 一、Go运行编译简介Go语言的目标和设计哲学运行时环境编译过程小结 二、执行环境操作系统与硬件层系统调用&#xff08;Syscalls&#xff09;虚拟内存 Go运行时&#xff08;Runtime&#xff09;Goroutine调度器内存管理和垃圾收集网络I/O代码示例&#xff1a;Go运行时调度…...

打造香港最安全便捷的银行,众安银行发布首份技术白皮书

作者&#xff1a;林海宾&李龙 作为香港金融科技的代表&#xff0c;香港虚拟银行通过科技驱动&#xff0c;为客户提供了安全、便捷、普惠的金融服务。在八间持牌的虚拟银行中&#xff0c;众安银行目前在用户数量、存款、资产和收入规模上均处于领先水平。最快120秒线上开户…...

Spring实现简单的Bean容器

1.BeanDefinition&#xff0c;用于定义 Bean 实例化信息&#xff0c;现在的实现是以一个 Object 存放对象 public class BeanDefinition {/*** bean对象*/private Object bean;/*** 存放 &#xff08;定义&#xff09;Bean 对象*/public BeanDefinition(Object bean) {this.bea…...

Python15题day13

③continue的好处 break是跳出循环体&#xff0c;continue是跳过continue语句后面的代码块&#xff0c;循环并不停止 题目要求: 使用input函数接受用户的输入&#xff0c;如果用户输入的数值小于等于10&#xff0c;则判断是奇数还是偶数如果数值大于10&#xff0c;则输出“输入…...

聊聊并发编程——多线程之AQS

目录 队列同步器&#xff08;AQS&#xff09; 独占锁示例 AQS之同步队列结构 解析AQS实现 队列同步器&#xff08;AQS&#xff09; 队列同步器AbstractQueuedSynchronizer&#xff08;以下简称同步器&#xff09;&#xff0c;是用来构建锁或者其他同步组 件的基础框架&…...

临沂网站优化哪家好/产品质量推广营销语

"whats" 是 "what is" 的缩写,表示"什么是"的意思,常用来询问对方关于某些事物的细节或信息。例如: "Whats your name?" (你叫什么名字?)...

做网站 报价/百度推广首页

关于绘图颜色1R语言绘图之 颜色 grDevice 包- colorRamp() 和 colorRampPalette()- 颜色名字可使用 colors() 获取 RColorBrewer 包- 三类调色板&#xff1a;sequential&#xff1a;从一个极端渐变到另一个极端&#xff0c;适合用于呈现顺序数据2. diverging&#xff1a;两端鲜…...

平台营销型网站建设/上海网站快速排名优化

编辑距离 编辑距离&#xff08;Edit Distance&#xff09;&#xff0c;又称Levenshtein距离&#xff0c;是指两个字串之间&#xff0c;由一个转成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符&#xff0c;插入一个字符&#xff0c;删除一个字符。一般…...

自己做网站写网页一般用gbk还是gb2312还是utf8/网站友情链接的好处

2019独角兽企业重金招聘Python工程师标准>>> 1.创建索引 简单创建索引 PUT sfpay_log 创建成功 {"acknowledged": true,"shards_acknowledged": true,"index": "sfpay_log" } 指定创建参数&#xff1a;索引分片数量、副本数…...

规范门户网站建设/石家庄关键词排名首页

随着我国社会经济的快速发展&#xff0c;“十二五”期间政府继续大力推动“平安城市”、“智慧城市”建设&#xff0c;另外安防监控设备企业自身的创新拓展加之与IT企业、电信企业、家电企业的交融发展&#xff0c;极大地扩充了安防的内涵和应用领域。我国安防行业又将进入一个…...

解决方案网站/seo服务外包费用

1. 进入环境&#xff0c;下载附件 先说一下&#xff0c;这个题坑的一比&#xff0c;官方wp都是错的&#xff0c;人麻了 附件是一个压缩包&#xff0c;解压后里面是个txt文件&#xff0c;如图&#xff1a; 2. 问题分析 看起来像是base64之类的编码&#xff0c;尝试解码&#…...