深入了解接口测试:方法、工具和关键考虑因素(一)

接口测试是软件测试中的一项重要工作,它涉及到系统与系统之间的交互点。接口可以是外部接口,也可以是内部接口,包括上层服务与下层服务接口以及同级接口。在接口测试中,我们需要确保接口能够按照预期的方式进行通信和交互,并且能够正确处理输入和输出数据。

什么是接口?

接口是具有特定输入和输出的一套逻辑处理单元,它不需要了解内部的实现逻辑,可以看作是黑盒处理逻辑。接口可以是外部系统与系统之间的交互点,也可以是系统内部不同子系统之间的交互点。

如果模块请求由 HTTP 改为 HTTPS,测试方案应该如何制定和修改?

首先,尝试使用 HTTP 和 HTTPS 分别进行登录。如果使用 HTTPS 可以正常登录,并且浏览器地址栏显示一个锁头图标,说明该网站已经部署了 SSL。如果 HTTP 和 HTTPS 都可以正常登录,进一步说明该网站没有设置强制使用 HTTPS 登录,或者没有设置 HTTP 自动跳转到 HTTPS。

如果使用 HTTP 登录后跳转到 HTTPS 页面,说明该网站已经部署了 SSL,并且设置了 HTTP 自动跳转到 HTTPS。
根据实际情况和需求,可以调整测试方案并相应地修改模块的请求方式。

常用的 HTTP 协议调试代理工具有哪些?详细说明抓取 HTTPS 协议的设置过程。

常用的 HTTP 协议调试代理工具包括 Fiddler、Charles、Postman 等。以下以 Fiddler 为例,详细说明抓取 HTTPS 协议的设置过程:

打开 Fiddler 工具,在菜单栏选择 “Tools”,然后选择 “Options”。

在 “Options” 窗口中,选择 “HTTPS” 选项卡,并勾选 “Capture HTTPS CONNECTs” 和 “Decrypt HTTPS traffic” 选项。

根据需要选择要解密的来源,可以选择 “All Processes” 或者手动添加需要解密的进程。

可选择是否忽略服务证书错误,根据测试需求进行设置。

完成以上设置后,可以在浏览器中设置代理地址为 “IP:8888”,然后安装 Fiddler 提供的证书,即可在浏览器中抓取 HTTPS 协议的数据流量。

接口产生的垃圾数据如何清理?

利用数据库操作进行数据的增删改查,通过造数据和数据清理来处理垃圾数据。

在测试用例的前置操作中,可以使用 setUp 方法进行数据准备。

在后置操作中,可以使用 tearDown 方法进行数据清理。

在执行测试前整库备份,测试完毕,备份还原(不推荐)

依赖第三方接口的处理方法是什么?

搭建一个模拟服务,以模拟第三方接口的返回数据。例如,可以使用 Moco 这样的开源框架来搭建模拟服务。搭建模拟服务需要熟悉相关工具和框架,并能够掌握如何模拟返回的数据、数据格式以及请求方式等。

利用一些模拟工具(如 JSON Server、EasyMock)来模拟第三方接口的数据返回,以尽可能减少对第三方数据接口的依赖。

测试数据应该放在哪里?

测试数据的存放位置可以根据实际情况和需求来决定。以下是一些常用的测试数据存放方法:

对于登录账户数据、注册账户数据、接口参数以及邮箱配置数据等不同类型的数据,可以根据其特点进行存放。例如,登录账户数据和注册账户数据可以使用配置文件(如 INI 文件)存放;接口参数可以使用 YAML、JSON、Excel 等格式进行存放。

对于一些需要多组测试参数的接口,可以采用参数化的方式进行数据存放。可以使用 YAML、文本、JSON、Excel 等文件来管理参数化数据。

对于需要反复使用的数据,例如订单状态数据,可以将其存放到数据库中,在每次数据初始化之后使用,并在使用完毕后进行清理。

对于少量的静态数据,如单个接口的测试数据,可以将其写入到脚本的开头部分,或者使用全局变量进行存储。

什么是数据驱动,如何进行参数化?

数据驱动是一种测试方法,通过将测试数据和测试逻辑分离,实现对测试数据的灵活管理和重复使用。参数化是数据驱动的一种常见方式,它通过在测试用例中引入参数,根据不同的参数生成多个测试用例。

在接口测试中,数据驱动和参数化的概念非常重要,可以提高测试效率和覆盖率。以下是一些常用的数据驱动和参数化的实现方式:

在 Python 的 unittest 框架中,可以使用 ddt 模块来实现数据驱动和参数化。通过使用 @ddt 和 @data 这两个装饰器,可以在测试用例中传入不同的参数,并生成对应的测试用例。

