自动化测试高手-价值篇

news2024/11/17 13:46:19

 自动化测试的最终交付价值是什么:自动化测试项目的最终交付价值是它产生的收益,也就是投入回报率比,ROI,一个成功的自动化测试项目必然是获得了高ROI的收益。
自动化测试高手就是要做出成功的自动化测试项目,不仅要写代码让自动化测试跑起来,
而且要超脱于工具框架的层面,对测试需求和自动化ROI一起抽象建模,对最终ROI负责。

sheng-geek-zhuanlan · GitHub

 自动化测试ROI

ROI计算公式

实践中,n 是测试案例的稳定回归次数

 1.ROI 大于 1 就是赚了,小于 1 就是亏了。那么,给定一个测试案例,要不要对它做自动
化,判断的依据是(自动化测试)预期 ROI 至少要大于 1。


2. 自动化测试是一个长收益模式。在理想情况下,是一次性投入(投入为开发成本),之
后每运行一次,就会增加一份产出。所以,时间越长,次数越多,收到的回报就会越大。(所以自动化测试用来做回归测试)

一个测试案例 A 做不做自动化测试?首先要看看它的 n 能有多大。

在实践中,找到 n 来估算 ROI,能帮你判断一个案例该不该做自动化。


通过 ROI 得出的三个核心观点:
1. 自动化测试是用来做回归测试的。
2. 自动化测试从哪里开始?实施顺序从 ROI 高到低,也就是(给定一个软件系统),优先
做回归次数最高的那部分功能,先做自动化回归次数最高的案例,再做低的,直到 ROI 等
于 1 的案例。在功能模块的初期,可以考虑先做手工测试。
3. 自动化测试什么时候开始?功能模块稳定的时候。

 实际上,有一个很好的测试实践可以匹配上面的要求,那就是冒烟测试。冒烟测试是测试
用例的子集,用来验证系统中基础的、影响发布软件的功能。甄选冒烟测试的一个常用办
法就是二八原则。

在软件领域,80% 用户,常用的是系统中 20% 的功能。冒烟测试覆盖的这部分 20% 功
能。

得到推论:在实践中,可以设定目标,冒烟测试 100% 自动化。这时,自
动化测试就可以和手工测试配合,形成一个新版本发布 + 冒烟测试的简单流水线。

文中提到的“冒烟测试”,我是否可以理解为产品主流程?还是说指的就
是持续集成中某个要提测feature的核心case?
作者回复: 我试着get一下你要说的意思哈,如果产品是基于work flow的,那么冒烟测试应该是产
品中那部分最常用最基本的flow path,应该就是你说的“产品主流程”。所以,冒烟测试的用途是
这样的,如果它失败了,其他的功能都不需要测了,直接返回开发修改。冒烟测试也可以用在很
多场景,提测feature是场景之一。

(个人观点:一般冒烟就是新功能的P1用例,是无法自动化的呀。可能这里指的冒烟是feature合并dev分支后,对dev分支进行的冒烟。)

 “听说你开发了个什么自动化脚本,它给公司带来了什么价值?用量化的数据给我讲一
讲。”

回答:目前每次发布时,回归测试用例有200条,这些用例在每次发布都需要执行,每年30次。

手工运行成本 t*30,开发和运维成本x ROI为t*30/x,

3KU法则:如何找出最优自动化实施截面?

 每层的 ROI。单元测试可以在开发人员每次 code commit 触发运
行,回归频率高;接口测试在每轮集成测试运行,回归频率中;UI 自动化测试在用户验收
测试,回归频率低。

 “自动化测试顺序从 ROI 高到低”,我们优先投入精力做 ROI 最高的单元测试,再做 ROI 中的接口测试,最后完成 UI 测试。

 FURPS 是用 5 个维度来描述一个软件的功能需求,FURPS 这个单词对应着每个需求的英文首字母:
