网约车订单自助测试演进与落地实践

news2024/10/6 12:20:40

1

业务背景

网约车业务作为滴滴的核心业务,系统架构复杂、整个订单链路涉及众多下游服务,整体迭代频率高,同时在产品形态上通过不同品类提供差异化服务能力,整体品类从最初的专车、快车延展到如今多个品类,这就导致在日常的功能迭代中需要实现特定品类场景或者特定功能测试的成本非常高。举几个典型的例子:

A拼车场景:需要两个乘客同时登陆、同区域发单,由同一个司机实现两个订单的接单并完成履约。

B连环派订单场景:需要司机在未完成上一单的情况下,已经接到下一单。

这两个典型的例子是网约车同学测试工作中常见的测试和验收场景,但是上述的场景对于测试乘客账号所在区域和测试司机账号具备的听单能力等要求很高,往往需要通过多个端同时操作,耗费大量的时间,结果也很难完成该场景的构造,因此各个业务线对于便利的订单场景构造和测试能力有着强烈的诉求,网约车质量效能团队在不同的业务发展阶段结合业务特点形成了具备服务化、标准化的订单测试能力,以求提高研测效率、保证业务高质量交付。

2

订单测试流程

网约车整体订单交易链路上下游涉及多个服务、服务与服务之间相互关联,在核心打车业务中,服务端API向上接收端上请求并组装返回,向下串接订单、计价、收银等业务中台的各个系统,完成整个打车流程。

9c7a1c13146536d5fde94de65d74a2d2.png

在订单测试中,不同的上下游依赖订单状态流转、为了完成订单过程流转、订单测试通过调用服务端主流程API,实现节点间参数传递完成流订单程串联,进而实现订单状态变更。

3

订单测试演进过程

端造单测试(2015年以前)

业务应用

业务发展早期的测试模式完全依靠端实现订单测试,在真实乘客端模拟乘客进行价格预估发单、通过真实司机端实现完单,进而完成场景验证。

6fd0d9d36b3ddb6b21f32951c696e2ae.png

端造单测试

测试优势

端测试具备高度仿真性、完全模拟在正常业务场景下乘客发单到司机完单的全流程,整个过程不存在业务mock、场景验证更加全面、完整。

测试不足

  • 由于纯端测试走正常的分单和派单逻辑,因此在日常的业务测试过程中需要在特定地区进行造单,尽管如此也不能保证每次都可以被指定司机接单,成功率较低。

  • 端测试需要通过代理配置打到指定环境,这就导致每次造单测试需要经过复杂的代理配置。

  • 复杂订单场景通过端构造步骤繁琐、非常耗费人力。

工具化造单测试(2015年-2020年)

业务诉求

端模式是业务初期研发测试的主要手段,伴随着网约车业务的快速发展,业务复杂度越来越高,单纯通过端已经不能完全模拟线上订单场景,业务上需要更复杂的发单和接单场景订单,需要更高的接单成功率、更稳定的造单能力。

工具建设

通过构建订单流转工具维护高频订单测试场景、mock司机接单,通过工具造单方式,全部脱离或者半拖离端的模式实现特定订单场景链路构造。

在工具侧主要实现4类核心能力:

  • 订单场景库:维护核心订单场景的参数信息。

  • 订单流转:mock乘客和司机全流程测试面板。

  • 司机流转:mock司机全流程面板。

  • 通用接口请求:支持接口测试。

b06b56e536b86746356c525ecb02c620.png

工具化造单测试

工具不足

随着业务的发展,基于端+订单流转工具的模式的弊端开始凸显出来,主要体现在3个方面:

  • 场景的更新和维护存在延迟,由于工具的维护方主要在质量中台,这就导致业务场景的迭代变化很难同步到工具维护方,并且随着敏捷开发的推进,这种延迟越发明显。

  • 订单流转工具的流转结果无法在不同用户之间进行协同共享,整个订单测试过程无状态管理、难以有效跟踪整体测试流程。

  • 订单流转工具目前只能支持主流程的订单链路测试,针对更具有一般化的订单分支支持力度不足,并且由于人力原因,新增场景的周期一般都在天级别,制约业务迭代。