在 pytest 框架中,可以使用 @pytest.mark.parametrize 装饰器实现参数化。通过传入不同的参数组合,生成对应的多个测试用例。

如何处理下一个接口请求参数依赖上一个接口的返回数据?

将不同的接口封装为不同的函数或方法,让其返回所需的数据。使用一个中间变量来接收上一个接口返回的数据,并将其传递给下一个接口。可以使用全局变量或者测试类的属性来保存中间数据或者数据库等等。

对于单接口测试中,如果依赖接口只需要在测试开始执行一次,可以将依赖接口的请求放在类级别的前置方法中,并通过全局变量或者当前用例类的属性来传递依赖数据。例如,使用类属性 cls.token = data[‘token’] 来保存依赖的 token 数据。

对于单接口测试中,如果依赖接口需要在每个用例前执行,可以将依赖接口的请求放在方法级别的前置方法中,并通过用例对象的属性来传递依赖数据。例如,使用实例属性 self.order_id= res[‘id’] 来保存依赖的 ID 数据。

对于多接口的业务流测试,可以通过当前用例类的属性来传递下一个接口所需的依赖数据。例如,使用类属性 self.class.order_id = self._response.json()[‘data’][‘id’] 来传递下一个接口需要的数据。

如何处理依赖登录状态的接口?

对于需要 token 的登录接口,可以在登录后将 token 存储到一个 YAML、JSON 文件中,或者直接使用全局变量或测试类的属性进行保存。后续的请求可以从存储的位置获取 token 并使用。

对于需要 cookies 参数的接口,可以使用 requests.session() 创建一个会话对象,并在后续的请求中使用该会话对象进行自动关联 cookies。通过 s.get() 和 s.post() 方法发送请求,会话对象会自动关联 cookies。

接口测试的步骤有哪些?

发送接口请求:使用合适的工具或框架发送请求,并携带请求参数。

测试接口获取返回值:获取接口返回的数据,包括响应状态码、响应头和响应体等。

断言:根据预期结果,对接口返回的数据进行断言判断,验证实际结果是否符合预期。

如何测试依赖登录状态的接口?

在测试开始前先进行登录操作,获取有效的登录凭证(如 token 或 cookies)。

在每个需要登录状态的接口测试用例中,先进行登录操作,并获取登录凭证。

将获取的登录凭证保存在全局变量、测试类的属性或者配置文件中,以便在后续的请求中使用。

在发送请求时,将登录凭证作为请求参数或者请求头的一部分进行携带。

在接口返回结果中验证登录状态相关的信息,确保接口正确处理了登录状态。

解释什么是 SOAP?

SOAP代表简单对象访问协议(Simple Object Access Protocol),它是一种基于XML的协议,用于在计算机之间交换结构化信息。SOAP被设计用于不同的应用程序和操作系统之间的通信,它使用XML格式来定义消息的结构和内容,并使用HTTP、SMTP等协议进行消息的传输。SOAP通常用于Web服务之间的通信,通过SOAP协议,应用程序可以以标准的方式进行远程过程调用(RPC)。

解释什么是 REST API?

REST API是一组用于实现网络应用程序之间通信的功能集合。REST代表表现层状态转移(Representational State Transfer),它是一种基于HTTP协议的设计风格,被广泛应用于构建分布式系统和互联网应用。REST API使用HTTP方法(GET、POST、PUT、DELETE等)来实现对资源的访问和操作,并使用URL来定位资源。相比于SOAP等复杂的协议,REST API更加简单、轻量且易于理解,它已成为创建Web服务和移动应用程序的常用标准。

API测试发现的Bug类型是什么?

缺少或重复的功能:API未实现某些功能或存在重复的功能。

无法正常处理错误条件:API未能正确处理错误情况,如无效的输入、异常情况等。

可靠性:API在高负载、并发或异常网络情况下的表现不稳定或不可靠。

安全:API存在安全漏洞,如未经身份验证的访问、敏感数据泄露等。

未使用的标志:API中存在未使用或废弃的标志或参数。

未实现错误:API中存在未实现或未正确实现的功能。

错误处理不一致:API对不同的错误条件没有统一的处理方式或错误信息不一致。

性能:API在处理大数据量或高并发情况下性能下降或出现延迟。

多线程问题:API在多线程环境下出现数据竞争、同步问题等。

错误不正确:API返回的错误信息或状态码与预期结果不符。

你测试的接口属于哪一类?

测试的接口属于服务器接口,即基于HTTP协议的接口。这类接口通常是B/S架构的,由客户端(如浏览器)调用或模拟客户端调用服务器提供的请求接口,服务器完成处理并返回响应。例如,Web服务接口、HTTP接口、JMS接口、Hessian接口等都属于这一类别。

Cookie 保存在哪里?

