软件测试下的AI之路(4)

news2025/1/14 13:00:26

在这里插入图片描述

 
 

在这里插入图片描述
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。
📡主页地址:【Austin_zhai】
🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。
💎声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问题欢迎大家私信,有空必回。

在这里插入图片描述

 
 

阅读目录

  • 1. 前言
  • 2. 变量创建
    • 2.1 字符串模板
    • 2.2 宏
    • 2.3 元素属性
    • 2.4 自定义JS代码
    • 2.5 mabl邮箱
  • 3. 变量使用

1. 前言

在这里插入图片描述

  随着科技日新月异的发展,人工智能正逐渐渗透到我们生活的各方各面,从智能语音助手到自动驾驶汽车,从智能家居到人脸识别技术,AI正以其卓越的智能和学习能力引领着新时代的发展方向。在这个快速演进的时代中,软件测试领域也受到了不小的冲击。虽然在当下,传统的软测技术仍然是绝对的主力,但是身为IT行业中的一员,近几年AI的全新业务体验与其超强的算力所带来的震撼感受也应该远超其他行业。所以为了跟上时代的步伐,作为软测的大家是不是也应该考虑如何让AI辅助我们更加完整高效的完成日常的各类质量保障工作呢?

  上一期我们介绍了mabl平台的CI/CD集成,相信实践过的测试同学们也一定有了自己的使用体验了吧。接下来我们来介绍一些带日常工作场景中会高频出现的一些mabl平台进阶玩法,掌握了这些就能让我们的自动化测试工作的效率再次上升一个台阶。

 
 

2. 变量创建

在这里插入图片描述
  在自动化测试框架或脚本中,变量永远是一个回避不了的话题。同样的,在mabl中如何使用变量也是大有讲究。

  我们打开mabl trainer之后可以在窗口的最下方看到{x}图标的按钮,这个就是添加在测试步骤中添加变量的按钮。如果不是以编写脚本的方式来定义的话直接用这个按钮来创建就行了。

在这里插入图片描述

 

  按下后会询问你需要进行的变量操作,这里可以进行变量的管理、创建变量和使用变量三个操作。我们先来创建一个变量来看看,选择Create a variable。

在这里插入图片描述

  创建的选项有四种,字符串模板、元素属性、自定义 JavaScript 代码、Mabl 邮箱地址,每项具体的内容与含义后续会详细说明。这边我们先选择字符串模板 (String template),可以看到下面会让我们填写各种参数。属性(Property)中填写要添加原始变量的位置,当前值(Current value)则显示的是当前变量的预览值,最后再定义一个变量的名称(Variable name)点击OK就完成了一个变量的创建操作了。
在这里插入图片描述

 

2.1 字符串模板

  当然再属性框中我们不仅仅可以填入一些常量,还可以使用各类变量、随机数据、算式这些灵活的元素来表达自己的变量属性。如下图,在mabl的字符串模板中表达式可以使用两个大括号“{{}}”来表示,如果要引用变量的话只要在前面加上@符号即可。这里我使用了一个随机的6位字母当作注册账号的邮箱名,在一些注册的正向场景中,我们可以引入一些随机的字符来满足用户名的注册条件,这样就无需特意去指定这些繁琐的命名规则,即可达成一些业务测试场景的需求。
在这里插入图片描述
 

以下是一些有效的表达式例子,大家可以做下参考:
{{@username}}:引用变量的值username
{{alpha:6}}:生成一个由六个大小写字母组成的随机字符串
{{fake.name.firstName}}:生成一个随机的名字
{{(6 + 10) / 2}}:将 6 和 10 之和除以 2
{{date}}:生成时间戳。如果您需要格式化的日期,请参阅我们关于在 mabl 中使用日期的指南。

 

  这里需要注意的是,如果你在表达式中引用变量的时候,要先确保引用的变量包含正确的赋值,不然就会出现值未定义的情况出现。

在这里插入图片描述

 

2.2 宏

  除了引入变量之外,宏也是一个不错的选择。一般生成随机字符串和快速的指定任意的输入内容,都可以用宏来达成类似的效果。宏的表示方法包括一个字符类型,后面跟一个冒号和一个数字,其中数字表示要创建的随机字符数。如下这些例子所示:

{{alpha:6}}: 6位大写和小写字母
{{alphaLower:4}}: 4位小写字母
{{alphaUpper:5}}:5位大写字母
{{digit:4}}:4位数字
{{alnum:11}}:11位字母数字

  mabl同样可以使用模板生成随机数据,它的表达式是使用双大括号并且以fake为开头,如{{fake.phone.phoneNumber}}这样的格式,但这里因为mabl平台仅支持英文区域,所以生成的数据格式均为美国区域的数据,这个就存在着很大的局限性,对于没有海外业务的小伙伴来说,这块功能就有些鸡肋了。当然如果你正好需要用到,那相较于其他的生成方式或在线网页生成器的随机数据,mabl自带的随机数据方式就比较便捷了。以下是一些基础的随机数据使用的表达式:

