当前位置: 首页 > news >正文

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

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

需求

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

### robot framework

优点

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

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

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

  • 支持数据库操作。

缺点

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

  • 需要掌握特定语法。

 
  1. *** Settings ***

  2. Library RequestsLibrary

  3. Library Collections

  4. *** Test Cases ***

  5. test_get_event_list # 查询发布会(GET请求)

  6. ${payload}= Create Dictionary eid=1

  7. Create Session event http://127.0.0.1:8000/api

  8. ${r}= Get Request event /get_event_list/ params=${payload}

  9. Should Be Equal As Strings ${r.status_code} 200

  10. log ${r.json()}

  11. ${dict} Set variable ${r.json()}

  12. #断言结果

  13. ${msg} Get From Dictionary ${dict} message

  14. Should Be Equal ${msg} success

  15. ${sta} Get From Dictionary ${dict} status

  16. ${status} Evaluate int(200)

  17. Should Be Equal ${sta} ${status}

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


###JMeter

优点

  • 支持参数化

  • 不需要写代码

缺点

缺点:

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

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

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

    ###HttpRunner

    优点:

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

  • 接口编写简单

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

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

  • 扩展不方便。

  • 生成测试报告

  • 接口录制功能。

 
  1. [

  2. {

  3. "config": {

  4. "name": "testcase description",

  5. "variables": [],

  6. "request": {

  7. "base_url": "http://127.0.0.1:5000",

  8. "headers": {

  9. "User-Agent": "python-requests/2.18.4"

  10. }

  11. }

  12. }

  13. },

  14. {

  15. "test": {

  16. "name": "test case name",

  17. "request": {

  18. "url": "/api/get-token",

  19. "headers": {

  20. "device_sn": "FwgRiO7CNA50DSU",

  21. "user_agent": "iOS/10.3",

  22. "os_platform": "ios",

  23. "app_version": "2.8.6",

  24. "Content-Type": "application/json"

  25. },

  26. "method": "POST",

  27. "date": {"sign": "958a05393efef0ac7c0fb80a7eac45e24fd40c27"}

  28. },

  29. "validate": [

  30. {"eq": ["status_code", 200]},

  31. {"eq": ["headers.Content-Type", "application/json"]},

  32. {"eq": ["content.success", true]},

  33. {"eq": ["content.token", "baNLX1zhFYP11Seb"]}

  34. ]

  35. }

  36. }]

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


###gauge


BDD行为驱动测试框架。

优点:

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

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

  • 自动生成测试报告。

  • VS Code有支持插件

缺点:

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

  • 需要会markdworn语法

行为描述文件:

 
  1. ## test post request

  2. * post "http://httpbin.org/post" interface

  3. |key | status_code|

  4. |------|-----------|

  5. |value1|200 |

  6. |value2|200 |

  7. |value3|200 |

测试脚本:

 
  1. ……

  2. @step("post <url> interface <table>")

  3. def test_get_request(url, table):

  4. values = []

  5. status_codes = []

  6. for word in table.get_column_values_with_name("key"):

  7. values.append(word)

  8. for word in table.get_column_values_with_name("status_code"):

  9. status_codes.append(word)

  10. for i in range(len(values)):

  11. r = requests.post(url, data={"key": values[i]})

  12. result = r.json()

  13. assert r.status_code == int(status_codes[i])

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


###Unittest+Request+HTMLRunner

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

优点:

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

缺点:

  • 有一定的学习成本

数据文件:

 
  1. {

  2. "test_case1": {

  3. "key": "value1",

  4. "status_code": 200

  5. },

  6. "test_case2": {

  7. "key": "value2",

  8. "status_code": 200

  9. },

  10. "test_case3": {

  11. "key": "value3",

  12. "status_code": 200

  13. },

  14. "test_case4": {

  15. "key": "value4",

  16. "status_code": 200

  17. }}

测试用例:

 
  1. import requests

  2. import unittest

  3. from ddt import ddt, file_data

  4. @ddtclass InterfaceTest(unittest.TestCase):

  5. def setUp(self):

  6. self.url = "http://httpbin.org/post"

  7. def tearDown(self):

  8. print(self.result)

  9. @file_data("./data/test_data_dict.json")

  10. def test_post_request(self, key, status_code):

  11. r = requests.post(self.url, data={"key": key})

  12. self.result = r.json()

  13. self.assertEqual(r.status_code, status_code)

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

 
  1. 我花了两天时间整理这些框架,其实重点就是了解HttpRunner 和 gauge 。

  2. yg

  3. HttpRunner 没有编辑器插件,本身就是一个YAML/JSON配置文件,所以配置写错了,但只要是合法的YAML/JSON格式,也看不出来,只有运行的过后才知道。就像你用记事本写代码一样,只有运行了才知道代码有没有写错。

  4. 另外,扩展起来也不是特别方便,单独用python实现一些函数:在json文件中

  5. ```{"device_sn": "${gen_random_string(15)}"}```

  6. 以这样的方式引用```gen_random_string()``` 函数。

  7. gauge我已经分享过两篇基础文章了,虽然用BDD拿来做接口理念不搭,但并不是不可以,唯一的缺点是用BDD来描述接口行为不合适,其他的都没毛病,可以参数化,断言写起来也简单,测试报告也漂亮,本质上还是用Python实现一些功能,所以非常灵活。

  8. unittest + requests + HTMLTestRunner是我最熟悉的方案,几乎没什么短板。以前通过这种方案写过很多测试用例,这次把ddt加上似乎更完美了。