自助化造单测试(2020年至今)

业务诉求

订单流转工具经过长时间积累,在场景上具备了网约车核心订单流转场景超过70多个,但是由于工具的维护和迭代固有的弊端,存量场景和线上真实场景在数量和仿真性上差距明显,业务上希望可以通过在现有订单流转场景的基础上可以快速构建个性化场景链路测试,实现订单测试场景的快速搭建。

功能架构

基于可视化、标准化和智能化的原则,在订单流转工具的基础上,构建了自助化的造单测试能力。

397b6b5f77de885b21a69bd126e76c58.png智能化造单功能架构

基于自助化造单测试的变化点:

  • 可视化的链路组装能力,通过简单积木搭建方式实现链路场景沉淀。

  • 便利的场景共享能力,实现跨团队合作协同。

针对订单场景多样性的核心诉求在于将场景的维护和迭代交给一线业务同学,让业务同学可以自己生产场景、应用场景,因此提供便利的链路组装调试能力、和互相协同共享能力,将很大程度赋能业务同学实现自助测试。

链路组装调试

订单场景编辑调试的难点主要有两方面:

1、初始化参数构造困难

2、场景编排调试耗时严重

解决思路:通过链路数据预置降低用户获取参数成本,同时基于组件化思想将编排调试做到更灵活易用。

具体解决方案:

ea40f5c06066f4fa79738a694f39f686.png

链路编排调试

  • 在链路编辑过程中打通把脉日志系统,在历史日志中基于链路抽取规则经过数据脱敏实现链路数据的初始化,同时基于模版复用的能力,已经沉淀到平台的链路场景也可以提供初始化能力。

  • 在链路编排时,将数据、环境、链路进行组件化打包形成链路节点,基于web拖拽实现链路调整,场景沉淀时通过标准化的数据拆分持久化存储到DB,为后续数据分析统计以及场景复用提供便利。

编排效果:通过页面拖拽快速进行链路调整调试如下。

34b1effc9a6de2fe76aa5c03b0b4b4ff.png

web编排

场景协同共享

  • 场景协同

将业务沉淀的场景归属属性进行扩展,形成跨归属用户的协同属性,通过协同将沉淀场景进行复用,形成跨业务线的订单测试管理和管控。

  • 共享池

用户可以将调试好的订单场景推到本部门共享池,通过共享方式将订单场景的协同从点对点扩展到点对面,所有的用户都可以方便的在共享池使用已经沉淀的订单场景。

7d8b6a0a4e54aa79a065ab071a2e0caf.png

协同共享   

4

应用效果

目前通过自助测试能力已经沉淀330多个订单测试场景,且在持续新增中;使用人群方面、每月支撑500多位用户调试执行。

5

总结展望

订单测试演进至今,在各个业务团队的协同合作下,在效率和可用性方面有了阶段性发展。但是随着业务的不断演进,针对订单测试的诉求在不断迭代,订单测试能力需要不断优化适应业务变化,基于现有业务特点,在未来会在以下两个方面继续探索:

  • 赋能测试左移

自助测试降低订单测试构造成本,让业务同学可以快速的构建的订单测试场景,实现问题的提前发现,助力测试左移,在流程中订单测试需要打通环境准备、测试集成、结果反馈、实现无感知的全流程订单测试。

  • 智能场景构建

进一步通过线上流量分析,场景数据回放等实现测试场景的智能化构建,降低场景构造成本,实现一键式场景链路搭建验证。

 END 

作者及部门介绍 

本篇文章作者宋

玉磊、于敞,来

自滴滴网约车出行技术团队,出行技术作为网约车业务研发团队,通过建设终端用户体验平台、C端用户产品生态、B端运力供给生态、出行安全生态、服务治理生态、核心保障体系,打造安全可靠、高效便捷、用户可信赖的出行平台。

