主流接口测试框架对比,究竟哪个更好用

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

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


### robot framework

优点

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

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

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

  • 支持数据库操作。

缺点

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

  • 需要掌握特定语法。

*** Settings ***
Library    RequestsLibrary
Library    Collections
 
*** Test Cases ***
test_get_event_list    # 查询发布会(GET请求)
    ${payload}=    Create Dictionary    eid=1
    Create 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}    200
    log    ${r.json()}
    ${dict}    Set variable    ${r.json()}
    #断言结果
    ${msg}    Get From Dictionary    ${dict}   message
    Should 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"]}
      ]
    }
  }]
 

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


###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有一定门槛,看测试人员的学些能力和接受速度。


###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加上似乎更完美了。

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:

加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git 补丁使用

cmd进入到改目录 执行命令 比如tag1.11.4 到 tag 1.12.0 生成文件 the-patch.diff C:\code\Sandboxie>git diff v1.11.4 v1.12.0 -- > the-patch.diff 把这个the-patch.diff 拷贝到你的工程目录下 cmd到你的工程目录下 执行命令 git apply --reject the-patch.diff …

【溶解度工具】上海道宁为您带来了解溶解度、分散性、扩散、色谱等问题的强大而实用的软件集——HSPiP

高度参数化的UNIFAC技术 可以提供出色的预测 COSMO-RS方法的量子化学基础 可以在明确的公式中进行精确预测 Abraham参数和NRTL-SAC 也各有其独特的功能 优秀的配方师会使用 正确的工具来完成手头的工作 如果您必须只使用一种工具 那么它应该是 HSP 因为它可以很好地解…

MySQL锁机制详解

概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除了传统的计算资源&#xff08;如CPU、RAM、I/O等&#xff09;的争用以外&#xff0c;数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一…

看看高情商的CHAT如何写演讲稿?

问CHAT&#xff1a;以“世界问候日&#xff0c;关心你我他”为主题&#xff0c;小学生国旗下讲话稿400字 CHAT 回复&#xff1a; 尊敬的校领导、亲爱的老师、可爱的同学们&#xff1a; 大家好&#xff01; 今天&#xff0c;在这蓝天白云、红旗飘扬的校园里&#xff0c;我代表…

vue3配置导航栏和页脚(附代码)

一&#xff1a;前言 本文主要是针对刚上手 Vue3 的初学者所写。涉及内容比较简单&#xff0c;没有太过于复杂的逻辑。因此有想学神入知识的可以看一下别的文章。 本次实验的技术是 Vue3 TypeScript Element Plus 。因为这三个是在 Vue 开发中经常一起出现的。如果没有学过的话…

RT-DETR算法优化改进:Backbone改进 | VanillaNet一种新视觉Backbone,极简且强大!华为诺亚2023

💡💡💡本文独家改进: VanillaNet助力RT-DETR ,替换backbone,简到极致、浅到极致!深度为6的网络即可取得76.36%@ImageNet的精度,深度为13的VanillaNet甚至取得了83.1%的惊人性能。 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/cat…

安卓:打包apk时出现Execution failed for task ‘:app:lintVitalRelease

Execution failed for task :lintVitalRelease 程序可以正常运行&#xff0c;但是打包apk的时候报Execution failed for task ‘:app:lintVitalRelease导致打包失败&#xff0c;原因是执行lintVitalRelease失败了&#xff0c;存在错误。解决办法&#xff1a;在app模块的build.…

【原创分享】DC-DC电源PCB设计要点

DC-DC电源是一种用于将直流&#xff08;DC&#xff09;电压转换为不同电压级别的电源。它通过内部的电路和拓扑结构&#xff0c;将输入电压调整为所需的输出电压&#xff0c;并提供稳定的电力供应。 DC-DC电源通常包括输入端子、输出端子、开关元件&#xff08;如开关管&#…

神通MPP数据库的跨库查询

神通MPP数据库的跨库查询 一. 简介二. 系统表三. 跨库查询语法1. 创建外部数据存储服务器2. 删除外部数据存储服务器3. 授予普通用户访问外部数据存储服务器权限4. 回收普通用户访问外部数据存储服务器权限5. 加密函数6. 访问外部数据存储服务器 ★ 四. 跨库查询&#xff1a;统…

记录:unity脚本的编写6.0