Cookie可以保存在不同的位置,具体取决于是否设置了过期时间:

如果设置了过期时间,Cookie将保存在客户端的硬盘中,即存储在浏览器的Cookie文件中。

如果没有设置过期时间,Cookie将保存在客户端的内存中,即存储在浏览器的内存中。这种类型的Cookie通常称为会话Cookie,它只在浏览器会话期间有效,关闭浏览器后会被删除。

HTTP 有哪些请求方法?

GET:用于请求获取指定资源的表示。通过URL传递参数,通常用于获取数据。

POST:用于向指定资源提交数据,通常用于提交表单或进行资源创建。

PUT:用于向指定资源位置上传新的表示,通常用于资源的更新。

DELETE:用于请求删除指定的资源。

OPTIONS:用于获取目标资源所支持的通信选项。

HEAD:类似于GET请求,但只返回响应头部信息,不返回响应体。

PATCH:对资源进行部分修改。

接口自动化测试的流程?

需求分析:了解接口的功能和需求,明确测试的目标和范围。

用例设计:根据需求编写测试用例,包括正向测试、边界测试、异常测试等不同场景的测试用例。

脚本开发:使用合适的编程语言和测试框架编写自动化测试脚本,实现接口的请求和响应验证等功能。

测试执行:执行自动化测试脚本,发送接口请求并获取响应结果。

结果分析:对测试结果进行分析和比对,判断接口是否符合预期结果。

缺陷跟踪:如果发现接口存在缺陷,及时记录并跟踪缺陷,确保问题得到解决。

报告生成:生成测试报告,包括测试覆盖率、测试结果、缺陷统计等信息,供团队和管理层查阅。

接口测试用例的编写要点有哪些?

必填字段:测试请求参数的必填项和可选项。

合法性:验证输入和输出数据的合法性,包括合法的参数值、数据类型等。

边界:测试请求参数的边界值,例如最大值、最小值、临界值等。

容错能力:测试接口在大容量数据、频繁请求、重复请求等异常情况下的处理能力。

响应数据校验:对接口的响应数据进行断言和校验,验证返回结果是否符合预期。

逻辑校验:测试不同接口之间的逻辑关系,如某些请求需要按严格的先后顺序调用。

性能:进行接口的并发测试,逐步增加负载,分析系统的性能瓶颈点。

安全性:测试接口的安全性,如输入恶意字符、注入攻击、敏感信息泄露等。

异常处理:测试接口在各种异常情况下的处理能力,如网络异常、服务器错误等。

UI 级别测试和 API 测试之间的关键区别?

目标、方法、技术。

UI级别测试(User Interface Testing)关注于测试应用程序的用户界面,验证用户如何与应用程序进行交互,测试应用程序元素的外观和行为,例如按钮、表单、布局等。UI级别测试主要关注应用程序的外观和用户体验。

API测试(Application Programming Interface Testing)关注于测试应用程序接口,验证接口的功能、性能、可靠性等。API测试主要关注应用程序的功能和内部逻辑,独立于用户界面。API测试可以通过直接调用接口发送请求并验证响应结果来进行,无需依赖UI界面。

UI级别测试和API测试是在不同层面上进行的测试,UI级别测试更加关注应用程序的外观和用户交互,而API测试更加关注应用程序的功能和内部实现。

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

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

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

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

相关文章

【攻防世界-misc】can_has_stdio?

1.用记事本打开文件是这样子的, 这是一段BF(Brainfuck)编程语言代码,属于一种极简化的编程语言,用于演示计算机程序设计概念。这段代码包含了一些操作符,如">"表示指针向右移动,&q…

【C++破局】泛型编程|函数模板|类模板

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:c模板初阶知识点讲解 👉【C-C入门系列专栏】:博客文章专栏传送门 😄每日一言:花有重开日,人无再少年 目录 前言 泛型编程 函数模板 函数模…

用Java实现简易的图书管理系统(超详细)

目录 1.设计背景 2.设计思路 3.模块展示及代码演示 3.1 Book类的实现 3.2 BookList类的实现(书架) 3.3 异常类的实现(OperationException) 3.4 用户类的实现 3.5 操作接口的实现(定义规范) 3.6 操作类的具体实现 3.6.1 增加操作 3.6.2 查找操作 3.6.3 删除操作 3.6…

标签打印机打印标签时出现,数据处理过程中错误 无法设置项目 图片1的内容无法打印

环境: Win10专业版 NiceLabel Designer 10.1 问题描述: 标签打印机打印标签时出现,数据处理过程中错误 无法设置项目 图片1的内容无法打印 解决方案: 1.删除标签部分文字打印测试 还是一样(未解决) …

jenkins 参数构建

应用保存 [rootjenkins-node1 .ssh]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved i…