{{fake.name.firstName}}:随机名字
{{fake.name.lastName}}:随机姓氏
{{fake.address.streetAddress}}:随机街道地址
{{fake.address.city}}:随机城市名称
{{fake.address.state}}:随机美国州名
{{fake.address.zipCode}}:随机美国邮政编码
{{fake.address.countryCode}}:随机 2 个字母的国家/地区代码
{{fake.company.companyName}}:随机公司名称
{{fake.phone.phoneNumber}}:随机手机电话号码,格式为美国地区
{{fake.lorem.text}}:随机填充文本
{{fake.random.uuid}}:随机 UUID
{{fake.finance.amount}}:随机货币金额

  除此之外,mabl还支持数学运算,它可以在字符串模板中执行基本的数学运算并将结果保存到新变量或覆盖现有变量。这里要注意点的是,指定表达式对于获得正确的结果很重要。数学表达式同样也必须用要计算的双大括号括起来。以下是一些数学运算的表达式:
{{5 + 3 / 2}}:结果为:6.5 这是很基本的运算,在mabl中依然遵循运算符优先级来进行运算
{{(5 + 3) / 2}}: 结果为:4 按照括号的指定优先级来进行运算
${{(5 + 3 ) / 2}}:结果为:$4 类似于美元符或百分号这样的计算符号可以组合使用

  有了基础数学运算外,我们还可以使用一定的高级数据表达式来进行一些特定的场景计算。例如:
round:将数学计算结果四舍五入到小数位数,表达式为:round(number, numberOfDecialPlaces)
abs:返回数学计算的绝对值,表达式为:abs(number)
randomInt:返回一个大于或等于但小于,表达式为:randomInt(min, max)

 

2.3 元素属性

  元素属性,就和它的字面意思一样,元素属性的变量会从当前页面上(Trainer上的当前页面)的元素进行提取,并将其存储在元素属性变量中。
在这里插入图片描述

 

  其实这个类型很好理解,我们选择完元素属性这个类别后点击Select图标,在当前的页面上选择你想要提取的元素。如图,我们将鼠标悬停在百度的logo上,页面上就会显示当前被选中的元素属性,可以看到在元素定义的时候这个img元素的id于classname都是已经被识别出来的。

在这里插入图片描述

 

  然后我们点击这个logo元素,返回元素属性变量创建的对话框。此时我们就可以在属性(Property)选择框内选择该元素对应的属性名了,而当前值(Current value)这里会对应显示当前元素属性的属性值。就好比我们原则了id,那刚才与id对应的属性值就应该是s_lg_img。最后我们填入相应的变量名即可完成创建。
在这里插入图片描述

 

  可以看到我们的元素属性变量创建还是相当的简单的,所见即所得的操作可以免去在页面上用F12查找捕获元素的繁琐过程。同时在我们的自动化测试脚本的设计与维护过程中,因为采用了变量的形式,即使面对频繁多变的页面改动,仍旧可以以最少的工作量来覆盖所需的业务场景。

 

2.4 自定义JS代码

  第三种方式是利用JS代码段来进行变量的创建,这种情况相对来说会比较的少见。因为我们的mabl平台已经提供了相当完善的低代码功能,但往往有些小伙伴的公司小部分产品不支持开箱即用(out of the box),那么mabl也可以支持JS代码来提供更为高级的场景解决方法。

 
  如下图,比如在我们的业务测试过程中,无论是产品本身技术栈或形态不支持普通的低代码测试手段,利用mabl的JS代码段就可以进行对应的业务测试。对于一些web前端的测试来说,自定义JS代码段也不妨是一种剑走偏锋的好方式。

在这里插入图片描述

 

2.5 mabl邮箱

  最后一种是使用mabl邮箱地址来创建变量,对于一些电子邮件的测试我们可以填入真实的邮箱来进行对应的测试内容。

在这里插入图片描述

 

  在一些需要用到电子邮箱的测试业务中,这个类别就可以简单快速的达成测试业务目标,而无需编写脚本或进行复杂的设置。比如一些验证定时邮件、密码找回、注册账号、身份验证、邮件中的附件验证等。

 

验证的方式也十分的简单,我们可以在Trainer中添加对应的断言,可以包括发送人、主题、日期和附件等。

在这里插入图片描述

  当然mabl中的邮件测试也是存在有一定的限制的,比如邮件地址长度无法超过25个字符、附件大小不能超过10MB、邮件必须在断言步骤后的5分钟内到达,不然断言就会失败。

 
 

3. 变量使用