目录 unity UI系统添加ui编写脚本 unity UI系统 在日常的游戏或者别的什么活动中&#xff0c;ui总是必不可少的一项&#xff0c;在java中也有关于GUI的内容&#xff0c;unity也不例外&#xff0c;这次就使用脚本控制在unity添加的各种ui组件&#xff0c;使他们可以完成一些我们…

python读取excel,进行数据处理

一、准备python编译器 二、下载 pyexcel 库 pip install pyexcel-xls三、进行编码读取数据 import pyexcel# 读取Excel文件 成本中心字典 data pyexcel.get_array(file_name成本中心.xls)def hand():#打印数据#print(data)url f"INSERT INTO dst_base.sys_dict(p_…

终端神器:tmux

安装tmux简单使用自己的理解&#xff08;小白专属&#xff09; 使用的初衷&#xff1a; 在Linux终端下&#xff0c;由于session&#xff08;会话&#xff09;和windows&#xff08;窗口&#xff09;是绑定一起的&#xff0c;你打开一个终端的黑窗口就是打开一个会话&#xff0c…

MySQL中修改注释+报错1067错误时的解决方法

修改某字段的注释内容的mysql语句 ALTER TABLE consumption_table MODIFY COLUMN risk_level tinyint(1) NOT NULL DEFAULT 0 COMMENT 0-低 1-中 2-高;修改某字段的注释内容的mysql语句时报错1067的解决方法 首先执行MySQL语句&#xff1a;SET sql_mode ‘ALLOW_INVALID_DAT…

【C++】类和对象(3)--初始化列表(再谈构造函数)

目录 一 引入 二 初始化列表概念 三 初始化列表特性 1 引用和const 2 混合使用 3 自定义成员情况 四 初始化列表中的初始化顺序 五 总结 一 引入 构造函数体赋值 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} priv…

Word软件手动安装Zotero插件

文章目录 Word软件手动安装Zotero插件方法一方法二 参考资料 Word软件手动安装Zotero插件 方法一 关闭word在zotero中依次点击编辑—首选项—引用—文字编辑软件—重新安装加载项Microsoft word 方法二 寻找Zotero.dotm存储位置&#xff0c; 例如D:\Program Files\Zotero\ext…

Qt DragDrop拖动与放置

本文章从属于 Qt实验室-CSDN博客系列 拖放操作包括两个动作&#xff1a;拖动(drag)和放下(drop或称为放置)。 拖动允许 对于要拖出的窗口或控件&#xff0c;要setDragEnabled(true) 对于要拖入的窗口或控件&#xff0c;要setAcceptDrops(true) 下面以一个具体的用例进行说…

Accelerate 0.24.0文档 二:DeepSpeed集成

文章目录 一、 DeepSpeed简介二、DeepSpeed集成&#xff08;Accelerate 0.24.0&#xff09;2.1 DeepSpeed安装2.2 Accelerate DeepSpeed Plugin2.2.1 ZeRO Stage-22.2.2 ZeRO Stage-3 with CPU Offload2.2.3 accelerate launch参数 2.3 DeepSpeed Config File2.3.1 ZeRO Stage-…

什么是 IT 资产管理(ITAM),以及它如何简化业务

IT 资产管理对任何企业来说都是一项艰巨的任务&#xff0c;但使用适当的工具可以简化这项任务&#xff0c;例如&#xff0c;IT 资产管理软件可以为简化软件和硬件的管理提供巨大的优势。 什么是 IT 资产管理 IT 资产管理&#xff08;ITAM&#xff09;是一组业务实践&#xff…

【3dMax室内照明】如何在V-ray中设置照明分析?

如何在V-ray中设置照明分析&#xff1f; 在3dMax的V-Ray Next中添加了新的“照明分析”工具&#xff0c;以帮助您测量和分析场景中的灯光级别。您将能够创建假彩色热图和数据覆盖&#xff0c;以显示亮度&#xff08;以坎德拉为单位&#xff09;或照度&#xff08;以勒克斯为单位…

每天一点python——day67

#每天一点Python——67 #字符串判断方法&#xff1a;如图&#xff1a; #①判断指定字符串是否为合法标识符 shello,computer print(s.isidentifier()) #输出为False&#xff0c;不是合法标识符&#xff0c;这是因为标识符是由字母&#xff0c;数字&#xff0c;下划线组成&#…