预备知识:深入理解接口测试!

实验简介

随着移动互联网甚至物联网的触角深入到人们生活的每个场景,每个角落,伴随而来的便是企业对其软件系统接口定义和研发,以便于进行数据传输和交换。由此导致目前企业急需大量专职接口测试工程师,因为接口测试天然具备自动化测试的可行性。所以本章内容专门就接口测试的各种存在形式给大家统一一下思路。

实验目的

(1)理解接口测试的含义与作用。

(2)理解代码级接口测试与协议级接口测试。

实验流程

  1. 关于接口测试

接口测试是一个比较宽泛的概念,近几年在国内也受到很多企业和测试从业者的追捧。但是很多人对接口测试的理解并不完整,事实上,我们无论通过何种方式运行一段程序,我们都必须依赖于调用该程序的接口才能实现。

比如,假设我们现在通过登录界面输入用户名和密码,点击登录按钮,最终该操作会被组装为一个HTTP请求进而发送给后台服务器端,后台服务器则会直接调用实现登录的接口,通过该接口来运行登录的实际代码。

那么在这个过程中,点击“登录”按钮是一个前端界面,所以我们如果通过该方法来观察其最终运行状态的,我们称之为界面级的黑盒测试。当然,我们也可以利用各种协议发送工具甚至用代码发送协议数据包给后台服务器进而观察其运行状态,此时,我们称之为协议级的接口测试。当然,我们也可以从代码层面直接调用该登录接口,那么此时我们称之为代码级的接口测试。最后,我们还可以直接深入到代码实现层,对代码的实现逻辑进行详细的测试,我们又称之为白盒测试或单元测试。

那么问题来了,这整个过程唯一的区别仅在于我们调用该登录代码的方式不一样,最终真正工作的,都是同样的一段代码,这个本质是绝对不会因为被调用的方式不同而发生一丁点的变化的。所以,任何一种调用的方式,都是在驱动程序运行而已,本质上来说,他们所做的事情没有任何区别,那么与其这样,我们为什么还要基于界面来测试登录的功能呢?我们完全可以基于其接口来进行测试,也可以达到同样的目的。比如我们可以通过发送HTTP请求的方式来测试登录功能,也可以直接调用登录代码来测试登录的功能。而且这样的做法都是可以自动化的,也是可以重用的。这也是为什么接口测试越来越受到重视的原因。

当然,也正是因为接口测试的所谓接口,是一个不太容易下定义的概念,所以我们千万不能盲目地认为协议级的测试就是接口测试,或者代码级的测试就是接口测试,这些理解都太过绝对。事实上,点击“登录”按钮,也可以被称之为一个接口,而与之对应的测试,我们则只能称其为界面级的接口测试了。所以请大家不用纠结于概念本身,更多地专注于从不同角度来完成对一个功能的测试,进而达到更全面的测试覆盖,尽早地找出Bug才是王道。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

2. 关于白盒测试

本书在前一章便将自动化测试从另外一个角度为大家进行了归类:代码级,协议级和界面级。本书所讲的白盒测试,统指代码级的测试。白盒测试是相对于黑盒测试而言的一种测试方法而已。是指我们可以基于系统的代码层逻辑来实现非常有针对性的测试,其参考文档主要是系统的详细设计文档,甚至可以精确到算法层实现,也可以向上提升到代码接口层。

白盒测试的核心就是利用测试驱动程序来测试被测程序(如某个函数或方法),所以白盒测试默认情况下自带自动化测试属性。从接口测试的定义来看,白盒测试自然也是通过调用其函数或方法的接口才能完成测试的执行。所以,本书后续所介绍的白盒测试,均是指基于代码级接口实现的测试。我们既关注接口规范,也关注代码的逻辑实现。

白盒测试既然天然就是属于自动化测试,我们当然应该重视白盒测试工作,将白盒测试,灰盒测试和黑盒测试有效地结合起来,各自完成不同的测试。比如我们可以重点利用白盒测试来完成对基本功能点的测试或部分性能测试,利用灰盒测试如协议级测试来完成可靠性,安全性,性能等测试工作,利用黑盒测试完成用户体验,兼容性方面的测试。通常情况下,这样的组合,会让我们的测试工作变得更加有效率。建议大家不妨在工作当中尝试这样的组合。

