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

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

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

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


###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公众号:程序员雨果,即可免费领取

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

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

相关文章

Windows系统下使用docker部署redis

使用虚拟机部署redis&#xff0c;虚拟机很占用电脑资源&#xff0c;所以选择使用docker对redis进行部署。 一、安装docker 安装链接&#xff1a;https://docker.p2hp.com/ 二、配置redis.conf文件 下载配置文件&#xff1a;https://download.redis.io/redis-stable/redis.con…

rabbitMq创建交换机,以及路由键绑定队列教程

创建交换机&#xff1a; 创建队列&#xff1a; 创建路由&#xff0c;绑定到交换机&#xff1a; 补充&#xff1a; 创建新用户后&#xff0c;记得点进用户中&#xff0c;那两个set都点击一下&#xff1b; 还有配置代码连接的时候&#xff0c;连的端口为5672&#xff0c;可不…

【JavaEE】Servlet(创建Maven、引入依赖、创建目录、编写及打包、部署和验证、smart Tomcat)

一、什么是Servlet&#xff1f; Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app 1.1 Servlet能干什么&#xff1f; &#x1f695;允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类…

Azure 机器学习 - 机器学习中的企业安全和治理

目录 限制对资源和操作的访问网络安全性和隔离数据加密数据渗透防护漏洞扫描审核和管理合规性 在本文中&#xff0c;你将了解可用于 Azure 机器学习的安全和治理功能。 如果管理员、DevOps 和 MLOps 想要创建符合公司策略的安全配置&#xff0c;那么这些功能对其十分有用。 通过…

Linux必备基础命令,JAVA程序员必备

目录 一、了解基本的左侧栏什么意思​编辑 二、ls&#xff0c;ll&#xff08;list&#xff0c;查找目录内容) 三、cd(change directory&#xff0c;切换目录) 小技巧&#xff0c;我们在查找东西的时候&#xff0c;可以使用tab进行智能补全。 四、touch&#xff08;建立文件…

R程序 示例4.3.2版本包 在centos进行编译部署

为了在CentOS上下载和编译R语言4.3.2包&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.首先&#xff0c;需要安装一些必要的依赖项。可以使用以下命令安装它们&#xff1a; sudo yum install -y epel-release sudo yum install -y gcc gcc-c gcc-gfortran readline-dev…

RTSP/Onvif安防平台EasyNVR批量禁用/启用通道接口的详细操作步骤

TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中&#xff0c;EasyNVR可提供视频实时监控直播、云端…

Python爬虫过程中DNS解析错误解决策略

在Python爬虫开发中&#xff0c;经常会遇到DNS解析错误&#xff0c;这是一个常见且也令人头疼的问题。DNS解析错误可能会导致爬虫失败&#xff0c;但幸运的是&#xff0c;我们可以采取一些策略来处理这些错误&#xff0c;确保爬虫能够正常运行。本文将介绍什么是DNS解析错误&am…

RAFT3D 代码复现

代码地址 https://github.com/princeton-vl/RAFT-3D 配置环境 1.创建环境 conda create -n raft3d python3.8 conda activate raft3d2.安装库 conda install pytorch1.8.0 torchvision0.9.0 torchaudio0.8.0 cudatoolkit11.1 -c pytorch -c conda-forgesudo apt-get insta…

linux查看端口占用情况

lsof命令 lsof(list open files)命令可以列出当前系统中打开的所有文件&#xff0c;包括网络端口。可以使用lsof命令查看某个端口被哪个进程占用。 具体的命令为&#xff1a;sudo lsof -i :端口号&#xff0c;其中端口号为需要查询的端口号。 netstat命令 使用netstat命令&a…

使用责任链模式实现登录风险控制

责任链模式 责任链模式是是设计模式中的一种行为型模式。该模式下&#xff0c;多个对象通过next属性进行关系关联&#xff0c;从而形成一个对象执行链表。当发起执行请求时&#xff0c;会从首个节点对象开始向后依次执行&#xff0c;如果一个对象不能处理该请求或者完成了请求…

DefaultListableBeanFactory

DefaultListableBeanFactory 是一个完整的、功能成熟的 IoC 容器&#xff0c;如果你的需求很简单&#xff0c;甚至可以直接使用 DefaultListableBeanFactory&#xff0c;如果你的需求比较复杂&#xff0c;那么通过扩展 DefaultListableBeanFactory 的功能也可以达到&#xff0c…

金蝶云星空和管易云接口打通对接实战

金蝶云星空和管易云接口打通对接实战 对接系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持的协同…

时序数据库 TDengine + 高级分析软件 Seeq,助力企业挖掘时序数据潜力

作为一款制造业和工业互联网&#xff08;IIOT&#xff09;高级分析软件&#xff0c;Seeq 支持在工艺制造组织中使用机器学习创新的新功能。这些功能使组织能够将自己或第三方机器学习算法部署到前线流程工程师和主题专家使用的高级分析应用程序&#xff0c;从而使单个数据科学家…

sqlserver查询时去除1900-01-01

在下图示例中“chk_date”字段在数据中显示的是默认时间&#xff0c;如何将这个时间在SQL查询时设为空&#xff1f; cast(nullif(a.chk_date,) as datetime) 确认日期 以上是我的方法。 select chk_date as 日期 from Ixa_payment_req 运行结果是&#xff1a;1900-01-01 00:0…

【移远QuecPython】EC800M物联网开发板的SIM卡初始化和网络状态检测

【移远QuecPython】EC800M物联网开发板的SIM卡初始化和网络状态检测 文章目录 SIM卡初始化导入库获取SIM状态 网络检测导入库等待网络就绪 函数打包附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 SIM卡初始化 导入库 import sim获取SIM状态…

【机器学习基础】机器学习入门(2)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a;【机器学习基础】机器学习入门&#xff08;1&#xff09; &#x1f4a1;…

Java项目开发:基于Springboot+vue口腔牙科诊所管理系统

项目介绍 本选题则旨在通过标签分类管理等方式&#xff0c;实现管理员&#xff1a;首页、个人中心、会员管理、病例就诊信息管理、牙齿保健产品管理、复查提醒管理、预约挂号管理、药品信息管理、留言板管理、系统管理、订单管理&#xff0c;会员&#xff1b;首页、个人中心、…

Python logging模块打印日志

logging打印日志&#xff0c;文件名为log_config.py import logging import sysdef setup_logger(log_file, error_log_file):# 创建一个日志记录器logger logging.getLogger(__name__)logger.setLevel(logging.DEBUG) # 设置全局日志级别为 DEBUG# 创建一个文件处理器&…

arcgis--二维建筑面的三维显示设置

1、打开ArcScene软件&#xff0c;导入数据&#xff0c;如下&#xff1a; 2、 对建筑面进行拉伸。双击建筑物面图层&#xff0c;打开属性表&#xff0c;选择【拉伸】选项卡&#xff0c;参数设置如下&#xff1a; 显示结果如下&#xff1a;