【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问:
“做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”?
首先这个要求我觉得挺正常,一方面评审可以查漏补缺完善细节,另一方面也可以考察具体的落地经验和能力。
其次,我认为技术方案其实有个通用的模版,或者说抽象的经验参考,这也是本篇文章我想聊的话题。
结合个人的工作实践和思考,我认为构成一个技术方案,有如下五点要素:
- 背景现状:当前的业务、技术表现,遇到了什么问题;
- 痛点挑战:这些问题对业务和技术带来了哪些痛点,要解决痛点面临哪些挑战;
- 落地方案:为了解决上述的痛点和挑战,打算从哪些方面用什么手段在什么时间来解决;
- 产出价值:产出是什么,从哪些维度衡量产出,用哪些指标评估问题的解决程度和创造的价值;
- 总体规划:整体规划是什么,短中长期里程碑是什么,要投入哪些资源,需要谁协同配合,对业务和团队价值;
下面的内容,我会从上述五点要素来展开说明。
阐述背景现状
首先,在编写技术方案的时候,第一也是最重要的一点,一定要阐述清楚项目背景或当前现状。
我发现很多同学有所谓的技术偏执,遇到问题第一反应是解决问题,拿着锤子满世界都是钉子。
但其实,我更建议在遇到问题时,首先应该考虑如下几点:
- 当前问题是偶发问题还是频发问题;
- 类似的问题在其他团队/场景是否存在;
- 除了方案A,有没有方案B或者方案C来解决问题;
- 如果不做该方案,当前问题造成的损失是否可以接受;
这样思考问题的好处在于:
- 避免陷入技术陷阱,在低层次挣扎;
- 找到更高维度的解决方案,解决更大更多的问题;
- 降低重复解决低级问题而带来的资源浪费和精力分散;
那如果要落地自动化测试,背景或者说现状怎么写呢?可以参考如下例子:
- 业务范围大,业务场景复杂,每次发版要回归的case太多;
- 业务趋于稳定,但测试时间较少,可能无法发现更多更细节的问题;
- 迭代周期比较快,测试人力资源不足,回归测试无法覆盖更多的场景;
如上例子仅供参考,阐述背景的原因在于体现当前面临的问题,以便引出后续的解决方案,这是有的放矢。
列举痛点挑战
上面列举了三条当前现状的例子,从中可以发现,当前的现状带来了哪些痛点和挑战。总结如下:
- 测试case比较多,回归耗时(时间);
- 业务稳定但测试时间不足,容易漏侧(质量);
- 测试人力资源不足,会导致测试时间变长或加班赶工(成本);
还记得之前我在软件工程的文章中提到的质量三要素吗?他们分别是时间+范围+成本。
当然,日常工作中还有可能有其他痛点,比如测试用例中很多前置动作都是重复性场景,比如日常测试效率不高需要提高测试过程效率,再比如测试团队的技术建设等原因。
列举痛点和挑战的目的在于,即承接了上面的现状和问题,又可以为后续的技术方案铺路,整体逻辑要清晰合理。
说明落地方案
阐述了现状背景,列举了痛点挑战后,接下来就是要说明通过什么方式来解决这些问题,这就是落地方案。
一般在编写技术方案时,我个人的经验是如下几点必须重点说明:
- 技术方案针对的需求或业务范围(比如核心业务,核心服务,高频流程);
- 技术方案的选型、对比结果和demo效果是否适合当前的团队(成熟稳定的工具+活跃的生态&丰富的文档+简单的上手难度+较低的维护和二次开发成本);
- 方案落地所需要投入的资源(人力+时间+购买的资源)、需要哪些团队&人协同配合(沟通协作管理成本);
- 方案落地有哪些关键节点&里程碑(落地步骤1-2-3-4-5,分别在什么时候达成什么效果解决什么问题);
- 不同里程碑阶段,用哪些指标度量评估问题得到了解决,项目达到了预期效果;
技术方案编写完成后,一定要拉上领导和相关同学以及配合方进行评审。一方面是查漏补缺,另一方面也体现出自己的专业能力,当然有的时候最好能和协作团队达成利益一致,这样可以获得更好的支持配合。
罗列产出价值
具体的落地方案评审结束,接下来就要重点聊聊项目产出和价值了。
产出决定了你的工作量,价值决定了你的KPI和年终绩效,因此这点还是很有必要重点说明的。
当然,衡量产出和价值,一定需要具体的可量化的指标,否则无法量化的东西无法谈价值。
以自动化测试为例,我个人的观点是基于实际的目的出发来制定度量指标。举例:
| 自动化测试目的 | 细分类型 | 度量指标 | 如何度量 |
| 效率 | 造数据效率 |
| 和手动造数耗时对比 |
| 冒烟测试效率 | 冒烟执行耗时 | 和手动冒烟测试耗时对比 | |
| 线上回归效率 | 回归执行耗时 | 和手动回归测试耗时对比 | |
| 覆盖率 | 接口覆盖率 |
| 梳理核心接口,投入最多资源精力 |
| 用例覆盖率 |
| 梳理核心case,投入最多资源精力 | |
| 业务场景覆盖率 |
| 根据业务场景,case by case度量 | |
| 过程质量 | 构建执行成功率 | 自动化任务执行成功率 | 低于某个阈值判定脚本质量不通过 |
| 用例执行通过率 | 自动化case执行成功率 | 低于某个阈值判定提测质量不通过 |
制定度量指标时,建议遵循如下几点:
- 切忌面向指标/面向KPI做度量;
- 考虑到冗余成本,指标不宜过多;
- 制定指标是为了提升质量,而非做数据;
- 根据做自动化测试的目的来制定度量指标;
- 度量指标对比应该以是否解决了痛点为依据;
- 度量指标是辅助评估依据,并不是唯一正确的结果;
- 制定指标应考虑到哪些指标更实际有效,从解决问题角度出发;
- 度量指标不要单一的评估,应结合多个维度来综合评估开展质量度量;
概括总体规划
聊完产出和价值,方案基本就算完成了,但为了锦上添花,大家可以考虑阐述自己对于项目的总体规划和构思。比如:
- 当前现状是A;
- 第一阶段要达成B效果,解决C问题;
- 未来半年要达到D效果,这样做的好处的E;
- 长期来看,遮掩做对业务和技术团队的价值是F;
有句话我觉得说的挺对的,惠而不费的话要多说&事要多做。
总结:
现阶段很多人都在说软件测试太内卷了,工作太难找了,竞争太激烈了。那么如何在这样的现状下使得自己更具有竞争力呢?笔者认为大家需要迅速学习软件测试的硬技能,提升自己的业务能力,早日摆脱初中级测试的Title,虽然测试人员众多,但是高级的软件测试人员还是很稀缺,有很多人挂着高级测试的头衔却还在干着初中级测试的活。在掌握这些硬技能的同时,软技能的培养同样重要,沟通能力、自主学习能力越来越被企业看重。
如果不想被这个时代淘汰,就要做好持续学习的准备。下方给大家准备了全套的软件测试,自动化测试全套教程。
【需要的可以点击下方官方推广小卡片扫码备注000免费领取】