3. 代码级接口测试实施价值

代码级测试在预防软件产品的Bug方面其实是非常有效的。如果我们将其发挥好,从组织和技术层面做好协调和规范,其价值不容小觑。简单将其归结为如下几点:

(1)容易上手:只要对代码有一定概念,都可以轻易完成针对代码的专项测试。即使是一个没有受过正统的程序设计培训的人,也可以比较容易地按照标准流程和模板完成测试脚本的开发和测试数据的准备。

(2)容易实施:由于代码级测试工作直接使用测试代码来调用被测代码(通过其开放出来的接口进行调用),所以实施过程非常容易。我们只需要通过简单的判断就可以确定该项测试是通过还是失败。

(3)容易维护:通常情况下,在软件研发的过程中,一旦代码的接口确定,变动相对比较少,所以维护该测试脚本的工作量相对较低。测试脚本也相对比较稳定。

(4)容易见效:一旦我们将代码级测试工作实施起来,效果是非常明显的。马上可以看到测试脚本所产生的效果。

(5)容易定位:由于测试脚本直接调用被测试代码,所以一旦测试脚本无法运行通过,要定位该问题将会变得非常容易,同样的,修复该问题的成本也会更小。

(6)增强质量意识:事实上,很多企业的代码级测试工作会由测试团队和程序员团队共同负责,这将非常有助于程序员团队在编写代码时增强其代码的质量意识,为全员质量意识打下坚实的基础。

4. 代码级接口测试实施难题

那么,代码级测试既然这么有价值,为什么现在很多企业并没有真正将其实施得很好呢?为什么我们平时看到的绝大多数企业都只是在大谈特谈接口测试或界面级功能测试,或者是系统级性能测试,很少谈及代码级测试呢?当然,这当中有技术原因,但是更重要的,是人为的原因。笔者就这些年的经验,为大家总结一下为什么很难将代码级测试实施起来的一些原因:

(1)程序员不习惯:程序员们都非常习惯了直接上手写代码,并没有养成写代码之前或之后还要来写测试代码的习惯。每一个程序员,从开始写代码的第一天起,就从来没有人给他们传递过,什么叫质量意识,什么叫代码之美,什么叫敬畏之心。

(2)测试人员编码能力差:很多测试工程师在编码方面的能力的确不敢恭维,而且国内普遍存在这样一种奇怪的现象就是写不好代码的人才去做软件测试,可以相像,这样的软件测试,又能测试得有多深入?

(3)程序接口无规范:代码级测试能够实施好,必须需要一个规范的设计文档和接口说明,甚至清晰的算法实现。但是在很多研发团队中,能把客户的需求分析清晰,形成文档已经不易,根本没有时间来设计接口规范等这么细节的事情。所以程序编写的过程就是一个打补丁的过程,导致代码级测试工作很难实施。

(4)利用调试代替测试:程序员团队都会将自己的代码进行调试,进而尽早地发现程序中可能存在的Bug。这本身并没有错,错的是误认为这就是测试。事实上,调试是单次的,随机的行为,不具备可重用性,比如程序员每一次调试输入的数据可能都是随机的,而且这个数据很有可能没有很好地覆盖代码逻辑。而代码级测试则是严谨的,可重复运行的。无论程序怎么样修改,只要能够顺利通过代码级测试,则都是可以接受的,除非测试程序有Bug。

(5)项目时间紧迫:这应该是每一个团队都会提到的一个问题。由于时间紧迫,我们没有时间完整地测试;由于时间紧迫,我们没有时间写测试脚本;由于时间紧迫,我们只能全部时间都用来写代码?但是真的这样就可以提高效率吗?无数失败的或延期交付的项目经验告诉我们,如果没有很好地规范和严谨的流程,以及全员质量意识,即使项目赶出来了,客户也不一定认可。

