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

news2024/11/16 7:45:41

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

什么是接口?

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

如果模块请求由 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.coloradmin.cn/o/1035155.html

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

相关文章

[JAVAee]Spring MVC

目录 Spring MVC框架 MVC Spring MVC的功能 用户与程序的连接 RequestMapping 指定为Get请求 指定为Post请求 获取参数 单个参数 表单传递多个参数 传递对象 后端参数重命名(后端参数映射) 设置参数必传/非必传 获取JSON对象 获取URL中的参数 上传文件 获取…

FPGA project : DHT11

我犯下的错误: 1,在START状态跳转到REPLAY状态,sda会由高电平跳转到低电平。这个下降沿是传感器产生低电平响应而产生的。而不是传感器准备高电平结束而产生的。 REPLAYtoWAIT_2S ( state_c REPLAY ) && (nege && fl…

Java本地缓存框架Caffeine介绍

Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存。 缓存简介 (一)缓存对比 从横向对常用的缓存进行对比&a…

(本地安装clickhouse)执行 nstall/doinst.sh时报错: cp: 无法创建普通文件“/usr/bin/clickho

问题描述 在本地安装clickhouse时, 解压:tar -zxvf clickhouse-common-static-21.9.4.35.tgz -C ../module/ 再进入cd clickhouse-common-static-21.9.4.35/ 执行:install/doinst.sh 报错 报错信息和截图: rootbigdata1 click…

【带RL负载的全波桥式整流器】功能齐全的单相非控整流器(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Qt: 鼠标形状设置

设置全局鼠标形状 设置完毕后,整个APP的任何窗体,包括Dialog中的鼠标形状都会被修改为设定类型,某一个控件设定的鼠标形状将被替换。一般不建议使用 QCursor cursor;//创建鼠标对象 cursor.setShape(Qt::CursorShape::ClosedHandCursor);//…

scikit-learn机器学习算法封装

K近邻算法 K-最近邻(KNN)是一种有监督的机器学习算法,可用于解决分类和回归问题。它基于一个非常简单的想法,数据点的值由它周围的数据点决定。考虑的数据点数量由k值确定。因此,k值是算法的核心。 我们现在已经知道。…

【03】FISCOBCOS配置及使用控制台

官网文档https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html# 配置及使用控制台 第一步. 准备依赖 安装java (推荐使用java 14) # ubuntu系统安装java sudo apt install -y default-jdk#centos系统安装java sudo yu…

深入了解Java中的StringJoiner类

在Java编程中,字符串的拼接是一个常见的操作。Java提供了多种方法来实现字符串拼接,其中之一就是StringJoiner类。本文将详细介绍StringJoiner的用法和功能。 StringJoiner简介 StringJoiner是Java 8引入的一个用于拼接字符串的工具类。它允许我们以指定…

如何建立团队知识库管理系统,把分散信息有效整理?

对于我们广大企业管理者来说,知识库作为一个「统一的资料收集中心」,意义在于将分散的资料集中起来,统一处理,降低管理成本。 以常见的项目小组为例,如果你希望将小组内优秀的方法论和工作SOP文档在整个部门分享学习&a…

PID之Simulink仿真

昨天,在中南大学面试的老师,老师突然问到如何调PID,关于PID,我只知道一些基本概念,实际中并没有做过相关PID的项目,就连仿真也没搞过,所以今天就照着网上的教程做了PID的仿真,调PID的…

【李沐深度学习笔记】自动求导实现

课程地址和说明 自动求导实现p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 自动求导 # 创建变量 import torch x torch.arange(4, dtypetorch.float32) #只有浮点数才能求导 # 计算y关于x的梯度之前&#x…

VUE之模板解析(v-for)

v-for的多种写法 1. item in list 2. (item, index) in list 3. (item, name, index) in object forAliasRE 非贪婪模式匹配 ? 正则表达式默认都是贪婪匹配,添加?后将其变成非贪婪模式 由下面例子可以看出如果没有添加?正则…

虚拟机软件Parallels Desktop 18 mac中文新增功能(PD18虚拟机)

Parallels Desktop 18可以在 Mac 计算机上下载并安装 Windows 操作系统。在 Mac 与 Windows 之间无缝复制和粘贴文本或拖放对象。在 Mac 虚拟机中跨多个操作系统开发和测试。毫不费力地运行 Windows 应用程序,不会减慢 Mac 的运行速度。 Parallels Desktop 18 for M…

lv5 嵌入式开发-5 线程的创建和参数传递

目录 1 线程基础 2 Linux线程库 2.1 线程创建 – pthread_create 2.2 线程结束 – pthread_exit 2.3 线程查看tid函数 2.4 线程间参数传递(重点) 2.4.1 练习 2.5 线程查看命令(多线程) 2.6 线程回收 – pthread_join 2.…

【重新定义matlab强大系列十四】基于问题求解有/无约束非线性优化

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

玩转Mysql系列 - 第22篇:mysql索引原理详解

这是Mysql系列第22篇。 背景 使用mysql最多的就是查询,我们迫切的希望mysql能查询的更快一些,我们经常用到的查询有: 按照id查询唯一一条记录 按照某些个字段查询对应的记录 查找某个范围的所有记录(between and) …

如何解决python安装Crypto失败的问题

文章目录 准备安装相关链接准备 Python Crypto模块是一个第三方库,它提供了常见的加密算法和协议,比如AES、RSA、DES等。 PyCrypto 是加密工具包 Crypto 的 python 版,该模块实现了各种算法和协议的加密,提供了各种加密方式对应的算法的实现,包括单向加密、对称加密及公钥…

Linux(ubuntu)系统更新后不能进入图形界面

最近需要跑一个深度学习的程序,把许久没用的ubuntu系统调了出来,手欠的我更新了一下系统,结果再启动,系统就只停留在光标闪动那里,不能看到图形界面了。网上查了一下,说是因为更新后,显卡驱动没…

MySQL 8.0数据库主从搭建和问题处理

错误处理: 在从库通过start slave启动主从复制时出现报错 Last_IO_Error: error connecting to master slaveuser10.115.30.212:3306 - retry-time: 60 retries: 1 message: Authentication plugin caching_sha2_password reported error: Authentication require…