主流接口测试框架对比

公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。

需求

1、接口编写方便。
2、方便调试接口。
3、支持数据初始化。
4、生成测试报告。
5、支持参数化。


### robot framework

优点

  • 关键字驱动,自定义用户关键字。

  • 支持测试日志和报告生成。

  • 支持系统关键字开发,可扩展性好。

  • 支持数据库操作。

缺点

  • 接口测试用例写起来不简洁。

  • 需要掌握特定语法。

 

*** Settings ***
Library    RequestsLibrary
Library    Collections*** Test Cases ***
test_get_event_list    # 查询发布会(GET请求)${payload}=    Create Dictionary    eid=1Create Session    event    http://127.0.0.1:8000/api${r}=    Get Request    event    /get_event_list/    params=${payload}Should Be Equal As Strings    ${r.status_code}    200log    ${r.json()}${dict}    Set variable    ${r.json()}#断言结果${msg}    Get From Dictionary    ${dict}   messageShould Be Equal    ${msg}    success${sta}    Get From Dictionary    ${dict}    status${status}    Evaluate    int(200)Should Be Equal    ${sta}    ${status}

结果:不考虑,没人愿意这么写接口用例。


###JMeter


优点

  • 支持参数化

  • 不需要写代码

缺点

  • 创建接口用例效率不高。

  • 不能生成查看每一个接口执行情况的测试报告。

总结:不考虑,接口编写不方便,最主要是不能生成测试报告,如果做接口性能的话可以考虑。


###HttpRunner

 

优点:

  • 基于YAML/JSON格式,专注于接口本身的编写。

  • 接口编写简单

  • 生成测试报告

  • 接口录制功能。

缺点:

  • 没有编辑器插件对语法校验,容易出错。

  • 官方文档没有详细的说明。

  • 扩展不方便。

[{"config": {"name": "testcase description","variables": [],"request": {"base_url": "http://127.0.0.1:5000","headers": {"User-Agent": "python-requests/2.18.4"}}}},{"test": {"name": "test case name","request": {"url": "/api/get-token","headers": {"device_sn": "FwgRiO7CNA50DSU","user_agent": "iOS/10.3","os_platform": "ios","app_version": "2.8.6","Content-Type": "application/json"},"method": "POST","date": {"sign": "958a05393efef0ac7c0fb80a7eac45e24fd40c27"}},"validate": [{"eq": ["status_code", 200]},{"eq": ["headers.Content-Type", "application/json"]},{"eq": ["content.success", true]},{"eq": ["content.token", "baNLX1zhFYP11Seb"]}]}}]

总结:可以考虑,至于接口数据的初始化可能需要单独处理。

doc: https://cn.httprunner.org/quickstart/


###gauge

BDD行为驱动测试框架。

优点:

  • 行为文件与脚本文件分离,本质上实现了数据驱动。

  • 功能强大灵活,本质上还用Python写接口用例。

  • 自动生成测试报告。

  • VS Code有支持插件

缺点:

  • 门槛略高,需要了解BDD的用法。

  • 需要会markdworn语法

行为描述文件:

 

## test post request* post "http://httpbin.org/post" interface     |key  | status_code|     |------|-----------|     |value1|200        |     |value2|200        |     |value3|200        |

测试脚本:

……@step("post <url> interface <table>")
def test_get_request(url, table):values = []status_codes = []for word in table.get_column_values_with_name("key"):values.append(word)for word in table.get_column_values_with_name("status_code"):status_codes.append(word)for i in range(len(values)):r = requests.post(url, data={"key": values[i]})result = r.json()assert r.status_code == int(status_codes[i])

总结:推荐使用,BDD有一定门槛,看测试人员的学些能力和接受速度。

doc: https://docs.gauge.org/latest/writing-specifications.html#special-parameter-csv


###Unittest+Request+HTMLRunner

利用现有的框架和库自己定制。

优点:

  • 足够灵活强大: 分层测试、数据驱动、测试报告,集成CI...

缺点:

  • 有一定的学习成本

数据文件:

{"test_case1": {"key": "value1","status_code": 200},"test_case2": {"key": "value2","status_code": 200},"test_case3": {"key": "value3","status_code": 200},"test_case4": {"key": "value4","status_code": 200}}

测试用例:

