接口自动化测试很难掌握吗?

一. 什么是接口测试

接口测试是一种软件测试方法,用于验证不同软件组件之间的通信接口是否按预期工作。在接口测试中,测试人员会发送请求并检查接收到的响应,以确保接口在不同场景下都能正常工作。

就工具而言,常见的测试工具有Jmeter、Postman等。但这类工具往往更是做接口调试,对于做自动化以及测试集成却不够理想,因此便有了接口测试脚本,Java、Python、GO等语言都能支持。

然而语言总归是要学习成本的,因此陆续开始有了各类测试平台。为什么做测试平台?即将接口测试工具与接口测试脚本结合起来,实现像测试工具做接口调试一样简单,同时也能更好的支撑场景化测试、持续集成测试。

二. 接口测试的要素有哪些

接口测试其实无外乎就是将请求发送出去并验证响应结果。我们常做的接口测试主要是HTTP协议,针对这类接口,其请求数据,主要构成是:请求方法,请求地址,请求头,请求参数。

请求方法即是常见的GET/POST/PUT/DELETE等,根据接口文档来维护即可,只是定义了不同的请求方式而已。

至于请求地址,在做自动化测试时,又可以拆分为请求域名和请求路由,一般来说不同的环境域名会产生变化,但是路由一般是固定的,因为我们在做测试集成时为保证一个接口请求能在多个环境下执行,会选择将域名提出来放在环境中管理,而每个接口对应的域名通常可以根据路由的值来匹配即可。当然在微服务架构中,我们也可以给每个接口打上微服务的标识,而同一个微服务的接口无论在任何环境下其域名应当是一致的。因此除了通过路由匹配,我们也可以通过微服务标识来匹配,我称之为域名标识。

​此外,接口测试最重要的一点就是登录验证,通常会有四种方式。RestAPI最常见的是Session/Cookies和Token,OpenAPI一般是OAuth,最古老的鉴权则是HTTP Basic Authorization。对于Cookies和Token,一般我们都是通过放在请求头中发送出去,Session一般都是作为状态管理员来保存,通常编程语言的HTTP包会自带该方法,我们需要做的无外乎就是在登录后保存这个Session即可。至于OAuth,通常是需要加密成一个签名来做校验,我会在后面单独开一篇文章来介绍具体的使用。

对于请求数据,一般有三种方式,分别是:查询参数、路由参数以及请求体。查询参数即将参数转变为name=value的形式放在请求地址后面,以?号分隔多个参数中间加&符。路由参数往往是将参数值放在路由中,因此路由的值往往会是动态的,且路由数量也是不定的。至于请求体则比较好理解,一般常用的是表单和json串。当然古老的接口也有文本格式/XML格式等,另外就是文件上传的接口会是二进制流。

最最重要的一点就是,无论什么业务,接口测试一定要有断言,没有断言的接口测试用例就是在耍流氓。因此接口还有一个重大要素就是编写断言,断言的方式有很多,可以断言接口的响应数据,对于数据增删改的接口同样也可以去断言数据库的内容。

三. 如何用开源工具平台来做接口自动化测试

前面了解了接口自动化测试基本原理之后,我们用一款开源测试平台来快速的实现一个简单的接口自动化测试用例编写,接下来我们合并图文来介绍用法:

第一步:创建环境,如上所述,环境是接口测试用例为了能在多环境复用下不可缺少的一部分。环境创建完成后,还需要在环境下创建域名,域名匹配规则在上文介绍过,可以通过路由匹配和域名标识匹配。

新增环境

第二步:创建接口,我们在做自动化测试时,接口需要单独维护和管理,从而做到当接口发生变化时,只需要维护接口管理处的接口,所有引用该接口的用例都能随之变化,提升维护效率。在创建接口前,我们可以先创建接口所属的业务模块,同样的也方便后期快速找到接口。

而接口需要维护的数据也很简单,即前面所述的四大请求数据即可完成最基础的接口信息维护。当然为了后期记忆,我们最好还是给接口起个名字加个描述。同时,如果希望使用域名标识,则给接口绑定上一个微服务的标识即可。