F=Function 功能
U=Usability 易用性
R=Reliability 可靠性
P=Performance 性能
S=Supportability 可支持性

把测试需求和测试类型组合在一起,就整合了后面这个矩阵表格

 整体最优ROI 策略就呼之欲出了。什么是整体最优 ROI 呢?
有 3 个 Key(关键因素):
这样分配的工作,既不重复,又没遗漏,还遵循了 ROI 的原则。
Useful: 每个测试需求都是有效的;
Ultimate: 每个测试需求的验证都在优先寻找自动化 ROI 高的层面去实现,如果不可
行,按照 ROI 高到低回退,直到 UI 层;
Unique: 每个层面上验证的测试需求都和别的层面都不是重复的。

3KU 策略该怎么执行呢? 按照 3KU 策略,我们把表格里的测试需求,对照下面这三个问
题,按顺序检查一遍:
1. 能在单元测试验证么?

2. 能在接口测试验证么?
3. 能在 UI 测试验证么?

UI 测试关注功能场景测试,易用性测试和可执行性测试;而接口测试关注不同数据的循
环,接口的性能和错误恢复能力;单元测试关注算法的正确性和性能。

 在 3KU 测试金字塔下,每一个测试需求都会选择最大的 ROI 测试截面,通过这样的安
排,实现了整体最优 ROI 的目标。

 

 03|工具选择:什么工具框架值得用?

自动化测试案例是如何产生的,目前在业界,主要有 5 种方式。
方法一:录制和回放方法 

如selenium IDE

方法二:关键字编程

如 robot framework

方法三:模块库开发

方法四:BDD 混合框架

行为驱动开发,它通过 Gherkin 语法定义测试场景。

Gherkin 语法包含一套类自然语言的关键字:when、given、then,given 描述条件,
when 描述行为,then 描述结果。这样一个场景的 3 要素:上下文、动作和结果就说明白
了。如Cucumber。

 方法五:更高 ROI 的探索,自动化前沿技术

AI 根据规则自动生成测试案例

工具四维成熟度

选取工具的原则

1. 按照团队的技术能力、项目的预期长短、将来扩展的规模大小,选择 ROI 最大的工具框
架;

2. 当工具框架带来的 ROI 无法升高时,就考虑按照原则 1 重新评估,选择 ROI 更好的工
具框架。 

04丨脚本复用:什么样的代码才值得写?

提高复用率:一份代码,多浏览器运行

提高复用率:一份代码,多数据运行

提高复用率:一份代码,多环境运行

 dev,test,stage,productin 

提高复用率:一份代码,多语言运行 (用于产品支持多种语言)

降低自动化测试的维护成本,比
如:
1.Log 规范 +ELK+Grafana 实现告警实时传达。
2. 检查点 + 日志 + 屏幕截图甚至视频,提高诊断效率。
3. 高内聚低耦合的模块化设计,能够实现隔离错误,缩小影响范围,快速修复的效果。
4. 自动化测试上下线的标准和流程的建立。

05丨AutoGenAuto:所有测试工作即代码

黑盒测试领域的 Auto Gen Auto?

怎么做到 Auto Gen Auto 呢?用代码生成代码,前提是测试需求得有一定的规则或模式,
然后代码才能解析规则,根据规则生成最终的测试代码。

业界已经有了现成的工具,有 Spring Clond Contract,也有OpenAPI
generator。-可以直接把yaml文件中的接口文档,生成接口测试代码?

访问https://github.com/OpenAPITools/openapi-generator,按照指令,运行
generator 命令,在 Python,JavaScript,Java,Go 四种语言里选一种生成代码。

06丨左移&右移:测试如何在Dev和Ops领域大展身手?

 

 自动化测试左移到开发的日常活动中,开发人员每天做一次 code commit,做一次版本
构建就会触发自动化测试,运行频率随之提高。一旦自动化测试运行失败,要么是发现了
回归 bug,要么是自动化测试需要维护了,问题发现得越早,修复越快,自动化测试就越
健康,越稳定可用。在磨合调试的动态过程里,自动化测试越跑越稳定高效,团队也能实
实在在体会到它的用处。