在这里插入图片描述

  我们创建完对应的变量之后就可以在脚本中的不同场合使用这些变量了,这里为大家总结几种高频的使用场合。

 

  输入值应该是我们最常用的一种变量调用方式了,首先在Trainer中按{x}打开变量界面,点击使用变量,这时可以看到变量使用方式选择的界面,我们选择Input Value选项。然后与元素属性类别的选择按钮一样,在当前页面中选择需要进行变量操作的元素。

在这里插入图片描述
 

  这里我们依然选择搜索框元素,并在下一个页面中选择search_key_word变量,该变量是之前定义好的其中一个,我们直接选择后,该变量就会直接作用于当前的搜索框。

在这里插入图片描述

 

在这里插入图片描述
 

  此时我们就可以看到搜索框内已经输入了自动化测试这几个关键字了,这样我们只要保存好之前的业务操作步骤,就可以每一次在使用搜索页面的时候输入自己指定的内容了。是不是特别的简单?

在这里插入图片描述
 

  如果我们不是使用新建的变量,想改变用调用一些既存的变量,我们也可以在执行步骤的过程中进行编辑和修改。我们先找到对应步骤,在步骤的右侧选择编辑(Edit)。

在这里插入图片描述
 

  开打后可以看到界面中对应元素的一些详细信息,也可以看到我们刚才调用的变量search_key_word,现在我们想调用另一个变量,我们一个是可以在下面的变量下拉列表中选择一个既存的变量。

在这里插入图片描述
 

  另一个方法是直接编辑这个元素的文本内容,我们先将选项单选按钮调至字符串(String),然后按照之前所说的字符串模板的表达式来调用其他的变量,这里我们调用了一个混沌工程的变量。可以看出这里的操作是灵活多变的,完全可以根据小伙伴们自己的实际习惯与需求来自行使用。

在这里插入图片描述
 

  一般在我们的测试项目中,存在多个测试环境已经不是什么新鲜事情了。无论是DEV、UAT、PRD还是其他的一些环境都是我们测试需要涉及的主体环境,所以在mabl中也可以通过变量来快速的访问你所指定的多个测试环境。当然mabl不单单是提供了整体的环境访问,还支持各类的业务子页面的跳转,这里就完全看大家各自的发挥了。
 

  默认情况下mabl开启Trainer的时候都会默认开始你设置的Application时设置的URL,当然我们的日常业务肯定不是那么简单的访问一个或两个地址。所以这里我们就需要根据业务流程的需求来定制我们的URL访问路径与跳转页面甚至是环境的快速切换。
 

  当需要添加URL跳转变量的时候我们需要先在Trainer中点击最下面的加号按钮,在添加步骤的界面中选择访问URL(Visit URL)。

在这里插入图片描述

在这里插入图片描述
 

  跳转进来后我们可以在字符串和变量两个输入种类中选择,这里的用法与字符串模板中的表达式用法一致,就不重复介绍了。在一些测试场景中我们可以在url的前后或本身进行url的拼接以达到正确跳转业务页面的目的。

在这里插入图片描述
 

  另一种较为高频的场合就是在我们的用例中进行断言,无论是判断值或元素是否存在,变量都可以很好的满足这些测试场景。在mabl中,如果已经事先将被测对象进行了变量创建,那我们大可以在业务操作的测试过程中将断言设置为你所需验证功能的核心元素。

 

  例如你需要测试一个系统的测试,登录按钮的亮起与文案变化会随着用户名密码输入而发生改变,那登录页面的一些特征元素或随业务状态变化的元素完全可以变成你的断言依据。我们先在对应需要断言的步骤处添加一个断言操作。

在这里插入图片描述
 

  在断言界面中,我们这里断言的对象是登录按钮,判断的内容则是按钮的内部文案,而变量使用预先创建的登录按钮的innerText的属性值,创建的时候需要注意必须将按钮的对应属性调整为登录信息录入完整状态下的属性,不然肯定会断言失败。下面的选项可以根据自己的测试场景需求来酌情选择。
在这里插入图片描述

 

  添加完断言并保存用例,我们先简单的跑一下用例,在报告结果中查看详细,就可以看到我们刚才添加的断言已经执行成功了。
在这里插入图片描述
 

  以上就是mabl中的变量的创建与使用的一些高频场景,其实对于我们的日常工作来说,频繁的利用变量的特性来丰富自动化业务测试脚本是一个非常高效的解决方案,面对敏捷开发的项目,即使频繁的更改需求与版本迭代,越是这样的环境,就越可以体现变量在整体脚本灵活性与维护性上的绝大优势。

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

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

相关文章

智慧公厕升级为多功能城市智慧驿站,助力智慧城市发展

在现代城市的建设中,公共厕所作为基础必备的民生设施,一直是城市管理的重要组成部分。随着科技的不断发展,智慧公厕应运而生,成为了公共厕所信息化、数字化、智慧化的应用解决方案。而近年来,智慧公厕也进行了升级发展…