新增接口

第三步:做好了接口维护,那就可以开始写接口用例了。接口用例其实不过是在接口上面再套一层壳罢了,之所以套上这层壳,主要目的还是为了做业务逻辑的验证,可能一个业务逻辑的验证需要执行多个接口,将多个接口加入到一个用例中,即可完成。如果多个接口之间数据有依赖关系,也可以通过一些关联参数的引用实现,这在后面的文章我会单独介绍。

新增用例

第四步:接口加进来后,直接调试。选择之前维护的环境执行即可。调试成功后,维护一下用例的基本信息,如给用例起个名字,写一段描述,点击保存,即完成一条接口自动化用例的编写。

调试用例

四. 总结

通过上述的几个步骤,不难看出,在使用平台后,完全可以抛弃代码编写接口测试脚本那一套方案,而且便捷程度不属于postman等工具。最大的好处是,用例保存服务端,我们可以任意编排用例去执行,从而验证不同的需求。只要用例数据设计得当,即便是换产品经理来验证,选好用例直接执行也能完成自动化测试。

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

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

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

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

相关文章

AI+招聘:ATS招聘系统让HR简历筛选精准度达95%!

一提起招聘过程,许多HR就会想到那堆叠如山的简历、让人眼花缭乱的招聘网站以及琐碎繁复的手动数据录入。据统计,平均每位HR每年要处理数百甚至上千份简历,耗费大量精力在初级筛选和跟进上。   市场调查机构近日发布的一份报告显示&#xff…

【深度学习】YOLO源码中的mAP计算代码的理解笔记(大部分代码逐行+基础解释)

提示:本篇博客是在阅读了YOLO源码中的mAP计算方法的代码后加上官方解释以及自己的debug调试理解每一步是怎么操作的。由于是大部分代码进行了逐行解释,所以篇幅过长。 文章目录 前言一、输入格式处理1.1 转换公式二、init:初始化2.1 iouv2.2 …

AND Sorting题解