(6)只关心用户看得到的东西:什么,代码还需要专门测试?我们只做黑盒测试,将用户的操作过程模拟好就行,这样用户就不会发现问题了。但是,很奇怪的是,往往用户什么问题都可以发现,我们千万不能抱有侥幸心理。

(7)测试程序复杂度高:有时候我们为了能够调用一个被测代码,我们需要准备大量的测试环境和测试数据,这个是代码级测试经常遇到的问题。就是测试驱动程序很难开发,导致代码级测试的门槛较高。还不如最后由黑盒测试来完成来得简单方便。事实上,这个问题我们需要辩证地来看待,针对测试环境非常复杂的情况,无论白盒,黑盒,可能测试起来都会比较复杂。问题始终都得解决,通常笔者会建议代码级测试更多关注在代码的算法层或逻辑实现层(即层次更低的代码)。而协议级或界面级的测试,更多关注于控制层代码。

事实上,笔者并不想鼓吹代码级测试多么完美,多么有价值,但是我们一定不能无视它的存在。如果在研发团队中,我们把代码级测试简单实施起来,迈出第一步,或许,我们会更容易理解并接受,进而认可其价值。简单来说,代码级测试的工作多做一些,系统测试的工作我们就可以少做一些,而且根据缺陷放大模型,把问题扼杀在摇篮中,更能看到其价值。

思考练习

(1)请理解单元测试与白盒测试,代码级接口测试与灰盒测试在作用上的区别。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

c++算法学习笔记 (8) 树与图部分

1.树与图的存储 &#xff08;1&#xff09;邻接矩阵 &#xff08;2&#xff09;邻接表 // 链式前向星模板&#xff08;数组模拟&#xff09; #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 100010, M …

【RS422】基于未来科技FT4232HL芯片的多波特率串口通信收发实现

功能简介 串行通信接口常常用于在计算机和低速外部设备之间传输数据。串口通信存在多种标准&#xff0c;以RS422为例&#xff0c;它将数据分成多个位&#xff0c;采用异步通信方式进行传输。   本文基于Xilinx VCU128 FPGA开发板&#xff0c;对RS422串口通信进行学习。   根…

家具工厂5G智能制造数字孪生可视化平台,推进家具行业数字化转型

家具制造5G智能制造工厂数字孪生可视化平台&#xff0c;推进家具行业数字化转型。随着科技的飞速发展&#xff0c;家具制造业正迎来一场前所未有的数字化转型。在这场家具制造业转型中&#xff0c;5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。 5G智能制造工厂数字孪…

MySQL语法分类 DQL(3)排序查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

降维算法之t-SNE (t-Distributed Stochastic Neighbor Embedding)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; t-SNE是一种用于探索高维数据结构的非线性降维技术。它特别适用于高维数据的可视化&#xff0c;因为它能够在低维空间中保留原始高维数据的局部结…

[WUSTCTF2020]朴实无华

查看robots.txt 找到/fAke_flagggg.php 显然这是个假的flag&#xff0c;但是我们在header处发现了fl4g.php 近来发现中文全部变成了乱码 插件转成utf8后正常显示 <?php header(Content-type:text/html;charsetutf-8); error_reporting(0); highlight_file(__file__);//leve…

Linux 系统调用函数fork、vfork、clone详解

文章目录 1 fork1.1 基本介绍1.2 fork实例1.2.1多个fork返回值1.2.2 C语言 fork与输出1.2.3 fork &#x1f4a3; 2 vfork2.1 基本介绍2.2 验证vfork共享内存 3 clone3.1 基本介绍3.2 clone使用 1 fork 1.1 基本介绍 #include <sys/types.h> #include <unistd.h>p…

PS学习-抠图-蒙版-冰块酒杯等透明物体

选中图&#xff0c;ctrlA 全选 ctrlC复制 创建一个蒙版图层 选中蒙版Alt 点击进入 ctrlv 复制 ctrli 反转 原图层 ctrldelete填充为白色 添加一个背景&#xff0c;这个方法通用 首选创建一个 拖到最底部 给它填充颜色 这个可能是我图片的原因。视频是这样做的