招聘信息

团队后端、测试需求招聘中,欢迎有兴趣的小伙伴加入,可以扫描下方二维码简历直投,期待你的加入!

研发工程师

岗位描述:

1. 负责相关业务系统后台研发工作,包括业务的架构设计、开发,控制复杂度,提升系统性能和研发效率;

2. 有业务 sense,通过不断的技术研究和创新,与产品、运营一起快速迭代提升业务的核心数据。

ad75545d9244db0988c8a12e88975078.png

测试开发工程师

岗位描述: 

1. 构建适用于网约车业务的质量保障体系,制定并推进相关质量技术方案落地,持续保障业务质量;

2. 深入了解业务,与业务中各角色建立沟通,总结业务问题与痛点,全方位为业务创造价值,工作不设固定边界;

3. 通过应用相关质量基础设施,提升业务代码质量和交付效率;

4. 沉淀高效测试解决方案,并能提供通用化方案,支持在其他业务线落地应用;

5. 解决业务质量保障中的难点问题、复杂技术难题;

6. 质量技术领域前瞻性探索。

bd092161f286713b985194ee4df1332c.png

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

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

相关文章

Android 分别使用Java和Kotlin给Textview设置第三方字体、APP全局字体、 Android X字体设置

前言 本文介绍Android实现全局设置自定义字体和局部设置自定义字体即单个TextView设置字体,同时也提供了一些优秀的三方字体框架,基本可以满足开发者对字体设置的全部要求。 使用自定义字体前后效果图 一、assets是什么? 首先需要了解Andr…

【11】STM32·HAL库开发-STM32CubeMX简介、安装 | 新建STM32CubeMX工程步骤

目录 1.STM32CubeMX简介(了解)2.STM32CubeMX安装(了解)2.1STM32CubeMX软件获取2.1.1获取Java软件2.1.2获取STM32CubeMX软件 2.2搭建Java运行环境2.3安装STM32CubeMX软件(必须先2.2再2.3)2.4下载和关联STM32…

若依cloud(RuoYi-Cloud)新增业务模块和功能模块增删改查演示

前言 看了几篇文章感觉都不太满意,索性自己来写一篇。 一、后端 后端新建业务模块流程大致如下: 1、后端新建一个(在ruoyi-module模块下)业务模块,仿照已有的模块将此模块配置好,例如仿照系统模块&…

6、PHP语法要点(1)

PHP的语法跟C语言还是类似的。 1、变量不用定义即可直接使用。 2、函数外定义的变量为全局变量。global 关键字用于函数内访问全局变量。 3、static 用于保持函数内局部变量的值。但在函数外依然不能访问。 4、PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。…

GptFu0k——ChatGpt连接源爬取器

最近ChatGPT的热度下去了,但是我相信,很多真正需要的人还是一直在用的,为了解决ChatGPT账号的问题还有网络连接问题,通常会花费大量时间去寻找,为了解决这个棘手的问题,GptFu0k横空出世,全网爬取…

提高LLaMA-7B的数学推理能力

概述 这篇文章探讨了利用多视角微调方法提高数学推理的泛化能力。数学推理在相对较小的语言模型中仍然是一个挑战,许多现有方法倾向于依赖庞大但效率低下的大语言模型进行知识蒸馏。研究人员提出了一种避免过度依赖大语言模型的新方法,该方法通过有效利…

Ctfshow Crypto全

目录 各种各样的编码 crypto0(凯撒) crypto2(jsfuck) crypto3(aaencode) crypto4(知p q e求d) crypto5(知p q e c求d) crypto6(Rabbit) crypto7(Ook!) crypto8(BrainFuck) crypto9(serpent) crypto10(quoted-printable) crypto11(md5) crypto12(埃特巴什码) cryp…

AI Chat 设计模式:8. 门面(外观)模式

本文是该系列的第八篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 请介绍一下门面模式A.1Q.2 该模式由哪些角色组成呢A.2Q.3 举一个门面模式的例子A.3Q.4…

