主流接口测试框架对比

news2024/11/19 4:28:06

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

需求


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"]}
      ]
    }
  }]

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

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

Python接口自动化测试零基础入门到精通(2023最新版)

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

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

相关文章

如何设计一个自动化测试平台

平台解决了什么问题 一般在企业内&#xff0c;技术团队如果规模比较小&#xff0c;很少会专门投入资源去做平台化的事情&#xff0c;特别是测试团队&#xff0c;无论是成本预算还是技术能力&#xff0c;先天技术能力不足&#xff0c;后天可投入的资源缺乏。 而平台的特点在于…

杭州亚运会用到哪些黑科技?

Spring实战系列文章&#xff1a; Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密&#xff1f; 国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#…

Studio one 6.5中文直装版最新版,一键安装丨无套路分享丨宿主软件丨机架直播

Studio One 6.5 具有最先进的沉浸式混音和集成的空间音频制作工作流程。还有新的插件&#xff0c;改进的乐谱功能和对 DAWproject 的支持。 PreSonus 的“.5”更新通常都有比较大的变化&#xff0c;这次也不例外。Studio One 6.5 增加了一种全新的工作方式&#xff0c;完全集成…

博弈论——博弈信息结构

博弈信息结构 0 引言 在一个博弈构成中&#xff0c;博弈信息结构是不可或缺要素。博弈信息&#xff0c;顾名思义&#xff0c;就是在博弈中&#xff0c;博弈方对于信息的了解。知己知彼&#xff0c;百战不殆。和短兵相接的战争一样&#xff0c;只有充分了解自己的优劣势&#x…

python---求面积练习:提示用户输入圆的半径,根据公式S = πr2求圆的面积

求面积练习&#xff1a;提示用户输入圆的半径&#xff0c;根据公式S πr2求圆的面积 r float(input(‘请输入要计算圆的半径&#xff1a;’)) PI 3.14 s PI * r ** 2 print(f’圆的面积为&#xff1a;{s}) r float(input(‘请输入要计算圆的半径&#xff1a;’)) ------…

NetSuite ERP系统健康检查

这个题目来自最近的一个项目感受&#xff0c;“上线即停滞”。这是在中小型企业十分普遍的一个情况&#xff0c;一旦上线后&#xff0c;基本上信息化的建设就停止了。这是一个中小企业信息化的一个特点&#xff0c;因为其IT力量比较弱&#xff0c;所以在信息化的推动中缺乏话语…

蓝桥杯(等差素数列,C++)

思路&#xff1a; 1、因为找的是长度为10&#xff0c;且公差最小的等差素数列&#xff0c;直接用枚举即可。 2、枚举用三重循环&#xff0c;第一重枚举首项&#xff0c;第二重枚举公差&#xff0c;第三重因为首项算一个&#xff0c;所以枚举九个等差素数。 代码&#xff1a;…

异步使用langchain

文章目录 一.先利用langchain官方文档的AI功能问问二.langchain async api三.串行&#xff0c;异步速度比较 一.先利用langchain官方文档的AI功能问问 然后看他给的 Verified Sources 这个页面里面虽然有些函数是异步函数&#xff0c;但是并非专门讲解异步的 二.langchain asy…

08Maven中的继承和聚合的作用

Maven中的继承 实际开发中对一个比较大型的项目进行了模块拆分 , 一个project下面创建了很多个modul, 每一个module都需要配置自己的依赖信息 开发中使用的同一个框架内的不同jar包&#xff0c;它们应该是同一个版本&#xff0c;所以整个项目中使用的框架版本需要统一 传统方…

qt-C++基于QWidget的程序模板

qt-C基于QWidget的程序模板 code review! 文章目录 qt-C基于QWidget的程序模板1.文件结构1.widget.h2.widget.cpp3.main.cpp4.mytest.pro5.widget.ui 1.文件结构 1.widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { cl…

03.生成式学习的策略与工具

目录 生成式学习的两种策略生成的物件介绍文句影像语音 策略一&#xff1a;各个击破&#xff08;Autoregressive (AR) model策略二&#xff1a;一次到位&#xff08;Non-autoregressive (NAR) model&#xff09;二者的比较其他策略二合一多次到位 AIGC工具New BingWebGPTWebGPT…

python项目之AI动物识别工具的设计与实现(django)

项目介绍&#xff1a; &#x1f495;&#x1f495;作者&#xff1a;落落 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;擅长Java、小程序、Python等。 &#x1f495;&#x1f495;各类成品java毕设 。javaweb&#xff0c;ssm&#xff0c;spring…

只要掌握Win32应用程序错误的来龙去脉,就没必要惊慌失措

也许你遇到了一个问题&#xff0c;你试图运行的程序已损坏甚至丢失。在这种情况下&#xff0c;Windows将无法正确运行该文件&#xff0c;因此&#xff0c;操作系统将生成一个错误——文件不是有效的32位应用程序或文件不是无效的Win32应用程序。 错误通常是因为可执行文件不是有…

【大作文】【图表】【第一段】

描述主题&#xff1a; how sb do the factors that sb do the intention of

万字解析——区块链hyperledger fabric2.2部署实战教程

导航 一、前言二、hyperledger fabric介绍三、测试网络示例3.1 搭建开发环境3.2 安装示例、二进制和 Docker 镜像3.3 使用Fabric测试网络3.4 使用认证机构建立网络 四、汽车生产应用4.1 搭建开发环境4.2 注册登记等操作使用4.3 智能合约4.4 更新账本 五、商业票据应用5.1 运行网…

Adobe2024 全家桶更新了,PS、Ai、AE、PR应用尽有

Adobe2024 全家桶更新了&#xff0c;包含的PS、Ai、AE、PR......个人学习&#xff0c;专业领域都是必不可少的软件都有&#xff0c;需要的不要错过了。 如果你不知道从哪里安装这些工具&#xff0c;小编为大家带来了破J版资源&#xff0c;附上详细的安装包及安装教程。 Mac软件…

bat一键给windows server 2012 打补丁

流程图 脚本 install.bat 主脚本&#xff0c;整理实现逻辑都在这 ECHO OFF REM 自动判断权限问题&#xff0c;主动获取管理员权限>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if %errorlevel% NEQ 0…

LSTM模型的讲解与运用

实验目的&#xff1a; 循环神经网络(RNN)是一类以序列数据为输入&#xff0c;在序列的演进方向进行循环且所有循环单元按链式连接的神经网络。目前RNN已经广泛应用于语音识别、文本分类等自然语言处理任务中。本实验通过采用循环神经网络的变体长短期记忆网络(LSTM)&#xff0…