自动化测试入门 —— 自动化测试概论

整篇论述总的来讲会很长,从自动化的思维、模型、工具,到各层次的自动化测试技术、测试框架、测试平台,包括面向未来的自动化技术都将涉及,因此打算拆成几个部分去写。此外,由于涉及的范围比较广泛,部分内容还是有些深度的,我尽量通过完整描述上下文,以便大家能够理解,如果有不清晰或错误(知识总是有限的)的地方,也请大家指正。

01. 自动化测试思维

熟悉我的读者应该知道,我习惯在写具体的应用之前,先讲思维。因为我认为任何事情首先要抓的是它的本质,了解了本质以后,再去看现象就会容易很多。可以这么说:一流的测试做思维,二流的测试做模型,三流的测试做工具(这里的“测试”是动词,不是指人,轻拍)。

一提到自动化测试体系设计,很多人的反应就是金字塔模型。但是测试理论发展到今天,金字塔模型的适用度已经不高了(后面会具体展开讲),我们不能光抱着旧模型旧思想不放。业务中需要采用什么模型,或者能够诞生出什么样的新模型,都是由自动化测试思维来指导的。很多团队将自动化应用的失败,归咎于模型的错误,这有失偏颇。有问题的不是模型,而是缺乏模型背后的思维。

什么是自动化测试思维?字面上的意思就是把测试工作做成由机器自动执行的形式,关于这点大伙应该都能理解,而问题出在想法和实践的关联上,理解并不代表会用。举个例子,大家觉得生产环境的机器监控是不是自动化测试?必须是啊,它也是通过系统的形式在解决错误验证的问题,不论是从手段还是目的上,妥妥的是自动化测试的一种。那为什么还有很多人认为它是运维的一部分呢?

所以我们在讲自动化测试的时候,不能光是局限于单元测试、接口自动化、UI 自动化,而是在方方面面上,都要思考是否可以形成自动化测试的能力,以及采用这种能力之后的投入产出比,做出综合判断,这才是自动化测试思维。至今为止,自动化测试思维最为成功的应用,我觉得有两个,一个是流量回放技术,另一个是图像识别和机器学习结合的自动化技术。先别着急,后面都会具体讲到。

02. 自动化测试模型

说到自动化测试模型,金字塔模型一定是一个绕不开的槛,10->20->70 的比例被奉为自动化实践的金科玉律。但现在离金字塔模型提出已经过去十几年了,现今的业务形态、测试理论、自动化技术早已发生了巨大的变化。实际一点问,诸位的团队有几个是在严格使用这个模型的?难道只是因为国内理念没跟上吗?

首先,我们要看下自动化最大的挑战是什么。我们都知道,自动化的目的是为了节约人工成本,那如果实现自动化本身要消耗的成本就很高,你还觉得它有意义吗?当然没有。所以从过去到现在,自动化的技术发展一直是在跟成本这个课题做斗争。仔细回忆一下,录制回放、流量回放、屏幕比对、图像识别等等,哪个不是为了降低自动化成本而诞生的。所以,金字塔模型的基础,是建立在受当时技术限制而采用这种模型成本最优的前提下。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:822269834

 

但现在已经是 2023 年了,流量回放技术让 API(其实流量回放可以用于多个层面,后面再细说)自动化回归的成本接近于 0,新的基于图像识别的机器学习技术也让 UI 自动化回归的成本接近于 0,这两个技术的采用,使得模型直接演变成了纺缍形甚至是倒三角形,我们能说它不合理吗?显然不能。因此,成本才是决定这个模型是个什么“形状”的核心要素,金字塔也好,纺缍也好,倒三角也好,只要 ROI 高,都是好模型。

额外说一点,即便是金字塔,现存的图形也是画得五花八门。集成测试和接口测试混为一谈,界面测试和端到端测试混为一谈。比如端到端,其实还是对原本的“系统测试”概念做了一些扩展,对于 Paas/Iaas 型业务,端点往往不是界面而是接口,或干脆就是命令行。所以我们不能认为端到端就是界面,不是一回事。

严格来说,金字塔的结构有两类:一类是基于颗粒度的,比如单元测试->集成测试->系统测试(端到端);另一类是基于层次深度的,比如设备层->编码层->接口层->界面层。这里并不是指每一层都一定存在,需要根据自己的业务具体分析。

03. 自动化测试覆盖

