自动化测试模型(一)
8.8.1 自动化测试模型概述
在自动化测试运用于测试工作的过程中,测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象,总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。
- 线性测试
首先,我们一起来看下使用Bing搜索APP来搜索“于涌 loadrunner”的操作步骤。打
开Bing搜索应用后,会出现一个引导界面,单击“跳过”按钮,如图8-196所示。

图8-196 跳过按钮及对应的ID相关属性信息
然后,单击搜素框,如图8-197所示。

图8-197 搜索框及对应的ID相关属性信息
而后,在出现的搜索文本框输入“于涌 loadrunner”搜索词,如图8-198所示。

图8-198 搜索文本框及对应的ID相关属性信息
最后,单击“全部”按钮,如图8-199所示。

图8-199 全部按钮及对应的ID相关属性信息
上述过程的脚本代码,如下所示:
from appium import webdriver
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 loadrunner')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
通过自动化测试工具录制或者编写脚本的时候,按照业务操作步骤产生的相应线性脚本,
每个脚本相对独立,不依赖于其他脚本。在前面章节我们写的脚本基本都是线性脚本,不知道大家有没有发现这样的脚本存在什么问题呢?是的,这种类型的脚本结构清晰明了,但脚本代码相对冗长。举个例子:假设要在Bing搜索,搜索2次关键词,那么每次都有定位元素重复性的脚本代码,如下所示。
from appium import webdriver
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 loadrunner')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
#等待2秒,让大家看到搜素后的结果信息
time.sleep(2)
#单击“返回”按钮,参见图8-200所示
driver.find_element_by_id('com.microsoft.bing:id/opal_toolbar_back').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys('于涌 Appium')
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
图8-200 返回按钮及对应的ID相关属性信息
大家不难发现,每进行一次搜索都有至少4行重复性代码。那么如果我们要搜索10个关键词,就会有40行重复性元素定位、操作的代码。
- 模块化驱动测试
模块化驱动测试借鉴了编程语言的思想,将一些经常使用的重复性代码给封装成类或者放到一个公共模块封装为函数,方便业务脚本调用它们,而减少冗余代码。
这里同样给大家举一个例子,就是将搜索的重复性过程封装到一个公共模块写到函数里,代码如下所示。
comm.py文件:
import time
def searchkey(driver,kw):
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#单击搜索框
driver.find_element_by_id('com.microsoft.bing:id/search_box').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
#向搜索文本框输入查询的搜索词内容
driver.find_element_by_id('com.microsoft.bing:id/search_text_field').send_keys(kw)
#单击“全部”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_as_web').click()
ys_modularization.py文件:
from appium import webdriver
from comm import searchkey
import time
caps = {
'platformName': 'Android',
'deviceName': '127.0.0.1:62001',
'platformVersion': '5.1.1',
'appPackage': 'com.microsoft.bing',
'appActivity': 'com.microsoft.clients.bing.app.MainActivity'
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
#单击跳过按钮
driver.find_element_by_id('com.microsoft.bing:id/skip_text').click()
searchkey(driver,'于涌 loadrunner')
#等待2秒,让大家看到搜素后的结果信息
time.sleep(2)
#单击“返回”按钮
driver.find_element_by_id('com.microsoft.bing:id/opal_toolbar_back').click()
#等待1秒钟,目的让后续元素能够显示出来再操作
time.sleep(1)
searchkey(driver,'于涌 Appium')
结合上面两个脚本,作者将搜索的重复性过程封装到comm.py文件。封装了一个名称为searchkey()的函数,包含3条元素定位、操作语句和1条睡眠语句。而后在业务测试脚本testscript.py文件导入comm模块的searchkey函数。只需调用2次searchkey函数就执行了先前8条语句的内容,可以看出封装后,代码量明显减少。
当然除了将重复代码封装成公共函数以外,还可以使用PageObject设计模式将页面元素和操作封装成类进行调用,这个内容作者将在“PageObject设计模式”章节进行详细讲解。它也属于模块化驱动测试。
用ChatGPT做软件测试
相关文章:
自动化测试模型(一)
8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中,测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象,总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…...
解决nuxt3下载慢下载报错问题
在下载nuxt3时总是下不下来,最后还报错了。即使改成国内镜像源也不行。 解决方法: 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录: 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...
Ubuntu修改swap大小
查看swap位置和大小: swapon -s 方案一:修改原有文件大小方式 第一步:进入系统根目录cd /; 第二步:执行:sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块,即16G 第三步:执行…...
[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)
文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步:计算 (a*c) (-b*d)i2.1.4 第2步:计算 (a*d) (b*c)i2.1.5 第3步:计算结果合并 2.2 算法实现(UseVectors)2.…...
C#WPF基础介绍/第一个WPF程序
什么是WPF WPF(Windows Presentation Foundation)是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分,提供了一套先进的用户界面设计工具和功能,可以实现丰富的图形、动画和多媒体效果。 WPF 使用…...
强大的接口测试可视化工具:Postman Flows
Postman Flows是一种接口测试可视化工具,可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API,数据可视化来显示…...
系统设计及解决方案
发送验证码 1:根据手机号从Redis中获取value(验证码_时间戳) 2:如果value不为空,并且时间戳与当前时间戳的间隔小于60秒,则返回一个错误信息 3:生成随机验证码 4:调用阿里云短信服务API给用户发送短信验证码…...
从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】
1. 常用资料以及官方网站 无人机飞控PX4用户使用手册(无人机基本设置、地面站使用教程、软硬件搭建等):https://docs.px4.io/main/en/ PX4固件开源地址:https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...
Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验
一,alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①,使能GPIO时钟 ②,设置IO复用,复用为GPIO ③,配置GPIO的电气属性推挽,上拉下拉 ④,使用GPIO,输出高/低电平 MX6ULL IO初始化…...
e3 1220lv3 cpu-z分数
e3 1220lv3 双核四线程,1.1G频率,最低可在800MHZ运行,TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...
HTML5适配手机
要使 HTML5 网站适配手机设备,您可以遵循以下几个步骤和最佳实践: 1. 使用视口(Viewport) 在 HTML 文档的 <head> 部分添加视口元标签,以确保页面在移动设备上正确缩放和显示: <meta name"…...
C# 中使用 MassTransit
在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…...
网络编程 实现联网 b+Tree
网络编程是客户端和服务器之间通信的基础,也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能,需要结合计算机网络原理、数据结构与算法,以及网络协议的实际应用。以下是对这一块内容的详细介绍,包括每个涉及到的知识点&…...
zentao ubuntu上安装
#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz(https://www.zentao.net/downloads.html) https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…...
Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON
这里是Themberfue 在学习完简单的网络编程后,我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时,我们通过一个线程处理连接的申请,随后通过多线程或者线程…...
Bash Shell知识合集
1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行,我们要用chmod命令授予它可执行的权限: ~script $ chmod 755 hello.sh授权后的脚本可以直接执行: ~script $ ./hello.sh2.指定运行…...
从0入门自主空中机器人-1【课程介绍】
关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…...
Doris使用注意点
自己学习过程中整理,非官方 dws等最后用于查询的表可以考虑使用row存储加快查询,即用空间换时间duplicate key的选择要考虑最常查询使用适当使用bloomfilter 加速查询适当使用aggregate 模式降低max,avg,min之类的计算并加快查询…...
Mybatis插件better-mybatis-generator的下载与使用
1.下载 找到设置 插件 搜索better-mybatis-generator 下载并且重启IDEA 2.连接数据库 点击测试连接 连接成功如下图 3.使用插件 选择对应的表 右击选择 注意:mysql8.0驱动一定要勾上mysql_8 其他地方不要动 然后实体类 mapper xml就都生成好了 mapper里有默认增删…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
多平台资源嗅探与下载工具:解决网络资源获取难题的技术方案
多平台资源嗅探与下载工具:解决网络资源获取难题的技术方案 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gitcod…...
JMeter vs Claude Code:从“约束系统“到“解放系统“的工程设计范式跃迁
当你还在用 JMeter 写线程组的时候,Claude Code 已经在用自然语言编排测试工作流了。这不是工具的迭代,是工程设计范式的代际更替。前言:两代工程设计哲学的碰撞 2026 年,AI 编程工具已经从"代码生成器"进化为"自主…...
DCT-Net人像卡通化效果展示:高清人脸转二次元虚拟形象作品集
DCT-Net人像卡通化效果展示:高清人脸转二次元虚拟形象作品集 一键将真人照片变成二次元虚拟形象,体验AI绘画的神奇魅力 1. 效果惊艳:从真人到二次元的华丽变身 DCT-Net人像卡通化技术能够将普通的人物照片转换成精美的二次元虚拟形象&#x…...
终极指南:如何使用RPGMakerDecrypter轻松解密游戏资源
终极指南:如何使用RPGMakerDecrypter轻松解密游戏资源 【免费下载链接】RPGMakerDecrypter Tool for extracting RPG Maker XP, VX and VX Ace encrypted archives. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter RPGMakerDecrypter是一款…...
频繁冲突?数据静默损坏?Obsidian + 坚果云插件打造工业级笔记同步与容灾方案
在个人知识管理(PKM)领域,有一条铁律:比“从未备份”更可怕的,是“错误的同步导致的静默覆盖”。 对于 Obsidian 重度用户而言,几千篇 Markdown 笔记是毕生心血。当你兴冲冲地在手机、iPad 和公司电脑之间…...
教你把歌曲原声调小的5个技巧!简单又好用 赶紧收藏
在日常生活中,调整歌曲原声调小是非常常见的音频处理需求。比如在剪辑视频时,可能需要降低背景音乐的音量以突出旁白;或者在制作播客时,需要平衡人声与背景音的比例;还有在手机上听音乐时,某些歌曲突然出现…...
超越SIFT?图像匹配实战对比:SIFT、ORB、SURF在无人机航拍图中的表现
无人机航拍图像特征匹配算法实战评测:SIFT、ORB、SURF横向对比 当无人机掠过城市上空,传回的航拍图像如何快速准确地完成拼接与匹配?特征提取算法的选择直接决定了三维重建的精度与效率。本文将基于真实无人机数据集,从工程实践角…...
突破平台限制:基于Go+Qt5的喜马拉雅音频下载解决方案
突破平台限制:基于GoQt5的喜马拉雅音频下载解决方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 喜马拉雅FM作为国内…...
OpCore-Simplify:重新定义黑苹果配置的智能自动化体验
OpCore-Simplify:重新定义黑苹果配置的智能自动化体验 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经想过,黑苹果配…...
利用爱毕业aibiye等智能软件,论文写作与编程工作流程得到革新,AI为学术研究提供新思路
文章总结表格(工具排名对比) 工具名称 核心优势 aibiye 精准降AIGC率检测,适配知网/维普等平台 aicheck 专注文本AI痕迹识别,优化人类表达风格 askpaper 快速降AI痕迹,保留学术规范 秒篇 高效处理混AIGC内容&…...