相关文章:
【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...
67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...
代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...
Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...
阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...
MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...
安全渗透测试中的一款免费开源的超级关键词URL采集工具
安全渗透测试中的一款免费开源的超级关键词URL采集工具。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使…...
数据资产管理实践白皮书(6.0版)解读
目录 第一章数据资产管理概述 ( 一 ) 数据资产管理和数据要素的关系...
c/c++开发,无可避免的函数指针使用案例
一、函数指针简介 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。例如: char* (*pf1)(char * p1,char *p2); 这是一个函数指针,其…...
QT(12)-QThreadPool
1 简介 QThreadPool是Qt框架中的一个类,提供了一组工作线程池。该线程池自动管理一组工作线程,在线程可用时分配任务。使用线程池的主要优点是,它可以减少创建和销毁线程的开销,因为可以重复使用线程。 线程池设计用于场景中&am…...
【Java|golang】1138. 字母板上的路径
我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。 我们可以按下面的指令规则行动: 如果方格存…...
Flink 1.14从简单到源码第三讲
文章目录 1.flink多流操作Api1.1split 分流操作1.2.侧输出流1.3.connect 连接操作1.4.union 操作1.5 coGroup 协同分组1.6 join1.7 broadcast 广播2.process3.并行度和Api3.1 任务提交简单流程3.2 task与算子链4. Flink 时间相关(窗口计算)4.1时间语义(窗口计算)4.2 新版api指定…...
淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token
custom自定义API操作buyer_order_list获取购买到的商品订单列表buyer_order_detail获取购买到的商品订单详情buyer_order_express获取购买到的商品订单物流buyer_address_list收货地址列表buyer_address_add添加收货地址buyer_info买家信息buyer_token买家tokenseller_order_li…...
ucos-ii 的任务调度原理和实现
ucosii 任务调度和原理1、ucos-ii 任务创建与任务调度 1.1、任务的创建 当你调用 OSTaskCreate( ) 进行任务的创建的时候,会初始化任务的堆栈、保存cpu的寄存器、创建任务的控制块(OS_TCB)等的操作; if (OSTCBPrioTbl[prio] (OS_…...
Solon2 开发之容器,七、切面与函数环绕拦截
想要环绕拦截一个 Bean 的函数。需要三个前置条件: 通过注解做为“切点”,进行拦截(不能无缘无故给拦了吧?费性能)Bean 的 method 是被代理的在 Bean 被扫描之前,完成环绕拦截的注册 1、定义切点和注册环…...
代码随想录第十天(28)
文章目录28. 找出字符串中第一个匹配项的下标看答案KMPnext数组(前缀表)最长公共前后缀如何计算前缀表前缀表与next数组时间复杂度分析28. 找出字符串中第一个匹配项的下标 莫得思路……好久没做题,都已经忘得差不多了 看答案 其实就是自己…...
循环队列来了解一下!!
笔者在之前的一篇文章,详细的介绍了:队列之单向链表与双向链表的模拟实现:https://blog.csdn.net/weixin_64308540/article/details/128742090?spm1001.2014.3001.5502 感兴趣的各位老铁,可以参考一下啦!下面进入循环…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
