日本移动支付Merpay QA团队的自动化现状
Merpay是日本最大的网购平台之一Mercari的无现金支付系统。Merpay 的主要功能是让用户在 Mercari的网站上购物,也可以在日本的许多实体店和餐厅使用它,也可以理解为日本的“支付宝”。以下为Merpay QA 团队在自动化方面的一些思考:
这几年,Merpay QA 团队一直关注的一件事是促进测试自动化。在这篇文章中,我将介绍我们在开发测试自动化时遇到的一些问题,并介绍我们用来支持产品的一些工具。
Merpay QA 团队致力于测试自动化有三个原因:减少工作量、加速发布、稳定质量。这些都非常简单,它们可能是大多数公司采用自动化的原因。
Merpay 积极参与 DevOps,以便“继续为客户提供更快、更可靠、更好的服务”。为此,我们需要加快质量保证、简化操作并用更少的人员处理更多的测试。这意味着在高影响领域有效地实现自动化测试至关重要。
Merpay QA 的一大特点是我们尝试帮助快速发布产品(而不是停止发布的 QA)。我们的目标是与开发团队建立一个合作体系,以便相互支持我们的职责。我们还致力于通过在开发阶段纳入许多测试来提高质量,并通过尝试从开发早期就纳入自动化测试来优化验证阶段的测试。
人们倾向于认为质量保证测试发生在发布前的最后阶段。然而,产品开发过程处于不断变化的状态,这导致了间歇性发布的周期。这就是为什么我们需要将 QA 视为“持续测试”,而不是“最后测试”。如果在这种环境下仅仅依靠手动测试,我们需要投入大量的资源来继续测试,每次扩大产品规模时都需要大量的质量保证资源。
此外,为了实现自动化,我们需要建立执行自动化所需的环境类型。任何通过通信处理的事情都需要进行重组,以使自动化变得更容易。为了实现这一目标,我们 Merpay 利用了非常适合我们开发文化的测试自动化工具。
Merpay使用的自动化工具
我们使用的主要测试自动化工具和项目管理工具可以大致分为后端、前端和本机应用程序,如下所示。
我不认为我们使用的工具与其他公司使用的工具有很大不同。话虽如此,值得一提的是,我认为非常像 Merpay 式的,那就是我们使用“Scenarigo”,它是由我们的一位开发人员内部开发的。
Scenarigo
“ Scenarigo ”是一款基于场景的测试自动化软件,由Merpay开发人员使用Go 语言 (Golang) 开发的开源软件。(地址:https://github.com/zoncoen/scenarigo)
Scenarigo是一个用于运行API服务器场景测试的工具。它类似于Postman,常用于后端测试。Scenarigo具有以下特点:
[场景特性]
• 测试场景可以用YAML编写
• YAML编写的测试场景可以重复使用
• 可以使用Go而不是JavaScript进行扩展
• HTTP和gRPC都可以使用
测试场景可以用YAML编写
当基于拉取请求管理测试场景时,Postman 要求处理导出的 json 测试定义。这些 json 文件结构复杂,对开发人员不友好,因为很难根据 Pull 请求在 GitHub 上检查差异。
相比之下,Scenarigo 测试场景的结构更加简单,使用 YAML,通常认为它比 json 更容易阅读。
测试场景可以重复使用
一个非常方便的功能是可以重用通用的测试场景和通用的测试流程。
例如,可以主动重用一般测试场景(例如创建用户和登录)和测试开始时经常使用的流程(例如授予剩余的 Merpay 余额),以创建高效的测试场景。
可以使用Go而不是JavaScript进行扩展
Scenarigo是Merpay开发工程师非常熟悉的工具,他们使用Golang进行实际开发。还可以创建 Golang 插件,并调用在YAML中创建的插件来进行测试场景。
例如,通常用Postman很难实现的测试场景(例如调用 API 后测试作业运行的结果)可以通过调用 Golang 编写的插件,用 Scenarigo 轻松实现。因此,我们能够增加可实施的测试场景的类型。
建立一个使开发工程师更容易维护测试的工具环境也有助于消除开发工程师和 QA 之间的界限。
HTTP和gRPC都可以使用
对于后端回归测试,我们一般会向每个微服务发送请求并验证响应结果。
Merpay架构的一个独特特征是,大多数微服务都是用Go实现并使用gRPC进行通信,因此能够同时使用HTTP和gRPC绝对是一个好处(因为HTTP请求需要通过API网关转换为gRPC)。
适用于特定微服务的内部工具
我们还有一个团队使用内部工具来实现特定微服务的自动化。
我们负责的微服务,有两个主要功能。第一种是,响应客户的固定费率支付申请,从指定信用信息机构Mercari或CIC获取信用信息,Merpay根据获取的信用信息进行固定费率支付审核。第二个功能是能够每月向 CIC 注册一次 Merpay 使用信息。
微服务中 QA 团队面临的挑战:
-
QA 方法很困难,这是一个封闭的后端服务,我们觉得很难,因为没有屏幕,需要使用工具进行QA。因此,返工往往会频繁发生,并且该功能只能由一个人进行 QA 认证。
-
规范复杂,这与QA方法结合起来,意味着需要时间才能赶上,并且很难简单地增加人员。
对于每个问题,我们至少希望简化 QA 方法,并努力自动化尽可能多的耗时步骤。
我们基本上使用由负责的微服务开发团队创建的内部QA工具。我们内部QA工具的初始版本仅能够初始化测试数据和执行作业。因此,所有输出结果均通过目视检查。例如,需要目视检查数据库数据、发送到 CIC 的文件、输出到 Google Cloud Storage 的文件、输出到替代 CIC 的存根服务器的文件等。
我们逐渐将小单位中耗时的步骤机械化。必要时,我会使用 shell 脚本或 Python 编写脚本,或者要求开发团队帮助我们改进内部 QA 工具。
-
目视检查数据库和创建的文件是最困难的部分,因此我请求修改内部 QA 工具,该工具允许我们编写断言处理,如本示例所示。就效果而言,消除了测试结果的目视确认,可以机械检查,从而大大提高了效率。
-
我们曾经使用浏览器查看并复制粘贴Docker镜像标签名称到ContainerRegistry中,但使用浏览器非常不方便。至于标签名称本身,可以使用gcloud命令获取列表并过滤它们,但为了获取特定名称的最新标签名称,必须解析gcloud命令的结果并提取标签名称。我们创建了一个Python脚本来检索标签名称,并且还可以使用shell脚本将标签名称复制到剪贴板。这样就可以通过一个命令检索特定的标签名称,而无需访问浏览器。
-
我们曾经使用浏览器直观地检查云存储中的文件,但这也相当繁琐。通过使用Cloud Storage的gsutil工具,可以操作Cloud Storage中的文件。因此,我们将这个过程自动化,使用Python执行gsutil命令,通过检查文件是否可以下载来检查文件是否存在。这使得可以使用单个命令检查文件,而无需使用浏览器访问它们。
-
创建一个简单 shell 脚本。因此,现在可以使用单个命令对每个函数执行回归测试。
说到自动化,可能大家还会关心可维护性。这可能是事后诸葛亮,但底线是几乎不需要维护,而且考虑到创建自动化系统的成本,它已经物超所值了。我想了一下原因,觉得是因为脚本是小单元写的,所以稍微改变一下流程不会有太大影响,也因为本来就很难改变流程从功能的角度来。而且,由于脚本单元很小,所以在跟上时很容易阅读和理解。即使脚本由于某种原因停止工作,我们基本上只是将之前手动执行的内容转换为脚本,因此如果我们部分切换到手动,QA 也不会停止。
“Cypress + TestRail”
“ Cypress ”是一个端到端测试框架,已成为前端端到端测试自动化的标准。
“ Cypress ”也用于前端开发过程中的测试,因此我们可以随时寻求帮助或审查我们的工作,非常方便。
我们对职责进行了划分,QA工程师负责发布前的回归测试,产品开发工程师负责单元测试和集成测试。
我们还使用“ TestRail ”来系统化测试用例管理,以继续改进工作流程。
自动化问题
老实说,我们在自动化方面遇到了很多问题。
-
可维护性
此问题涉及对已创建的测试用例的维护。准备一个允许其他人也可以执行维护的环境非常重要,是我们现在面临的主要问题之一。
-
个性化
我们的大多数测试都针对微服务,因此当测试出现问题时,可能很难找出问题到底发生在哪里。确定问题的原因可能需要时间。而且,即使我们找出原因,如果问题发生在另一个团队的工作中,并且您被迫在没有足够专业知识的情况下解决问题,那么解决问题可能需要时间。在这方面,我们必须努力减少这种情况的发生,让事情变得更容易理解,消除个别情况。我们还开始了解使用 Scenarigo 创建测试场景的问题。
-
门槛高
使用 Scenarigo 的一个好处是它是一个内部工具,因此我们可以预期它会得到改进。感谢我们工程师的“一体”合作,我们可以使用该工具做更多事情,并且比两年前更容易使用。然而,内部工具不可避免的缺点是组织外部的人不知道如何使用它。我们通过创建有关如何使用 Scenarigo 的手册并举办学习会议和讲座来弥补这一点。
-
可读性/可视化不足
我们正在解决的另一个问题是如何处理运行自动化测试的结果。我们在发布前使用结果做出决策,但我们还必须使用自动化测试来始终控制我们服务的健康状况。如果这些测试结果可以随时随地由任何人查看,那就太好了。我希望能够营造这样的环境。
未来的挑战
尽管我们已经引入了此类工具来自动化测试,但我们仍然存在基于手动测试编写自动化场景测试的情况。这就是为什么我要求我们的团队成员尝试在流程的早期阶段纳入自动化基础,以便我们可以在上游更高的流程中编写自动化场景。
从短期来看,对所有验证过程使用手动测试可能会让我们更快地发布产品和服务。然而,我希望团队中的每个人都能明白,自动化重复场景测试将使未来的测试更加高效,并有助于确保可靠的质量。我们想专注于构建一个允许自动化测试的环境。我们可能会继续在Merpay开发快速发布周期的产品,所以我认为我们每个人都有必要从中长期的角度来考虑我们的验证计划。
我们还想找到一种在整个产品中引入自动化的方法,而不必在后端、前端和本机应用程序之间分割自动化。QA团队的主要自动化测试仍然只用于后端。我们想研究一下前端和本机应用程序,以便我们可以研究适合整体而不仅仅是部分的自动化方法。
测试开发圈年度技术交流大会,MTSC2023|深圳大会,你关心的技术话题都在这里!(点击查看)
MTSC 2023 第12届中国互联网测试开发大会(深圳站)即将于2023年11月25日,在『深圳登喜路国际大酒店】举办,大会将以“1个主会场+4个平行分会场”的形式呈现,聚集一众顶尖技术专家和行业领袖。他们将围绕如今备受关注的行业热点话题以及最前沿的实践经验,进行深入探讨和分享。
此外,大会前一天,11月24日,社区还组织了【AIGC主题 闭门研讨会】,面向对于Al软件测试应用、降本增效等技术管理等方向,组队针对特定议题进行讨论、提出解决方案,最后由讲师评审讨论投票选出优秀方案。感兴趣的同学,可以联系票务同学进行咨询报名。
相关文章:

日本移动支付Merpay QA团队的自动化现状
Merpay是日本最大的网购平台之一Mercari的无现金支付系统。Merpay 的主要功能是让用户在 Mercari的网站上购物,也可以在日本的许多实体店和餐厅使用它,也可以理解为日本的“支付宝”。以下为Merpay QA 团队在自动化方面的一些思考: 这几年&am…...

EasyExcel复杂表头数据导入
目录 表头示例导入代码数据导出 表头示例 导入代码 Overridepublic void importExcel(InputStream inputStream) {ItemExcelListener itemExcelListener new ItemExcelListener();EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet()…...

【Redis】Redis安装教程基本操作语法
【Redis】Redis安装教程&基本操作语法 一、Redis简介1.1.什么是Redis1.2.Redis与传统数据库的区别主要 二、Linux安装Redis2.1.安装Redis2.2.解压安装包2.3.解压后执行安装gcc2.4.编译Redis2.5.修改Redis为守护进程2.6.启动Redis服务2.7.配置密码且外部连接2.8.重启服务器2…...
spring-boot-autoconfigure.jar/META-INF/spring.factories介绍
spring-boot-autoconfigure.jar/META-INF/spring.factories是Spring Boot自动配置的核心文件,它包含了各种自动配置类的注册信息。这个文件是Spring Boot根据应用程序的依赖关系和配置文件中的条件注解,自动加载和配置所需的Bean的依据。 在spring.fact…...

vue3视频大小适配浏览器窗口大小
目标:按浏览器窗口的大小,平铺视频,来适配屏幕的大小。 考虑使用 DPlayer.js、video.js、vue-video-player等视频插件,但报了各种各样的错;试过使用 js 对视频进行同比例放大,再判断其与窗口的大小取最小值…...

Nignx安装负载均衡动静分离以及Linux前端项目部署将域名映射到特定IP地址
目录 一、nginx简介 1.1 定义 1.2 背景 1.3 作用 二、nginx搭载负载均衡提供前后分离后台接口数据 2.1 nginx安装 2.1.1 下载依赖 2.1.2 下载并解压安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.2.1 负载均衡所需服务器准备 2.2.2 配置修改 …...

Plist编辑软件 PlistEdit Pro mac中文版功能介绍
PlistEdit Pro mac是一款功能强大的Plist文件编辑软件。Plist文件是苹果公司开发的一种XML文件格式,用于存储应用程序的配置信息和数据。PlistEdit Pro可以帮助用户轻松地编辑和管理Plist文件。 PlistEdit Pro具有直观的用户界面和丰富的功能。用户可以使用该软件打…...

CSS3网页布局基础
CSS布局始于第2个版本,CSS 2.1把布局分为3种模型:常规流、浮动、绝对定位。CSS 3推出更多布局方案:多列布局、弹性盒、模板层、网格定位、网格层、浮动盒等。本章重点介绍CSS 2.1标准的3种布局模型,它们获得所有浏览器的全面、一致…...

【npm run dev 报错:error:0308010C:digital envelope routines::unsupported】
问题原因: nodejs版本太高(nodejs v17版本发布了openSSL3.0对短发和密钥大小增加了更为严格的限制,nodejs v17之前版本没有影响,但之后的版本会出现这个错误,物品的node版本是20.9.0) 解决方式࿱…...

天猫商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)
要获取天猫商品评论接口,您需要使用天猫开放平台提供的API接口。以下是一些可能有用的步骤: 注册并登录天猫开放平台,获取开发者账号。在开发者中心创建一个应用,获取应用的App Key和App Secret。使用天猫开放平台的API接口&…...

redis数据库简介
Redis是什么 Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性: 基于内存运行,性能高效支持分布式,理…...

数据结构 - ArrayList - 动态修改的数组
目录 实现一个通用的顺序表 总结 包装类 装箱 / 装包 和 拆箱 / 拆包 ArrayList 与 顺序表 ArrayList基础功能演示 add 和 addAll ,添加元素功能 ArrayList的扩容机制 来看一下,下面的代码是否存在缺陷 模拟实现 ArrayList add 功能 add ind…...

python爬虫实战——今日头条新闻数据获取
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 第三方库: requests >>> pip install requests 第三方模块安装: win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你…...

ardupilot开发 --- gdb 篇
环境 win11 vscode 1.81.0 wsl2 ardupilot 利用gdb工具在vsCode中实现 Ardupilot SITL的断点调试 优点:可在vsCode中实现断点调试。 参考文献:https://ardupilot.org/dev/docs/debugging-with-gdb-using-vscode.html 安装gdb工具 打开wsl࿰…...
在Vue项目中定义全局变量
在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。 定义全局…...
.net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
public class HttpClientPool : IDisposable {private readonly ConcurrentQueue<HttpClient> _httpClientPool; // HttpClient 对象池private readonly SemaphoreSlim _semaphore; // 控制同时访问 HttpClient 对象池的线程数private readonly TimeSpan _timeout; // 获…...

大促期间如何监测竞品数据
无论在什么时候,竞品的数据都是品牌非常关注的,大促当然也不例外,所以准确监测到竞品数据应该如何分析也很关键,通过分析竞品,品牌可以获取非常多有价值的内容,如竞品王牌产品的分析、行业分析报告等。 力维…...
Linux yum 没有可用软件包 fping。 错误:无须任何处理 的解决办法
yum install fping -y 报错解决: [rootcpcs-node-d4n591 ~]# yum install fping -y 已加载插件:fastestmirror Determining fastest mirrors* base: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com base …...

人工智能与脑机接口:开启人机融合的新时代
人工智能与脑机接口:开启人机融合的新时代 随着人工智能(AI)技术的飞速发展,我们正与一个全新的时代相遇——人工智能与脑机接口相融合的时代。这个时代将带来前所未有的变革,让人类与机器的交互方式发生根本性的改变。…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...