测试右移是指测试活动介入线上运维,用户画像等工作。这里我
说的自动化测试右移,意思是自动化测试也可以在生产环境里运行,起到一个自动检查监
测的作用。

只要我们在客户遇到 bug 之前发现它,
测试工作仍然是有价值的。
这时我们可以建立一个机制,通过自动化测试来定时监测生产环境。每天定时触发自动化
测试任务的运行,去检测生产环境的业务功能是否正常,然后生成测试报告。

07|需求提炼(一):单体应用要测什么?

用户故事

一个软件软件功能需求要回答这三个问题:第一,这个功能存在的价值是什么?第二,软件是怎么实现这个价值的?第三,这个功能能给谁带来价值?

这三个问题,到后来就成了 User Story 的表达 3 要素,WHY 为什么、WHAT 是

什么和 WHO 为谁,把这三个要素说明白了,这个功能也就表达出来了。

功能需求的主要目的是描述功能的商业价

值逻辑,而不是刻画实现的细节。

用了这样一组关键字,as a 说明用户的角色,I want to 后面是描述用户的行为,so that是获得的商业价值。

 测试需求 BDD Feature

BDD 的全称叫做 Behavior Drive Development,行为驱动开发模式。

 把 User Story 细化成一个或多个 feature,每一个 feature 都是一个可测试的场景。

这个 feature 的文件书写也是有格式要求的,通过一个叫做 Gherkins 的语法关键字模版来
写 feature 文件。
Gherkins 提供的常见关键字有:
Given: 用户场景的前提条件,可以是时间条件,也可以是另外一个用户场景的输出结果。

When: 用户在这个场景里做的行为操作
Then: 行为的输出结果
And: 连接多个关键字
Gherkins 还提供了更多其他关键字

  Feature 要细化到什么程度呢?从测试角度来看,要达到可测试的程度,也就是说要能够通过 feature 来验收 UserStory,所以,feature 在敏捷开发里又叫 Accept Criteria,在传统测试里叫做验收标准。

(这里把用户故事拆分的feature定义为测试需求) 

(这里的feature更像我么现在所做的需求分析)

09丨3KU法则:为一个订餐系统设计全栈测试方案

自动化测试设计中的四大基本问题:做不做自动化?在哪里做、怎么做、怎么运行。

测试四象限法则能帮我们有效完成这个思考过程。这个测试四象限,是布雷·麦瑞克提出来
的方法模型:根据需求的性质和等级 2 个维度,对测试需求进行分类。
一个维度是测试需求的性质,是技术性还是业务性的?

另一个维度是测试需求的等级,也就是需求属于关键性的还是精益性的?

测试四象限

 针对每个象限,测试四象限法建议自动化测试实施策略如下:
 第一象限里的测试需求是 100% 全部自动化;
 第二象限里的测试需求是自动化 + 手工;
 第三象限里的测试需求是手工测试;
 第四象限里的测试需求是通过工具和框架来执行,追求 0 代码

设计 ROI 高的自动化测试的运行场景是很关键的,而软件部署管 线 Deployment Pipeline 就是重要的自动化测试运行场景之一。

在 2010 年,Jez Humble 出 版了《持续交付》一书,这里提出了部署管线的概念:
“部署管线是代码从开发人员的个人电脑到生产环境的自动化过程”。

沿着部署管线发布的方向,也就是从左向右,自动化测试的运行速度由快变慢,而 ROI 也 是由高到低。越靠近代码,活动越频繁,ROI 就越高,

 10|单元测试(一):原来测试可以这么高效

12|集成测试(一):一条Happy Path扫天下

测试需求首先要找 ROI 最高的截面来验证

15UI测试:如何让UI测试更轻快便捷?