相关文章:

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

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…...

常用python模板

1.简单脚本模板 def main():#代码逻辑if __name__"__main__":main() 2.类定义模板 Class Myclass:def __init__(self,parameter):self.parameterparameterdef my_method(self):#方法逻辑 3.函数定义模板 def my_function(parameter):#代码逻辑return result 4.…...

53. 最大子数组和(力扣LeetCode)

文章目录 53. 最大子数组和题目描述暴力&#xff08;运行超时&#xff09;贪心 53. 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组…...

如何远程SSH连接在家的服务器主机

当您需要通过SSH远程连接到家里的服务器主机时&#xff0c;以下是更详细的实施步骤&#xff1a; 1. 确保服务器主机已开启SSH服务 安装SSH服务&#xff1a;首先&#xff0c;确保您的服务器主机上安装了SSH服务。根据您的操作系统&#xff0c;您可以使用相应的包管理器来安装。…...

【亲测有效】解决三月八号ChatGPT 发消息无响应!

背景 今天忽然发现 ChatGPT 无法发送消息&#xff0c;能查看历史对话&#xff0c;但是无法发送消息。 可能的原因 出现这个问题的各位&#xff0c;应该都是点击登录后顶部弹窗邀请 [加入多语言 alapha 测试] 了&#xff0c;并且语言选择了中文&#xff0c;抓包看到 ab.chatg…...

vue结合vue-electron创建应用程序

这里写自定义目录标题 安装electron第一种方式&#xff1a;vue init electron-vue第二种方式&#xff1a;vue add electron-builder 启动electron调试功能&#xff1a;background操作和使用1、覆盖窗口的菜单上下文、右键菜单2、监听关闭事件、阻止默认行为3、创建悬浮窗口4、窗…...

【C++】STL(二) string容器

一、string基本概念 1、本质 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char * 区别&#xff1a; char * 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 2、特点 1、stri…...

PyCM:Python中的混淆矩阵库

PyCM&#xff1a;Python中的混淆矩阵库 在机器学习和数据科学领域&#xff0c;评估模型的性能是至关重要的。混淆矩阵是一种常用的评估工具&#xff0c;用于可视化和量化分类模型的预测结果。PyCM是一个开源的Python库&#xff0c;提供了丰富的功能来计算和分析混淆矩阵。本文将…...

Day22:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

目录 开发环境 数据导入-mysql架构&库表列 数据库操作-mysqli函数&增删改查 数据接收输出-html混编&超全局变量 第三方插件引用-js传参&函数对象调用 完整源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0…...

IOS面试题object-c 61-70

61. 阐述isKindOfClass、isMemberOfClass、selector作用分别是什么&#xff1f;isKindOfClass&#xff1a;作用是某个对象属于某个类型或者继承自某类型。 isMemberOfClass&#xff1a;某个对象确切属于某个类型。 selector&#xff1a;通过方法名&#xff0c;获取在内存中的函…...

Git指令reset的参数soft、mixed与hard三者之间的区别

主要内容 reset默认不写参数&#xff0c;与使用mixed参数含义一样 为了描述简洁&#xff0c;使用下图说明&#xff1a; #mermaid-svg-LtChquRXlEV1j6og {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LtChquRXlEV1j…...

RGMII 接口调试

目录 硬件检查 软件检查 调试步骤 硬件检查 硬件工程师检查原理图和PCB&#xff0c;核查RGMII线路连接是否正确&#xff0c;PHY的 TX连接对端 RX&#xff0c;PHY的RX连接对端TX&#xff0c;原理图上以引脚序号引脚名 引脚类型(输入还是输出)逐一核查RGMII接口各个网络&#…...

Ubuntu 24.04 抢先体验换国内源 清华源 阿里源 中科大源 163源

Update 240307:Ubuntu 24.04 LTS 进入功能冻结期 预计4月25日正式发布。 Ubuntu22.04换源 Ubuntu 24.04重要升级daily版本下载换源步骤 (阿里源)清华源中科大源网易163源 Ubuntu 24.04 LTS&#xff0c;代号 「Noble Numbat」&#xff0c;即将与我们见面&#xff01; Canonica…...

软件设计模式:模板方法模式

1. 简介 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。这样&#xff0c;可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步骤。 2. 使用条件 模板方法模式适用于以下情况&#xff1a; 算法…...

【算法】Hash存储——开放寻址法