import requests
import unittest
from ddt import ddt, file_data@ddtclass InterfaceTest(unittest.TestCase):def setUp(self):self.url = "http://httpbin.org/post"def tearDown(self):print(self.result)@file_data("./data/test_data_dict.json")def test_post_request(self, key, status_code):r = requests.post(self.url, data={"key": key})self.result = r.json()self.assertEqual(r.status_code, status_code)

总结:推荐使用,代码相对简单,功能足够灵活。

 
我花了两天时间整理这些框架,其实重点就是了解HttpRunner 和 gauge 。
yg
HttpRunner 没有编辑器插件,本身就是一个YAML/JSON配置文件,所以配置写错了,但只要是合法的YAML/JSON格式,也看不出来,只有运行的过后才知道。就像你用记事本写代码一样,只有运行了才知道代码有没有写错。另外,扩展起来也不是特别方便,单独用python实现一些函数:在json文件中```{"device_sn": "${gen_random_string(15)}"}```以这样的方式引用```gen_random_string()``` 函数。gauge我已经分享过两篇基础文章了,虽然用BDD拿来做接口理念不搭,但并不是不可以,唯一的缺点是用BDD来描述接口行为不合适,其他的都没毛病,可以参数化,断言写起来也简单,测试报告也漂亮,本质上还是用Python实现一些功能,所以非常灵活。unittest + requests + HTMLTestRunner是我最熟悉的方案,几乎没什么短板。以前通过这种方案写过很多测试用例,这次把ddt加上似乎更完美了。

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

 

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

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

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

相关文章

亿道三防手持机丨安卓加固手持终端丨手持机PDA丨货物出入库

出入库管理是现代物流系统中的重要环节&#xff0c;涉及到货物的接收、分发、存储和追踪等方面。然而&#xff0c;在复杂的仓库环境中&#xff0c;传统的管理方法面临着很多困难和挑战&#xff0c;如手写记录容易出错、数据处理繁琐等。为了提高出入库管理的效率和准确性&#…

【新手适用】手把手教你从零开始实现一个基于Pytorch的卷积神经网络CNN一: 创建model模块和加载数据集

教程&#xff1a;j从零开始实现一个基于Pytorch的卷积神经网络 - 知乎 目录 网络结构 1 初始化 2 前向传播forward函数 2.1 forward函数定义 2.2 view函数和size函数 如何获取channels&#xff1f; 如何获取batchsize&#xff1f; 2.3 forward实现 2.4 main方法调用 模…

企业微信变更主体对用户有影响吗?

企业微信变更主体有什么作用&#xff1f;现在很多公司都用企业微信来加客户&#xff0c;有时候辛辛苦苦积累了很多客户&#xff0c;但是公司却因为各种各样的原因需要注销&#xff0c;那么就需要通过企业微信变更主体的方法&#xff0c;把企业微信绑定的公司更改为最新的。企业…

Java后端八股------消息中间件篇

自动确认没收到&#xff0c;实现重复消费问题&#xff0c;可以用业务唯一标识来确定业务是否被消费。 TTL也就是超时时间&#xff0c;一般去dead letter的时间为min(消息的ttl,queue的ttl)。 acksall设置是最安全的&#xff0c;但是效率太低了&#xff0c;实际的生…

鲜花销售小程序|基于微信小程序的鲜花销售系统设计与实现(源码+数据库+文档)

鲜花销售小程序目录 目录 基于微信小程序的鲜花销售系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1前台功能模块 2、后台功能模块 1、管理员功能模块 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、…

【io.net】问题汇总

【io.net】问题汇总 大家最近挖挖的如火如荼&#xff0c;可是不论是社区活动积分和参与挖矿积分&#xff0c;大家遇到了很多类似问题&#xff0c;重复解决。 因此我这里整理了一下常见的相关问题&#xff0c;大家可以一站式找到解决方案。解决方案主要分为运营和挖矿两个两面…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

如何解决由触发器导致 MySQL 内存溢出?

由触发器导致得 OOM 案例分析过程和解决方式。 作者&#xff1a;龚唐杰&#xff0c;爱可生 DBA 团队成员&#xff0c;主要负责 MySQL 技术支持&#xff0c;擅长 MySQL、PG、国产数据库。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编…

苹果cms模板保护设置,防止被扒