从 UI 这个角度,主要有三个测试点需要去关注:第一,用户的行为;第二,UI 的布局;
第三是用户的易用性。当然,根据具体业务的需求,还有其他的点,比如 Globalization
全球化、Accessibility 亲和力。
BDD自动化测试框架,cucumber可以根据feature生成自动化测试代码

22丨设计实战(二):一个全周期自动化测试Pipeline的设计

pipeline分为devjob包括buildjob和unitestjob(Junit)输出devpackage
testjob包括APITesJob(RestAssure)和E2ETestJob(可以用selenium)输出releasepackage
DeploymentJob进行部署,把package部署到生产环境输出serviceurl

 

 

 

 pipeline变更:
可以加入sonar扫描,sonarjob添加为DevJob下的第一个子Job

23|设计实战(三): 一个分布式多端视频会议自动化测试设计

 

25丨找准方向:如何建立有效的测试度量体系?

 

 质量三角图

 这三个因素中有一个因素发生变化,就会影响其他两个因素

用这三个指标来代表交付质量。

1. 交付速度,是版本迭代的速度,我们可以用发布的周期来度量。

2. 交付范围,是新功能的规模,可以用新增代码行数来度量。

3. 质量,用生产环境发现的 Bug 数量来度量。

自动化测试是能够提升这三个指标的

内建质量可以划分成四个维度:需求质量、设计质量、开发质量和测试质量。每个维度展开以后,都是一组度量指标。

 

 “You can’t improve what you cannot measure”
学过 Job 模型后,你应该掌握了一个把复杂问题简单化的解决思路。那就是先做划分,再定位实现。
测试活动的度量?
不建议用生产环境发现的bug数量作为评价指标,会造成大家任务测试对最终质量负责的误区。
 评价测试的有效性,尽量不要以绝对数字来判断好坏。
建议指标:
Bug 泄漏率 = 生产环境的 Bug 数量 /Bug 总数量 (质量)
冒烟测试 Bug 泄漏率 = 生产环境的关键 Bug/ 关键 Bug 总数量
测试需求覆盖率 = 被测试的需求条数 / 总需求条数 (测试范围)
测试执行效率 = 自动化测试的案例 / 总共测试案例  (时间)

27丨眼见为实:如何用数据描述你的自动化测试ROI

28|解决问题:如何保证自动化测试的可信性?

 

通过自动化提升质量保障效率
所在的研发团队结合自身产品的特点,在软件架构、分支策略、GUI 测试框架、Mock 测试、Pipeline 流水线等多个方面,对产品进行了全方位的改造。
个人小程序实践:
把自动化下移至单元测试,并保证业务层代码 85% 以上的单元测试覆盖率;
通过将单元测试接入提交流水线,实现每次提交自动测试;
GUI 测试,通过手工测试覆盖关键路径。

专栏内容我通常会“刷上三遍”:
1. 第一遍略读,了解课程内容;
2. 第二遍精读,边读边做笔记;
3. 第三遍直接看笔记,看能否回忆起课程内容,如果回忆不起来,就再补充笔记

自己画思维导图,加深理解。

“从书中学,和高手聊,在事上练”

那些未达预期的自动化方案,应该如何改进?我的答案是,
首先要拉通开发和测试,应用 3KU 法则,制定产品整体的质量保障策略。
接下来通过 Job 模型进行自动化设计,对各层自动化进行分工。
最后是建立度量模型,提升整体的自动化 ROI。

最重要的还是在事上练,也就是拿实际的项目练手,可以先找一个比较容易的问题,做单点突破,然后再逐渐扩展试点范围。
“每个人都会有一段异常艰难的时光,生活的压力,工作的失意,学业的压力,爱的惶惶不可终日,挺过来的,人生就会豁然开朗,挺不过来的,时间也会教你,怎么与它们握手言和,所以不必害怕,光明总在前方。”


 

 

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

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

相关文章

linux命令date