AND Sorting题解 AND Sorting 详细 题解()题目原意解题思路这是代码🐬ZZZB. AND Sorting(我也是有底线的)AND Sorting 详细 题解() 洛谷 原题,CF 原题 洛谷 AC记录,CF AC记录 题目原意 给你一个由从 0 0 0 到 n − 1 n-1 n−1 的整数组成的排列 p p p (每个整数都…

如何在没有头文件的情况下调用动态库的类的私有成员函数

如何在没有头文件的情况下调用动态库的类成员函数 编写一个不存在虚函数的类测试代码 _ZN6CClass4showEv如何获取调用 源代码 https://github.com/TonyBeen/study/tree/master/dlopen 编写一个不存在虚函数的类 // class.h #pragma onceclass CClass { public:CClass();~CCla…

【Leetcode每日一题】 综合练习 - 电话号码的字母组合(难度⭐⭐)(75)

1. 题目解析 题目链接:电话号码的字母组合 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法设计思路 在解决这类问题时,我们需要认识到每个位置上的数字对应的字符集合是相互独立的&#…

什么是翘尾因素

在有关CPI 的分析文章和新闻稿件中,经常会出现“翘尾因素”或“翘尾影响” 等词汇,这是分析同比价格指数变动幅度时所特有的概念。那么什么是“翘尾因素” 或“翘尾影响”呢? 一、什么是翘尾因素 “翘尾因素”是指上年价格上涨(…

使用scrollIntoView滚动元素到可视区域

1. 实现效果 点击顶部标签栏,让对应的内容出现在可视区域: 2. scrollIntoView () scrollIntoView 是一个内置的 JavaScript 方法,用于将元素滚动到视口可见的位置。它通常用于用户界面中,以便用户能轻松看到特定的元素。此方…

perf 中的 cpu-cycles event 介绍

perf 中的 cpu-cycles event 介绍 cycles简介 cycles事件记录处理器核心执行的时钟周期数。每个时钟周期代表处理器内部时钟振荡器的一个周期。这个事件通常用于衡量处理器的执行速度,因为它直接反映了指令执行所需的时间。一个较高的cycles计数可能意味着代码执行…

JavaScript中指定大小分割数组的一种实现

今天分享一个使用JavaScript分割数组为多个自数组的方法实现。我使用它的场景如下: 给定一个数组 arr 和指定大小 fixed: const arr [{id: 1,name: name1},{id: 2,name: name2},{id: 3,name: name3},{id: 4,name: name4},{id: 5,name: name5},{id: 6,…

2024版本idea集成SpringBoot + Ai 手写一个chatgpt 【推荐】

题目:SpringBoot OpenAi 在这里获取key和url:获取免费key base-url为这两个: 话不多说直接来! 一、简介 Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计&#xff…

暗区突围pc资格 暗区突围pc端测试资格获取

《暗区突围》的诞生,仿佛在游戏界投下了一枚深水炸弹,它不仅仅是射击游戏的新标杆,更是对玩家策略思维、生存直觉与团队协作能力的一次全面考验。在这个精心构建的虚拟战场中,每一次踏入暗区,都是对未知的探索&#xf…

【练习4】

1.两数之和 暴力&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();vector<int> res(2, -1); // 初始化结果为-1for (int i 0; i < n; i) {int temp nums[i];for (int j i 1; j <…

Python 技巧:满意的逗号放置

当你在 Python 中添加或删除列表、字典或集合中的项目时&#xff0c;记住总是将所有行结尾加一个逗号。这是一个非常有用的技巧&#xff0c;可以帮助你避免一些常见的问题。 不确定我所说的什么&#xff1f;让我给你一个快速示例。假设你在代码中有一個名单列表&#xff1a; …

银行家算法简易实现

这里写目录标题 实验要求内容代码main.cppmyfunc.hmyfunc.cpp 运行结果与分析 实验要求 程序可以针对不同进程的请求进行判断&#xff0c;并决定是否满足其需求。算法程序需要设计合理的数据结构&#xff0c;对资源情况、进程相关数据进行存储。 内容 随机生成数据, 并校验数据…

做视频号小店,怎么找达人合作?这里有详细讲解

大家好&#xff0c;我是电商笨笨熊 做视频号小店是没有自然流量的&#xff0c;这点刚入驻的新玩家还不清楚&#xff1b; 因此很多老电商玩家们还想着继续拿其他平台动销自然流的玩法去做视频号&#xff1b; 只能说这种方式在视频号是完全行不通的&#xff0c;当下想要推广售…

设计模式2——原则篇:依赖倒转原则、单一职责原则、合成|聚合复用原则、开放-封闭原则、迪米特法则、里氏代换原则

设计模式2——设计原则篇 目录 一、依赖倒转原则 二、单一职责原则&#xff08;SRP&#xff09; 三、合成|聚合复用原则&#xff08;CARP&#xff09; 四、开放-封闭原则 五、迪米特法则&#xff08;LoD&#xff09; 六、里氏代换原则 七、接口隔离原则 八、总结 一、依赖…

Python-VBA函数之旅-setattr函数

目录 一、setattr函数的常见应用场景 二、setattr函数使用注意事项 三、如何用好setattr函数&#xff1f; 1、setattr函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://blog.csdn.net/ygb_1024?…

宏集Panorama SCADA软件获BACnet BTL认证

Panorama 获得BACnet BTL认证 建筑物的组件&#xff08;空调系统、照明传感器等&#xff09;能否使用共同通讯协议&#xff1f;这正是标准化 BACnet协议&#xff08;Building Automation and Control Networks&#xff09;所提供的功能。该协议旨在实现建筑物中各种设备和系统…

【TS】入门

创建项目 vscode自动编译ts 生成配置文件 tsc --init 然后发现终端也改变了&#xff1a;

SOCKET编程(3):相关结构体与函数

相关结构体与函数 sockaddr、sockaddr_in结构体 sockaddr和sockaddr_in详解 struct sockaddr共16字节&#xff0c;协议族(family)占2字节&#xff0c;IP地址和端口号在sa_data字符数组中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…