苹果cms模板保护设置&#xff0c;防止被扒 如今互联网时代&#xff0c;网站模板前端被扒是常有的事&#xff0c;如何防止模板数据被扒&#xff1f; 保护设置方法&#xff1a; 登录宝塔 找到安装模板的网站 设置禁止访问文件 方法参考截图后缀填&#xff1a;php|html 目录填&a…

OA系统中的九大常用审批场景,你都晓得吗?

Hi&#xff0c;我是贝格前端工场&#xff0c;今天继续来剖析OA的功能&#xff0c;这次重点分析审批功能&#xff0c;欢迎老铁们点赞评论转发。 一、OA的审批功能和流程 OA的审批功能是指在办公自动化系统中&#xff0c;通过电子化的方式实现对各种申请、请求或业务流程的审批管…

项目管理工具及模板(甘特图、OKR周报、任务管理、头脑风暴等)

项目管理常用模板大全&#xff1a; 1. 项目组OKR周报 2. 项目组传统周报工作法 3. 项目甘特图 4. 团队名单 5. 招聘跟进表 6. 出勤统计 7. 年度工作日历 8. 项目工作年计划 9. 版本排期 10. 项目组任务管理 11. 项目规划模板 12. 产品分析报告 13. 头脑风暴 信息化项目建设全套…

阻塞队列学习

1、什么是阻塞队列&#xff1f; 顾名思义&#xff0c;就是支持阻塞的队列&#xff0c;相比于其他的队列&#xff0c;阻塞队列支持以下特性&#xff1a; 队列为空的时候&#xff0c;获取元素的线程会等待队列变为非空。队列为满的时候&#xff0c;存储元素的线程会等待队列可以…

Python 单元测试

本篇为Python的单元测试的方法及示例 目录 概念 结果 示例 对函数进行测试 创建函数文件 创建测试文件 测试结果 对类进行测试 创建待测试类 创建测试文件 文档测试 创建函数 进行测试 总结 概念 用来对一个函数、一个类或者一个模块来进行正确性校验工作 结果 …

提取B站视频教程详情

提取B站视频教程详情 背景 B站这个视频列表是真的体验感太差了,有时候想把章节复制下来,再对应的章节下面做笔记,实在是太难搞了,于是就有了这篇文文章 根据关键字获取视频id Test public void list() {String url "https://api.bilibili.com/x/web-interface/wbi/sea…

虚拟机(KVM)克隆

当需要批量部署虚拟机时&#xff0c;可以使用克隆虚拟机的方式来进行。 使用图形界面来克隆虚拟机。 [rootzhoujunru_node1 zhou]# virsh list --allId Name State ------------------------------ vm01 shut off- vm01-clone shut off克隆完成。

Django入门 整体流程跑通

Django学习笔记 一、Django整体流程跑通 1.1安装 pip install django //安装 import django //在python环境中导入django django.get_version() //获取版本号&#xff0c;如果能获取到&#xff0c;说明安装成功Django目录结构 Python310-Scripts\django-admi…

Centos7 安装mongodb 7.0

官方手册参考&#xff1a; https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/ Mongodb支持的版本 安装 MongoDB 社区版 按照以下步骤使用包管理器安装 MongoDB Community Edition yum。 配置包管理系统 ( yum) 创建一个/etc/yum.repos.d/mongodb-o…

容量治理三板斧:扩容、限流与降级

前言 随着现代软件系统日益复杂和用户规模的不断增长&#xff0c;分布式架构成为了保持系统高可用性与高性能的标准解决方案。然而&#xff0c;随之而来的是对系统容量治理的新挑战。在这样的背景下&#xff0c;容量治理成为了分布式系统设计和运维中不可或缺的一环。要确保系…

Orange3数据预处理(转换器组件)

该组件接收数据&#xff0c;然后重新应用之前在模板数据上执行的转换。 这些转换包括选择变量的子集以及从数据中出现的其他变量计算新的变量&#xff0c; 例如&#xff0c;离散化、特征构建、主成分分析&#xff08;PCA&#xff09;等。 在Orange3中&#xff0c;描述的这个组件…

初窥机器学习

人工智能 近几年来&#xff0c;人工智能&#xff08;AI&#xff09;已成为家喻户晓的术语&#xff0c;我们在游戏、电影&#xff08;还记得J.A.R.V.I.S吗&#xff1f;&#xff09;和书籍中经常看到它的提及和描绘&#xff0c;但人工智能究竟是什么呢&#xff1f; 人工智能简单…