【嵌入式面试】2022年嵌入式经典面试题汇总(C语言)

📜作者:不想脱发的基兄 📺专栏:《嵌入式面试》 📣格言:不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 前言: 2022年秋招我…

C++之初始化列表详细剖析

一、初始化列表定义 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(mont…

OpenCV快速入门:图像分析——图像分割和图像修复

文章目录 前言一、图像分割1.1 漫水填充法1.1.1 漫水填充法原理1.1.2 漫水填充法实现步骤1.1.3 代码实现 1.2 分水岭法1.2.1 分水岭法原理1.2.2 分水岭法实现步骤1.2.3 代码实现 1.3 GrabCut法1.3.1 GrabCut法原理1.3.2 GrabCut法实现步骤1.3.3 代码实现 1.4 Mean-Shift法1.4.1…

多级缓存快速上手

哈喽~大家好,这篇来看看多级缓存。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏:【微服务】 🥉与这篇相关的文章: JAVA进程和线程JAVA进程和线程-CSDN博客Http…

不做机器视觉工程师,转行,转岗的建议与想法

正所谓外行看热闹,内行看门道。提前咨询前辈们,多问问,多看看。要做就做,一定要提前做好防范。 无论你是要转行或者是转岗,看你有没有本钱和试错成本 有些人,家庭好,可以一直去试错和从头再来。…

学习.NET验证模块FluentValidation的基本用法(续1:其它常见用法)

FluentValidation模块支持链式验证方法调用,也就是说,除了 RuleFor(r > r.UserName).NotEmpty()调用方式之外,还可以将对单个属性的多种验证函数以链式调用方式串接起来,比如UserName属性不能为空,长度在5~10之间&a…

浅谈 Guava 中的 ImmutableMap.of 方法的坑

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。 热门文章推荐&…

国自然项目基金撰写的隐藏技巧、范例分析及提交前的自我审查

目录 一、基金项目申请要求、重点及项目介绍 二、基金的撰写技巧 三、基金撰写的隐藏技巧 四、范例分析及提交前的自我审查 更多应用 基金项目申请需要进行跨学科的技术融合,申请人需要与不同领域结合,形成多学科交叉的研究。基金项目申请在新时期更…

由红黑树引出的HashMap扩容机制的思考

红黑树是什么? 三大特点: 根节点是黑色,叶节点是不存储数据的黑色空节点 任何相邻的两个节点不能同时为红色 任意节点到其可到达的节点间包含相同数量的黑色节点 联想:Java HashMap底层红黑树原理 HashMap基于哈希表Map接口实…

WordPress站点屏蔽过滤垃圾评论教程(Akismet反垃圾评论插件)

前段时间我的WordPress站点经常收到垃圾评论的轰炸,严重时一天会收到几十条垃圾评论。我这个小破站一没啥流量,二又不盈利,实在是不太理解为啥有人要这么执着地浪费资源在上面。 Akismet反垃圾评论插件 其实用了 Akismet 反垃圾评论插件后&a…

ARCore:在Android上构建令人惊叹的增强现实体验

ARCore:在Android上构建令人惊叹的增强现实体验 一、 AR 介绍1.1 AR技术简介1.2 AR技术原理1.3 AR技术应用领域 二、Google的增强现实平台ARCore2.1 ARCore简介2.2 ARCore API介绍2.3 ARCore API使用示例 三、总结 一、 AR 介绍 增强现实 Augmented Reality&#x…

An issue was found when checking AAR metadata

一、报错信息 An issue was found when checking AAR metadata:1. Dependency androidx.activity:activity:1.8.0 requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs.:app is currently compiled against …

关于elementui和ant design vue无法禁止浏览器自动填充问题

以and design vue 为例&#xff1a; 图标用来显隐账号密码 html&#xff1a; <a-form-model-item label"账号密码:" prop"password"><a-input v-if"passwordTab" ref"passwordInput" v-model"form.password" typ…

详解最长公共子序列问题(三种方法)

这里&#xff0c;为了更方便地解释&#xff0c;我以洛谷上的一道典型题目为例&#xff0c;为大家讲解处理最长公共子序列问题的几种常见方法。这道题目中规定了两个子序列的长度相等&#xff0c;如果遇到不等的情况&#xff0c;也只需要对长度稍作修改即可&#xff0c;算法思想…

qs-一个序列化和反序列化的JavaScript库

起因 一个业务场景中&#xff0c;最终得到一串字符"status[0]value1&status[1]value2" 通过解析&#xff0c;理应得到一个数组&#xff0c;却得到一个对象 于是展开问题排查 最终发现是qs.parse 这个地方出了问题 排查结果 qs解析这种带下标的字符串时&#xff…