我们有了模型之后,是否只要根据模型每一层的“胖瘦”来决定它们的覆盖率就可以了呢?或者说在有条件的情况下,覆盖率是不是越高越好?我们习惯把各个层级的自动化单独对待,分别去制定它们的覆盖率指标,很少有人会去思考层级和层级之间的关系。考虑下面这个例子,不同的商品价格给予不同的折扣,假定业务代码如下并对外包装了一个访问接口:

public float getDiscount(float commodityPrice) {
    float discount;
    if (commodityPrice >= 500.0) {
        discount = 0.3;
    } else if (commodityPrice >= 300.0) {
        discount = 0.2;
    } else if (commodityPrice >= 100.0) {
        discount = 0.1;
    } else {
        discount = 0.0;
    }
    return discount;
}

这段逻辑不论是代码(单元)测试,或者是接口测试,实现起来都很容易,四个用例(暂不考虑边界和异常)即可搞定,所以大部分人都会追求代码测试和接口测试的自动化 100% 覆盖(代码四个+接口四个),毕竟成本不高嘛。但是从有效性来讲,冗余度高达 75%。因为业务逻辑已经在代码层做掉了,对于接口测试而言,我们只需要保证接口链路是通的即可,没有必要对各个逻辑分支再做一遍重复校验。

打个比方,我们家里用的净水器,一般会有 3~5 层的过滤网,先从泥沙等较大的物体开始,直至细菌等微小的目标,每一层都有其目的和作用。如果我们从第一层开始就采用最精细的过滤材料,势必会导致材料浪费和成本提升。

自动化分层也是这个道理,我们应当先从实现成本最低的层级(再说一次,不一定是代码层)开始,覆盖尽可能多的用例,之后根据成本排序依次对前一个层级未能覆盖的部分,结合层级本身的特点进行补充。因此,自动化分层思想其实是一个互补思想,而不要独立去看待。

需要特别提醒一点的是,不要过度相信高覆盖率。比如以下代码:

public float test(float divisor) {
    return 100.0/divisor;
}

我们只需要 test(10.0) 就可以达到 100% 的覆盖率,但很明显代码并未处理除数为 0 的情况,因此我们不能说 100% 的(代码)覆盖率就是无 Bug 的。所以覆盖率分业务覆盖率和代码覆盖率,对测试有效性也有很多手段可以采用,比如变异测试、混沌工程等等。由于测试有效性和自动化没有硬性关联,本文中提及相关内容时可能会略微做介绍,其他就不过多讲解了。今天关于自动化的内容暂时先讲到这,我们下周继续 : )
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++内存布局(二)