linux命令date 文章目录linux命令date一、date二、使用(一)结合格式,格式输出数据(二)结合选项(options)一、date date命令可以获取到当前系统时间,主要是为了shell脚本的 date用法…

Html中锚点的使用

概述 URL是由多个部分组成。包括协议、主机(域名)、端口、路径、查询参数和锚点 https://www.example.com:80/path/to/myfile.html?key1value1&key2value2#anchor锚点(anchor)是网页内部的定位点,使用 # 加上锚…

3_Spring_IOC原理分析_重要

IOC底层原理 1 XML解析技术读取配置文件 <bean id"empDao" class"com.msb.dao.impl.EmpDaoImpl"></bean> 将上面的信息读取进入程序 对象的ID ,一个是对象的类的全路径名 2 反射技术实例化对象,放到容器中 获得类的字节码 Class clazz Clas…

论文导读 | GPU与LSM-tree的优化--以加速compaction和scan为例

GPU是一种新硬件&#xff0c;相比较于CPU&#xff0c;有较高的读写带宽和更强的并行能力&#xff0c;在很多领域都有非常好的应用。今天我们以LSM-tree上的compaction和scan为例&#xff0c;介绍GPU如何在加速数据库的操作中发挥作用。 一、GPU的发展历程 图1&#xff1a;GPU的…

基于uniapp+ssm+mysql一站式婚庆服务平台app设计

开发软件&#xff1a;Idea HBuilder mysql 开发技术&#xff1a; SSM Vue uniapp 用户功能&#xff1a; 注册登陆&#xff0c;填写基本的个人信息&#xff0c;就可以注册&#xff0c;注册完成后即可登陆 查看店铺&#xff0c;在首页有很多的店铺&#xff0c;有婚纱店&…

PHP 精度计算问题(精确算法)

1. PHP 中的精度计算问题 当使用 php 中的 -*/ 计算浮点数时, 可能会遇到一些计算结果错误的问题 这个其实是计算机底层二进制无法精确表示浮点数的一个 bug, 是跨域语言的, 比如 js 中的 舍入误差 所以大部分语言都提供了用于精准计算的类库或函数库, 比如 php 中的 bc 高精…

逻辑回归、激活函数sigmoid、损失及优化、案例代码实现

一、逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;&#xff1a;是机器学习中的一种分类模型&#xff0c;是一种分类算法&#xff0c;与回归之间有一定的联系&#xff0c;由于算法的简单和高效&#xff0c;在实际中应用非常广泛 应用场景&#xff1a;广告点击…

Web入门开发【八】- 学习探索

Web案例详解 简单的个人静态网站&#xff0c;这是一个单页的简单静态web网站&#xff0c;前面已经详细讲过。 这个案例是动态的企业官网&#xff0c;增加了多菜单&#xff0c;动态登录等功能&#xff0c;是入门学习者进阶的实践必做项目。 我们再来看企业后台管理系统&#xff…

Python Yolov5火焰烟雾识别源码分享

程序示例精选 Python Yolov5火焰烟雾识别 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 Yolov5比较Yolov4,Yolov3等其他识别框架&#xff0c;速度快&#xff0c;代码结构简单&#xff0c;识别效率高&#x…

操作系统开启分段并进入保护模式

段基地址 32位的地址&#xff0c;如果没开启分页&#xff0c;指的是当前段所在的物理地址&#xff0c;否则是分页前的虚拟地址 G(Granurality) 值为1表示段界限以4K为单位&#xff0c;否则以字节为单位 段界限 描述段的大小size-1,单位由G决定。 D/B 对于代码段&#xf…

【Linux】缓冲区/磁盘inode/动静态库

目录 一、缓冲区 1、缓冲区的概念 2、缓冲区的意义 3、缓冲区刷新策略 4、同一份代码&#xff0c;打印结果不同 5、仿写FILE 5.1myFILE.h 5.2myFILE.c 5.3main.c 6、内核缓冲区 二、了解磁盘 1、磁盘的物理结构 2、磁盘的存储结构 2.1磁盘的定位 3、磁盘的抽象…