五子棋小游戏(sut实验报告)

实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏&#xff0c;显示游戏参数设置界面&#xff0c;用户输入参数后进入游戏界面&#xff0c;显示棋盘及双方博弈过程&#xff0c;游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏&#xff0c;可选择继续下…

Fiddler抓不到包

fiddler该设置的设置好之后&#xff0c;为啥就是抓不到包 以下都是以谷歌浏览器为例子 方法一&#xff1a; 将fidder证书导入到浏览器&#xff0c;设置搜索证书-->安全-->管理证书 这里可以看到将证书导入之后样子&#xff0c;名字为&#xff1a;DO_NOT_TRUST_Fiddler…

Linux操作系统裸机开发-环境搭建

一、配置SSH服务 1、下载安装ssh服务输入以下命令 sudo apt-get install nfs-kernel-server portmap2、建立一个供SSH服务使用的文件夹如以下命令 mkdir linux 3、完成前两步之后需要将其文件路径放到/etc/exports文件里输入以下命令&#xff1a; sudo vi /etc/esports 4.打…

线性回归 quickstart

构建一元一次方程 100个&#xff08;X, y &#xff09;&#xff0c;大概是’y3x4’ import numpy as npnp.random.seed(42) # to make this code example reproducible m 100 # number of instances X 2 * np.random.rand(m, 1) # column vector y 4 3 * X np.random…

最详细数据仓库项目实现:从0到1的电商数仓建设(数仓部分)

1、数仓 数据仓库是一个为数据分析而设计的企业级数据管理系统&#xff0c;它是一个系统&#xff0c;不是一个框架。可以独立运行的&#xff0c;不需要你参与&#xff0c;只要运行起来就可以自己运行。 数据仓库不是为了存储&#xff08;但是能存&#xff09;&#xff0c;而是…

创业板指399006行情数据API接口

# 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399006&order2Python示例 import requestsurl f"https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399…

EtherCAT 开源主站 IGH 在 linux 开发板的移植和伺服通信测试

手边有一套正点原子linux开发板imax6ul&#xff0c;一直在吃灰&#xff0c;周末业余时间无聊&#xff0c;把EtherCAT的开源IGH主站移植到开发板上玩玩儿&#xff0c;搞点事情做。顺便学习研究下EtherCAT总线协议及其对伺服驱动器的运动控制过程。实验很有意思&#xff0c;这里总…

【JDBC编程】 Java程序操作数据库

目录 一、数据库编程的必备条件 二、什么是JDBC&#xff1f; 三、JDBC的使用 1. 准备工作 2. 建立数据库连接 2.1 加载驱动程序 2.2 数据库连接池技术 3. 正式操作 四、JDBC的局限性与MyBatis的优势 一、数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0…

创业新手看过来!四招助你开启成功之旅

如果你每个月的薪资仅有几千块&#xff0c;还背负着债务的重担&#xff0c;家中的老少都期盼着你为他们撑起一片天&#xff0c;那么&#xff0c;你每日都可能为了如何打破这一困境而焦虑不安。不过&#xff0c;请稍安勿躁&#xff0c;今天我将为你提供四个建议&#xff0c;或许…

Transformer学习笔记(二)

一、文本嵌入层Embedding 1、作用&#xff1a; 无论是源文本嵌入还是目标文本嵌入&#xff0c;都是为了将文本中词汇的数字表示转变为向量表示&#xff0c;希望在这样的高维空间捕捉词汇间的关系。 二、位置编码器Positional Encoding 1、作用&#xff1a; 因为在Transformer…

解锁区块链游戏数据解决方案

作者&#xff1a;stellafootprint.network 随着区块链技术的日新月异&#xff0c;游戏行业正迎来一场革命&#xff0c;催生了区块链游戏的崛起。这一变革不仅为用户带来了全新的互动体验&#xff0c;也开辟了全新的盈利渠道。然而&#xff0c;在这一新兴领域&#xff0c;数据的…