vue的computed复习

1.复杂 data 的处理方式 三个案例:  案例一:我们有两个变量: firstName 和 lastName ,希望它们拼接之后在界面上显示;  案例二:我们有一个分数: score  当 score 大于 60 的时候&#xf…

云拨测全面升级丨单次拨测低至 0.001 元

作者:少焉 随着云原生、微服务技术的发展,可观测需求变得越来越强烈,作为可观测技术的重要能力之一,云拨测(Synthetics Monitor)由于其零侵入、开箱即用、主动式监测手段,也受到很多用户的青睐…

arcgis建筑物平均高度

主要用到相交和属性表的汇总功能。 路网 建筑物栋 相交结果 右键,bh列汇总 原始块有392,这里只有389,说明有的地块没有建筑,所以应该将表连接到原始街区上检查是否合理,以及随机验证一个结果是否正确。 连接结果&…

【问题总结】基于docker-compose实现nginx转发redis

目录: 文章目录 需求简介:Q1: nginx的http模块和http模块有什么不同Q2: 可以都使用stream模块进行配置吗 Docker环境下如何转发1 修改docker-compose2 修改nginx.conf3 测试连接 需求简介: 需要在192.168.3.11的ngnix上,转发192.…

wordpress 导入数据后 为什么总是跳转到安装页面

在WordPress导入数据后跳转到安装页面的问题可能由以下原因引起: 数据库连接问题:在导入数据之前,确保您的WordPress配置文件中的数据库连接信息正确且完整。打开 wp-config.php 文件,确保数据库的名称、用户名、密码和主机信息是…

springboot整合spring security的简单入门案例

一 工程结构 二 配置操作 2.1 pom文件配置 <!-- Spring Security依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> 2.2 config配置 Config…

vue中预览pdf

情况一 如果后端返回的pdf地址&#xff0c;粘贴到浏览器的url框中&#xff0c;可以在浏览器中直接进行预览的&#xff0c;那么我们就用window.open&#xff0c;或 a标签&#xff0c;或iframe标签通过设置src进行预览即可 法1&#xff1a;可以直接使用window.open&#xff08;…

css学习知识总结

一、css与html连接&#xff1a; 可以将css语句放在html内部&#xff0c;一般放在<head>之下&#xff0c;定义在<style>中&#xff0c;格式一般是一个“.”然后加上一个“名称”再加上一个“{}”&#xff0c;再在“{}”内部定义具体的语句。 二、调整元素 2.1 字体…

网络 socket

文章目录 概念和 TCP、UDP 区别和 HTTP 区别 概念 为网络通信提供的接口&#xff0c;定义了应用程序如何访问网络资源、如何发送和接收数据等&#xff0c;Socket 是一个包含了IP地址和端口号的组合&#xff0c;当一个应用程序想要与另一个应用程序通信时&#xff0c;它会向特定…

6.3.5 利用Wireshark进行协议分析(五)----捕获并分析ICMP报文

6.3.5 利用Wireshark进行协议分析&#xff08;五&#xff09;----捕获并分析ICMP报文 一、捕获ICMP报文 打开Wireshark&#xff0c;选择网络接口并点击开始按钮。分组列表面板不断刷新抓渠道的数据包&#xff0c;为了过滤出我们所要分析的ICMP报文&#xff0c;我们在过滤框中输…

线程池学习(六)线程池状态转化

线程池状态定义 // runState is stored in the high-order bits // 线程池创建之后的初始状态&#xff0c;这种状态下可以执行任务private static final int RUNNING -1 << COUNT_BITS; // 线程池不再接收新的任务&#xff0c;但是会将队列中的任务执行完 private s…

Go-新手速成-流程语句

1if Go的if不建议写&#xff08;&#xff09;&#xff0c;over //if条件判断age : 16if age < 18 {fmt.Println("未成年")} 2for循环 Go摈弃了while和do while 循环&#xff0c;因为他做到了极简(也不要括号) 这么写可以 total : 0for i : 0; i < 100; i {…