【openGauss】浅试openGauss3.1.0中有关mysql兼容的部分特性

前言 在9月30号&#xff0c;openGauss推出了3.1.0这一预览版&#xff08;注意&#xff0c;openGauss的“x.y.z”版本号&#xff0c;“y”的位置如果不是0&#xff0c;就不是长期支持版&#xff0c;不建议生产使用&#xff09;。 这个版本增加了不少新内容&#xff0c; https:/…

【KGAT】Knowledge Graph Attention Network for Recommendation

note 其实不结合KG&#xff0c;何向南团队之前也直接使用GCN做了NGCF和LightGCN。KGAT结合KG和GAT&#xff0c;首先是CKG嵌入表示层使用TransR模型获得实体和关系的embedding&#xff1b;然后在attention表示传播层&#xff0c;使用attention求出每个邻居节点的贡献权重&#…

35岁有儿有女,为什么我开始自学编程?

零基础编程入门越来越容易 这么讲并不夸张&#xff1a;无论你初学哪门编程语言&#xff0c;第一行代码几乎都是打印出 Hello world ! print(Hello world!) print(Hello python!) 遥想当年&#xff0c;花上一两天折腾完各种安装配置调试环境&#xff0c;写下第一句“面世代码…

该怎么选择副业,三条建议形成自己的副业思维

受经济环境的影响&#xff0c;许多年轻人觉得原来稳定的工作不那么稳定&#xff0c;看着周围的朋友因为企业破产和失业&#xff0c;生活变得没有信心&#xff0c;也想找到自己的副业&#xff0c;在紧急情况下赚更多的钱。所以&#xff0c;年轻人在选择副业时也面临着很多困惑&a…

Java --- JUC的CompletableFuture的使用

目录 一、Future接口 二、Future接口的功能 三、FutureTask 四、CompletableFuture背景及使用 4.1、CompletionStage 4.2、CompletableFuture 4.3、四个静态方法 4.4、减少阻塞和轮询 4.5、使用CompletableFuture完成电商大比价 五、CompletableFuture常用API 5.1、获…

【华为OD机试真题 C++】TLV解析 【2022 Q4 | 100分】

■ 题目描述 TLV编码是按[Tag Length Value]格式进行编码的&#xff0c;一段码流中的信元用Tag标识&#xff0c;Tag在码流中唯一不重复&#xff0c;Length表示信元Value的长度&#xff0c;Value表示信元的值。 码流以某信元的Tag开头&#xff0c;Tag固定占一个字节&#xff0…

机器学习 | 逻辑回归

一.基本原理 面对一个分类问题&#xff0c;建立代价函数&#xff0c;通过优化方法迭代求解出最优的模型参数&#xff0c;然后测试验证我们这个求解的模型的好坏。逻辑回归是一种分类方法&#xff0c;主要用于二分类问题&#xff0c;应用于研究某些事件发生的概率 二.优缺点 …

day28【代码随想录】回溯之组合、组合总和|||、电话号码的字母组合

文章目录前言一、组合&#xff08;力扣77&#xff09;剪枝优化二、组合总和 III&#xff08;力扣216&#xff09;剪枝优化三、电话号码的字母组合&#xff08;力扣17&#xff09;总结前言 1、组合 2、组合总和||| 3、电话号码的字母组合 一、组合&#xff08;力扣77&#xff0…

第1章 计算机组成原理概述

文章目录前言1.0 课程简介1.0.1 课程的地位1.0.2 课程学习思路1.0.3 课程组成1.1 计算机系统简介1.1.1 计算机组成1.计算机的类型2.计算机的组成3.软件组成1.1.2 计算机系统的层次结构1.物理层方面2.程序员角度1.1.3 计算机体系结构与计算机组成1.2 计算机的基本组成1.2.1 冯诺…