自动化测试模型(一)
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…...
八:操作系统设备管理之缓冲、缓存与假脱机
弥合鸿沟:操作系统中的缓冲、缓存与假脱机技术深度解析 在计算机系统的世界里,存在着一个根本性的速度差异:中央处理器(CPU)的执行速度飞快,而输入/输出(I/O)设备(如硬盘…...
qt network 整体框架
以下是 Qt 网络模块中 QNetworkInterface、TCP、UDP 及相关类的层次关系图及说明: 一、Qt 网络模块层次结构 ┌─────────────────────────────────────────────────────────────┐ │ QtNetwork 模…...
powershell 安装 .netframework3.5
在 PowerShell 中安装 .NET Framework 3.5 可以通过几种不同的方法实现,取决于你的操作系统版本。以下是几种常见的方法: 方法1:使用 DISM 命令 对于 Windows 10 和 Windows 8.1,你可以使用 DISM(Deployment Image Se…...
数据库学习(二)——MySQL语句
MySQL 语句分为: 语句类型作用关键字示例数据查询(DQL)查询数据SELECT数据操作(DML)插入、更新、删除数据INSERT, UPDATE, DELETE数据定义(DDL)定义或修改表结构CREATE, ALTER, DROP事务控制&a…...

windows命令行面板升级Git版本
Date: 2025-06-05 11:41:56 author: lijianzhan Git 是一个 分布式版本控制系统 (DVCS),由 Linux 之父 Linus Torvalds 于 2005 年开发,用于管理 Linux 内核开发。它彻底改变了代码协作和版本管理的方式,现已成为软件开发的事实标准工具&…...

深入理解 Spring IOC:从概念到实践
目录 一、引言 二、什么是 IOC? 2.1 控制反转的本质 2.2 类比理解 三、Spring IOC 的核心组件 3.1 IOC 容器的分类 3.2 Bean 的生命周期 四、依赖注入(DI)的三种方式 4.1 构造器注入 4.2 Setter 方法注入 4.3 注解注入(…...
Android第十四次面试总结
OkHttp中获取数据与操作数据 一、数据获取核心机制 1. 同步请求(阻塞式) // 1. 创建HTTP客户端(全局应复用实例) OkHttpClient client new OkHttpClient();// 2. 构建请求对象(GET示例) Request r…...
Dynamics 365 Finance + Power Automate 自动化凭证审核
🚀 Dynamics 365 Finance Power Automate 自动化凭证审核 📑 目录 🚀 Dynamics 365 Finance Power Automate 自动化凭证审核1. 依赖 🔧2. 目标 🎯3. 系统架构 🏗️4. 凭证审批全流程 🛠️4.1 …...
Oracle 用户名大小写控制
Oracle 用户名大小写控制 在 Oracle 数据库中,用户名的默认大小写行为和精确控制方法如下: 一 默认用户名大小写行为 不引用的用户名:自动转换为大写 CREATE USER white IDENTIFIED BY oracle123; -- 实际创建的用户名是 "WHITE"…...
蓝桥杯单片机之通过实现同一个按键的短按与长按功能
实现按键的短按与长按的不同功能 问题分析 对于按键短按,通常是松开后实现其功能,而不会出现按下就进行后续的操作;而对于按键长按,则不太一样,按键长按可能分为两种情况,一是长按n秒后实现后续功能&…...