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

news2024/11/19 14:25:54

实验简介

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

实验目的

(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.coloradmin.cn/o/1521230.html

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

相关文章

机试:偶数分解

题目描述: 代码示例: #include <bits/stdc.h> using namespace std; int main(){ // 算法思想1:遍历小于该偶数的所有素数,存入数组中,遍历数组找出两个数之和等于偶数的数int n;cout << "输入样例" << endl;cin >> n;int nums[n];int k …

Python内存管理与垃圾回收机制:深入理解与优化【第138篇—RESTful API】

Python内存管理与垃圾回收机制&#xff1a;深入理解与优化 在Python编程中&#xff0c;内存管理与垃圾回收机制是至关重要的主题。了解Python如何管理内存和处理垃圾回收对于编写高效、稳定的程序至关重要。本文将深入探讨Python中的内存管理和垃圾回收机制&#xff0c;包括内…

CSS 【详解】响应式布局(明天内容)

响应式布局&#xff1a; 同一页面在不同的屏幕上有不同的布局&#xff0c;即一套代码自适应不同的屏幕。 常用 单位&#xff1a; 像素&#xff08;px&#xff09;&#xff1a;像素是最常用的长度单位&#xff0c;它表示屏幕上的一个物理像素点。例如&#xff0c;width: 200px; …

Bean的作用域、Bean的自动装配、注解自动装配 (Spring学习笔记五)

1、Bean 的作用域 官网上显示有六种 1、Bean的作用域默认的是singleton&#xff08;单例模式的实现&#xff09; 也可以显示的设置&#xff08;单例模式的实现&#xff09; <!--用scope可以设置Bean的作用域--><bean id"user2" class"com.li.pojo.Us…

C++的类和对象(七):友元、内部类

目录 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 再次理解类和对象 友元 基本概念&#xff1a;友元提供了一种突破封装的方式&#xff0c;有时提供了便利&#xff0c;但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以友元不宜多用&…

simulink平面五杆机构运动学仿真

1、内容简介 略 68-可以交流、咨询、答疑 2、内容说明 simulink平面五杆机构运动学仿真 [ 摘 要 ] 以 MATLAB 程序设计语言为平台 , 以平面可调五杆机构为主要研究对象 , 给定机构的尺寸参数 , 列出所 要分析机构的闭环矢量方程 , 使用 MATLAB 软件中 SIMULINK 仿真工…

测试环境搭建整套大数据系统(十一:docker部署superset,无密码登录嵌入html,http改为https)

一&#xff1a;安装docker 参考文档 https://blog.csdn.net/weixin_43446246/article/details/136554243 二&#xff1a;安装superset 下载镜像。 拉取镜像&#xff08;docker pull amancevice/superset&#xff09; 查看镜像是否下载完成&#xff08;docker images&#xf…

精读《精通 console.log》

1 引言 本周精读的文章是 Mastering JS console.log like a Pro&#xff0c;一起来更全面的认识 console 吧&#xff01; 2 概述 & 精读 console 的功能主要在于控制台打印&#xff0c;它可以打印任何字符、对象、甚至 DOM 元素和系统信息&#xff0c;下面一一介绍。 c…

Vue 3 + TypeScript 项目中全局挂载并使用工具函数

一、proxy方式 1.封装日期选择工具函数&#xff1a; 在untils文件夹下新建index.ts,并导出工具函数 /*** 获取不同类型日期* param&#xff1a;类型 dateVal: 是否指定*/ export function getSystemDate(param: any, dateVal: any) {let systemDate dateVal ? new Date(da…

【NC223888】红色和紫色

题目 红色和紫色 博弈论&#xff0c;想得出来思路就简单&#xff0c;想不出来就难。一般使用猜测法。 思路 如果小红随意取一个格子涂色&#xff0c;那么小紫怎么涂色才是她的最优选择呢&#xff1f; 假设小紫只能选择小红涂色的格子的相邻格子或者是最近斜对角的一个格子涂色…

回归学术圈,何恺明MIT第一堂AI课

大家好&#xff0c;3月7日&#xff0c;麻省理工学院电气工程与计算机科学系副教授何恺明&#xff0c;迈上讲台&#xff0c;并成功地进行了他人生中的首堂教学课程。 第一堂课 课程官网&#xff1a;https://advances-in-vision.github.io/ 作为麻省理工学院&#xff08;MIT&am…

【算法篇】七大基于比较的排序算法精讲

目录 排序 1.直接插入排序 2.希尔排序 3.直接选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 排序 排序算法的稳定性&#xff1a;假设在待排序的序列中&#xff0c;有多个相同的关键字&#xff0c;经过排序后&#xff0c;这些关键字的先后顺序不发生改变&#…

动态规划8, 摆动序列,最长递增子序列,最长数对链

本次的题与动态规划7 的题有相似与共通之处&#xff0c;建议先去看 动态规划7&#xff1a;动态规划7 摆动序列 什么是摆动序列&#xff1f; 就像这种&#xff1a; 一个数&#xff0c;一个下降&#xff0c;上升&#xff0c;来回上升下降都可以叫摆动序列。 思路&#xff1a; …

政安晨:【深度学习处理实践】(八)—— 表示单词组的两种方法:集合和序列

咱们接着这个系列的上一篇文章继续&#xff1a; 政安晨&#xff1a;【深度学习处理实践】&#xff08;七&#xff09;—— 文本数据预处理https://blog.csdn.net/snowdenkeke/article/details/136697057 机器学习模型如何表示单个单词&#xff0c;这是一个相对没有争议的问题…

分析基于解析物理模型的E模式p沟道GaN高电子迁移率晶体管(H-FETs)

来源&#xff1a;Analyzing E-Mode p-Channel GaN H-FETs Using an Analytic Physics-Based Compact Mode&#xff08;TED 24年&#xff09; 摘要 随着近期对用于GaN互补技术集成电路&#xff08;ICs&#xff09;开发的p沟道GaN器件研究兴趣的激增&#xff0c;一套全面的模型…

算法笔记 连载中。。。

HashMap&#xff08;会根据key值自动排序&#xff09; HashMap<String, Integer> hash new HashMap<>() hash.put(15,18) hash.getOrDefault(ts, -1) //如果ts(key)存在&#xff0c;返回对应的value 否则返回-1 hashMap1.get(words1[i])1会报错&#xff0c;因…

快速高效地数据分析处理:QtiPlot for Mac中文直装版 兼容M

QtiPlot 是一个用于数据分析和可视化的跨平台科学应用程序。由于其多语言支持&#xff0c;QtiPlot 被积极用于世界各地学术机构的教学。许多研究科学家信任 QtiPlot 来分析他们的数据并发布他们的工作结果。来自各个科学领域和行业的数千名注册用户已经选择了 QtiPlot 来帮助他…

SQLiteC/C++接口详细介绍之sqlite3类(十五)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十四&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十六&#xff09; 47.sqlite3_set_authorizer 用法&#xff…

【Preprocessing数据预处理】之Scaler

在机器学习中&#xff0c;特征缩放是训练模型前数据预处理阶段的一个关键步骤。不同的缩放器被用来规范化或标准化特征。这里简要概述了您提到的几种缩放器&#xff1a; StandardScaler StandardScaler 通过去除均值并缩放至单位方差来标准化特征。这种缩放器假设特征分布是正…

Seata 2.x 系列【9】事务会话存储模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 存储模…