模拟散列表 维护一个集合&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个整数 x&#xff1b; Q x&#xff0c;询问整数 x是否在集合中出现过&#xff1b; 现在要进行 N次操作&#xff0c;对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N&am…...

STM32CubeIDE基础学习-STM32CubeIDE软件程序下载方法

STM32CubeIDE基础学习-STM32CubeIDE软件代码下载方法 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件代码下载方法前言第1章 代码下载第2章 下载器固件更新总结 前言 编写完代码&#xff0c;一般都会选择在线下载程序的方式进行验证该程序是否正确&#xff0c;如果发现结果和…...

LeetCode 174.地下城游戏 Python题解

地下城游戏 # 地下城游戏 """ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由mxn个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里&#xff0c; 他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数…...

指令调用模板

也就是这边指令通过id和map会定位到一个结构体&#xff0c;然后这个结构再赋值两个成员&#xff0c;一个是函数一个是指令类型&#xff0c;然后这个函数是模板的实例化 使用的时候就传进去&#xff0c;这只是参数&#xff0c;最开始初始化的时候模板就已经实例化了。然后关于模…...

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …...

第二十天-数据分析

1.介绍 1.什么是数据分析 1.以下4个纬度结合起来的数据科学 2.数据分析的特殊性...

ROS开发环境搭建指南:VSCode与Terminator高效配置(C++/Python)

1. 为什么选择VSCodeTerminator开发ROS 刚接触ROS开发时&#xff0c;我最头疼的就是频繁切换终端窗口和代码编辑界面。传统方法需要反复alttab切换&#xff0c;效率极低。直到发现VSCodeTerminator这对黄金组合&#xff0c;开发效率直接翻倍。 VSCode的优势在于轻量级和强大的插…...

【VS Code】settings.json配置实战:全局与工作区设置的灵活切换技巧

1. 理解VS Code的配置层级体系 第一次用VS Code时&#xff0c;我就被它的配置系统惊艳到了。不像其他编辑器把配置藏在注册表或系统深处&#xff0c;VS Code把所有设置都明明白白放在settings.json文件里。但更厉害的是它的双层配置设计——就像手机有系统级设置和APP单独设置…...

Qwen3.5-4B模型在Proteus仿真电路描述生成中的应用

Qwen3.5-4B模型在Proteus仿真电路描述生成中的应用 1. 引言&#xff1a;电路文档撰写的痛点与解决方案 电子工程师和学生们在使用Proteus进行电路仿真时&#xff0c;常常面临一个共同的困扰&#xff1a;花费大量时间编写电路说明文档。一个复杂的电路仿真项目&#xff0c;可能…...

墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成

墨语灵犀处理403 Forbidden错误&#xff1a;智能排查与解决方案生成 遇到网站打不开&#xff0c;显示“403 Forbidden”&#xff0c;是不是感觉有点懵&#xff1f;这个错误在运维和开发中太常见了&#xff0c;它就像一道“禁止入内”的门&#xff0c;告诉你服务器收到了请求&a…...

STM32实战指南_打造智能厨房安全卫士(硬件选型+代码解析+调试技巧)

1. 项目背景与需求分析 厨房是家庭安全隐患的高发区域&#xff0c;尤其是燃气泄漏和高温引发的安全问题。去年我邻居家就因燃气阀门未关紧导致轻微中毒&#xff0c;这件事让我下定决心开发一个低成本、高可靠性的厨房安全监测系统。基于STM32的方案不仅成本可控&#xff08;整…...

器件应力降额及关键用法规范-7(功率二极管-2)

本文器件应力降额设计思路&#xff0c;参考《器件应力及关键用法规范》相关通用技术准则与赛米控&#xff08;SEMIKRON&#xff09;《Applikationshandbuch Leistungshalbleiter》&#xff08;功率半导体应用手册&#xff09;中的内容&#xff0c;结合器件工作特性及工程实际应…...

重新定义桌面美学:掌握TranslucentTB的3个颠覆性任务栏定制方案

重新定义桌面美学&#xff1a;掌握TranslucentTB的3个颠覆性任务栏定制方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想象一下&…...

LeetCode 69. x 的平方根:两种解法详解

LeetCode 上的经典基础题——69. x 的平方根。这道题看似简单&#xff0c;却能很好地考察我们对基础算法的理解&#xff0c;尤其是循环和二分查找的应用。题目要求很明确&#xff1a;给定一个非负整数 x&#xff0c;计算它的算术平方根&#xff0c;返回整数部分&#xff08;舍去…...

语义网络表示法:从节点、关系到继承推理

在知识表示的发展过程中&#xff0c;语义网络表示法&#xff08;Semantic Network Representation&#xff09;是一种非常重要的方法。它用“节点—关系—节点”的结构来表示知识&#xff0c;把对象及其联系组织成有向图&#xff0c;因此比单纯的逻辑公式更直观&#xff0c;也更…...

AzurLaneAutoScript:从人工操作到智能决策的游戏自动化革命

AzurLaneAutoScript&#xff1a;从人工操作到智能决策的游戏自动化革命 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 深夜…...