Java设计模式—享元(FlyWeight)模式

享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象 public abstract class Piece {protected PieceColor m_color;protected PiecePos m_pos;public Piece(PieceColor color ,PiecePos pos){m_color color;m_pos pos;}public ab…

利用甘特图实现精细化项目管控

在项目管理中,通过精细化管控,项目经理能够有效规划、监督和协调各项任务,从而最大限度控制风险,优化资源配置,并确保按时、按质、按量完成项目目标。而在众多项目管理工具中,甘特图无疑是实现精细化项目管控的利器。zz-plan 是一个非常好用的在线甘特图制作工具,一…

浮点数在内存中的存储【详解】

浮点数在内存中的存储 浮点数存储规则小数点后数值的二进制转换float和double存储图示优化存储方案E不全为0或不全为1E全为0E全为1 浮点数存储规则 大家都知道整型数据是以补码的方式存放在内存中。以下几个概念是需要知道的: 原码,补码,反…

爬虫与数据分析——爬虫基础知识

目录 一、开发环境二、爬虫的概念三、爬虫与Python(一)爬虫常用语言(二)python的特点 四、爬虫环境依赖(一)python第三方库(二)第三方库的安装 五、爬虫与HTTP(一&#x…

深入理解JVM的内存结构及GC机制(2)

虚拟机栈占用的是操作系统内存,每个线程对应一个虚拟机栈,它是线程私有的,生命周期和线程一样,每个方法被执行时产生一个栈帧(Statck Frame),栈帧用于存储局部变量表、动态链接、操作数和方法出…

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

python之遍历求二叉树的深度、先序遍历、中序遍历、后序遍历

二叉树的结点用一个数组顺序存储,-1表示该节点为空,实现求该二叉树的深度、先序遍历、中序遍历、后序遍历 首先定义一个 Node 类 ,用于表示二叉树中的节点。 class Node:def __init__(self, val):self.val valself.left Noneself.right …

python开发poc

学习使用python做到批量化的漏洞脚本 1.通过fofa搜索结果来采集脚本 2.批量化扫描漏洞 ---glassfish存在任意文件读取在默认48484端口,漏洞验证的poc为: "glassfish" && port"4848" && country"CN" http://loca…

PCF8591(ADDA转换芯片)

工具 1.Proteus 8 仿真器 2.keil 5 编辑器 原理图 讲解 PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行IC总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接…

序列超图的下一项推荐 笔记

1 Title Next-item Recommendation with Sequential Hypergraphs(Jianling Wang、Kaize Ding、Liangjie Hong、Huan Liu、James Caverlee)【SIGIR 2020】 2 Conclusion This study explores the dynamic meaning of items in realworld scenarios and p…

回合制游戏战斗模块的制作

回合制游戏战斗模块的制作 回合制游戏相信大家没玩过也见过,了解它的玩法。回合制,那就是你来我回的,你一回合我一回合,直到把对方打败。市面上的回合制游戏比较经典的有梦幻西游,问道,神武,完…

【机器学习入门】集成学习之梯度提升算法

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 实操练习 使用Yolo模型进…

二分法题集2

目录 1 山脉数组的峰顶索引 分析: 代码展示: 2 寻找峰值 分析: 代码展示: 3 寻找旋转排序数组中的最小值 分析: 代码展示: 4 点名 分析: 代码展示: 1 山脉数组的峰顶…

【代码随想录】哈希表

文章目录 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和454. 四数相加 II383. 赎金信15. 三数之和18. 四数之和 242.有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {if(snull || tnull || s.length()!t.length()){return …

Linux信号机制:进程间高效传递事件与操控指令的桥梁

在Linux操作系统中,信号是一种进程间通信机制,用于通知进程某些事件的发生或请求进程执行特定的动作。信号分为两类:编号1至31的传统UNIX信号,被称为不可靠信号,以及编号32至63的扩展信号,即可靠信号&#…

CMU15/445 2023 Spring-project1 LRU-K 替换策略

在写个demo之前,专门学习了LRU:【LeetCode刷题】146. LRU 缓存-CSDN博客 使用哈希表 双向链表可以满足删除/增加的时间复杂度为O(1)。 在通读完15/445这块的说明之后,发现和LRU还是有些差别的。 官方文档中对LRU-K的解释是:LRU-K算法根据所…

LABVIEW--正弦+高斯噪声信号及滤波

前面板信号 后面板 LABVIEW源程序链接:https://pan.baidu.com/s/11B-75i4fHZwWQyjxn9yCyQ?pwd7tfj 提取码:7tfj

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript(简称JS)是一种轻量级的、解释执行的客户端脚本语言,主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript,并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…