在《C内存布局(一)》 中,我们介绍了C内存布局的基本知识,本篇我们仍着重探讨C类的内存布局,尤其是 多重继承、钻石继承(菱形继承)场景下的虚函数表的情况。 一、多重继承 1.1 示例 class A { public:virtual void d…

LabVIEW软件模拟氢燃料电池在车辆中的应用

LabVIEW软件模拟氢燃料电池在车辆中的应用 在追求可持续能源的时代,氢燃料电池在绿色经济中扮演着关键角色。本研究通过LabVIEW软件模拟和评估了氢燃料电池在车辆应用中的性能和效率。LabVIEW作为一个强大的模拟工具,能够动态模拟氢燃料电池系统在不同条…

js键盘事件keydown事件,防止重复触发,组合键的配合使用

js键盘事件keydown事件,防止重复触发 键盘事件类型主要有三种: keydown 、keypress(不建议使用,部分浏览器已放弃)和 keyup 。 添加普通键盘keydown事件 // 监听键盘按下事件document.addEventListener(keydown, function(event) {// 输出按…

3 python基本语法 - Dict 字典

Python 中字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们…

23、Web攻防——Python考点CTF与CMS-SSTI模板注入PYC反编译

文章目录 一、PYC文件二、SSTI 一、PYC文件 pyc文件:python文件编译后生成的字节码文件(byte code),pyc文件经过python解释器最终会生成机器码运行。因此pyc文件是可以跨平台部署的,类似java的.class文件,…

Vue-图片懒加载

实现图片懒加载可以使用vue-lazyload插件 npm 链接:vue-lazyload - npm (npmjs.com) 使用方法: 1. 安装vue-lazyload npm i vue-lazyload npm i vue-lazyload1.3.3 // 如果是vue2就需要安装1.3.3版本 2. 引入vue-lazyload并使用 可以在使用该插…

软件企业在什么情况下需要找第三方软件测试机构?如何收费?

近年来,随着软件行业的迅猛发展,软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性,许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软件开发企业的专业机构,主要从事软件测试和质…

每日一题 2828. 判别首字母缩略词(简单)

简单题,就不多写了 class Solution:def isAcronym(self, words: List[str], s: str) -> bool:if len(words) ! len(s):return Falsefor i in range(len(words)):if words[i][0] ! s[i]:return Falsereturn True

栈(stack)

栈(stack)是一种用于存储数据的简单数据结构,与链表和顺序表很相似,最大的区别在于数据的存取操作。栈的插入和删除操作只允许在一端执行,因此把允许操作的一端称为栈顶,不允许操作的称为栈底。插入元素称为…

轻度听力损失的儿童需要早期干预吗?

一些宝宝在做听力筛查时总是不通过,进一步听力诊断发现宝宝有轻度的听力损失,刚知道这个消息时,家长可担心了,总想着宝宝是不是听不到啊?但是一段时间后,有些家长又会忽略宝宝的听力问题,因为部…

7款创意性前端源码特效资源分享(附在线预览效果)

分享7款非常不错炫酷的前端特效源码 其中包含css动画特效、js原生特效、svg特效等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 CSS绘制iPhone 14带动态岛 纯CSS绘制iPhone 14带动态岛模型 运行初始化时还附带出场动画 …

防冻水表是什么?

防冻水表是一种特殊类型的水表,它主要用于防止水管和设备在寒冷的冬季中受到冻结和损坏的情况。在冷却系统中使用防冻水表可以有效地监测和控制液体的温度,从而保护系统的正常运行。 防冻水表通常由温度传感器、控制器和显示器组成。温度传感器负责测量液…

阿里云k8s集群搭建

文章目录 一、安装前准备1.环境2.k8s集群规划 二、k8s 安装1. centos基础设置2. docker 安装3. k8s安装3.1 添加阿里云 yum 源3.2 安装 kubeadm、kubelet、kubectl3.3 部署 Kubernetes Master3.4 加入 Kubernetes Node3.5 部署 CNI 网络插件3.6 测试 kubernetes 集群 一、安装前…

鸿蒙Harmony4.0开发-ArkTS基础知识运用

概念 1.渲染控制语法: 条件渲染:使用if/else进行条件渲染。 Column() {if (this.count > 0) {Text(count is positive)} }循环渲染:开发框架提供循环渲染(ForEach组件)来迭代数组,并为每个数组项创建…

abpvnext框架的项目部署到linux arm64版的docker中

参考: windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客 前提条件: 1、vs2022,我的电脑本机安装有windows版docker desktop 。 2、linux中已经安装好docker,安装了sftp。这部分可以自行…

layui 树组件tree 通过API获取数据

一、简单 var treedata[];tree.render({elem: #addLeftType,id: demoId,data: treedata,showCheckbox: true,oncheck: function(obj){console.log(obj.data); // 得到当前点击的节点数据console.log(obj.checked); // 节点是否被选中console.log(obj.elem); // 得到当前节点元素…

模拟组建网络的过程

DNS是域名系统,作用是将域名解析成ip地址 要求 1.使用172.16.0.0网段组建网络 2.使用3台pc,可以配置DHCP服务自动分配ip 3.添加两个网站服务器 第一台是www.taobao.com 第二台www.jd.com 他们可以通过DNS服务器为客户解析域名 172开头的是B类ip地…

获取税率GET_TAX_PERCENTAGE

FTXP查看税码 GET_TAX_PERCENTAGE CALL FUNCTION GET_TAX_PERCENTAGEEXPORTINGaland ls_lfa1-land1datab sy-datummwskz ps_out-mwskztxjcd MWVS * EXPORT TABLESt_ftaxp lt_ftaxp.READ TABLE lt_ftaxp INTO DATA(ls_ftaxp) INDEX 1.IF sy-subrc 0.cs_po-…

javascript_1

3) string ⭐️ js 字符串三种写法 let a "hello"; // 双引号 let b "world"; // 单引号 let c hello; // 反引号 html 代码如下&#xff0c;用 java 和 js 中的字符串如何表示&#xff1f; <a href"1.html">超链接</a> …