接口测试框架对比

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

需求


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)

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

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

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

相关文章

端到端实现高精地图重建(TopoNet解读和横评)

论文出处 [2304.05277] Graph-based Topology Reasoning for Driving Scenes (arxiv.org)https://arxiv.org/abs/2304.05277 TopoNet TopoNet的目标是从车辆上安装的多视角摄像头获取图像&#xff0c;感知实体并推理出驾驶场景的拓扑关系&#xff0c;实现端到端预测&#xf…

【自动化测试】----Java的单元测试工具Junit5

目录 支持Java的最低版本为8在pom.xml添加依赖Junit提供的注解功能 断言 Assertion类提供的一些方法测试用例执行顺序 &#xff08;为了预防测试用例执行顺序错误&#xff09;参数化 &#xff08;假设登陆操作&#xff0c;用户名和密码很多&#xff0c;尽可能通过一个测试用例…

Java多线程--JDK5.0新增线程创建方式

文章目录 一、新增方式1&#xff1a;实现Callable接口&#xff08;1&#xff09;介绍&#xff08;2&#xff09;案例&#xff08;3&#xff09;总结对比 二、新增方式2&#xff1a;使用线程池&#xff08;1&#xff09;问题与解决思路1、现有问题2、解决思路3、好处 &#xff0…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注&#xff1a;数据库配置比较重要 先将本地的Docker启动起来&#xff0c;用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

以小猪o2o生活通v17.1为例简要分析SWOOLE加密破解,swoole_loader加密破解swoole加密逆向后的代码修复流程(个人见解高手掠过)

现在用Php加密五花八门除了组件就是混淆&#xff0c;在组件里面响当当的还属swoole&#xff0c;SWOOLEC是不错的国产加密&#xff0c;值得推荐官方宣称是永远无法破解的加密算法&#xff0c;针对swoole compiler的代码修复我谈谈我的看法&#xff0c;以小猪o2o生活通&#xff0…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象&#xff0c;该 Builder 类是独立于其他对象的 建造者模式属于创建型模式&#xff0c;它提供了一种创建对…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客&#xff0c;网上也有很多教程&#xff0c;很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

vcruntime140.dll最新的修复方法,一键修复vcruntime140.dll的手段

在这篇文章中&#xff0c;我们将深入探讨并详细介绍各种修复vcruntime140.dll文件缺失或损坏问题的方法。鉴于此类问题广泛存在并影响了众多用户&#xff0c;本文目的是向大家展示不同的修复策略&#xff0c;希望能够帮助每个人解决这些棘手的技术难题。下面一起来看看vcruntim…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

黑豹程序员-ElementPlus选择图标器

ElementPlus组件提供了很多图标svg 如何在你的系统中&#xff0c;用户可以使用呢&#xff1f; 这就是图标器&#xff0c;去调用ElementPlus的icon组件库&#xff0c;展示到页面&#xff0c;用户选择&#xff0c;返回选择的组件名称。 效果 代码 <template><el-inpu…

机器学习 - 梯度下降

场景 上一章学习了代价函数&#xff0c;在机器学习中&#xff0c;代价模型是用于衡量模型预测值与真实值之间的差异的函数。它是优化算法的核心&#xff0c;目标是通过调整模型的参数来最小化代价模型的值&#xff0c;从而使模型的预测结果更接近真实值。常见的代价模型是均方…

【Boost】:searcher的建立(四)

searcher的建立 一.初始化二.搜索功能三.完整源代码 sercher主要分为两部分&#xff1a;初始化和查找。 一.初始化 初始化分为两步&#xff1a;1.创建Index对象&#xff1b;2.建立索引 二.搜索功能 搜索分为四个步骤 分词&#xff1b;触发&#xff1a;根据分词找到对应的文档…

架构设计特训

一、考点分布 软件架构风格&#xff08;※※※※&#xff09;层次型软件架构风格&#xff08;※※※※&#xff09;面向服务的软件架构风格&#xff08;※※※※&#xff09;云原生架构风格&#xff08;※※※※&#xff09;质量属性与架构评估&#xff08;※※※※※&#xff…

Transformer实战-系列教程1:Transformer算法解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1&#xff1a;Transformer算法解读1 Transformer实战-系列教程2&#xff1a;Transformer算法解读2 现在最火的AI内容&#xff0c;chatGPT、视觉大模…

Golang切片与数组

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;和数组&#xff08;Array&#xff09;是两个核心的数据结构&#xff0c;它们在内存管理、灵活性以及性能方面有着显著的区别。接下来将解析Golang中的切片与数组&#xff0c;通过清晰的概念解释、案例代码和实际应用场…

小林Coding_操作系统_读书笔记

一、硬件结构 1. CPU是如何执行的 冯诺依曼模型&#xff1a;中央处理器&#xff08;CPU&#xff09;、内存、输入设备、输出设备、总线 CPU中&#xff1a;寄存器&#xff08;程序计数器、通用暂存器、指令暂存器&#xff09;&#xff0c;控制单元&#xff08;控制CPU工作&am…

[word] word页面视图放大后,影响打印吗? #笔记#学习方法

word页面视图放大后&#xff0c;影响打印吗&#xff1f; word文档的页面视图又叫普通视图&#xff0c;又叫打印视图&#xff0c;是系统默认的视图&#xff0c;是用户用的最多最常见的视图。 问&#xff1a;怎样打开页面视图&#xff1f; 答&#xff1a;两种方法 方法一、点…

JS 基本语句

函数调用&#xff0c;分支&#xff0c;循环&#xff0c;语句示例。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

【Funny guys】龙年专属测试鼠标寿命小游戏...... 用Python给大家半年了......

目录 【Funny guys】龙年专属测试鼠标寿命小游戏...... 用Python给大家半年了...... 龙年专属测试鼠标寿命小游戏用Python给大家半年了贪吃龙游戏 文章所属专区 码农新闻 欢迎各位编程大佬&#xff0c;技术达人&#xff0c;以及对编程充满热情的朋友们&#xff0c;来到我们的程…