当前位置: 首页 > news >正文

自动化测试模型(一)

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 网站适配手机设备&#xff0c;您可以遵循以下几个步骤和最佳实践&#xff1a; 1. 使用视口&#xff08;Viewport&#xff09; 在 HTML 文档的 <head> 部分添加视口元标签&#xff0c;以确保页面在移动设备上正确缩放和显示&#xff1a; <meta name"…...

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时&#xff0c;通常需要进行详细的配置&#xff0c;包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例&#xff0c;展示了如何在 ASP.NET Core 应用程序中配置 MassTransit&#xff0c;包括请求/响应模式和…...

网络编程 实现联网 b+Tree

网络编程是客户端和服务器之间通信的基础&#xff0c;也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能&#xff0c;需要结合计算机网络原理、数据结构与算法&#xff0c;以及网络协议的实际应用。以下是对这一块内容的详细介绍&#xff0c;包括每个涉及到的知识点&…...

zentao ubuntu上安装

#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz&#xff08;https://www.zentao.net/downloads.html&#xff09; 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 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

Bash Shell知识合集

1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行&#xff0c;我们要用chmod命令授予它可执行的权限&#xff1a; ~script $ chmod 755 hello.sh授权后的脚本可以直接执行&#xff1a; ~script $ ./hello.sh2.指定运行…...

从0入门自主空中机器人-1【课程介绍】

关于本课程&#xff1a; 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程&#xff0c;包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程&#xff0c;带你从0开始&#xff0c;组装属于自己的自主无人机&#xff0c;并让…...

Doris使用注意点

自己学习过程中整理&#xff0c;非官方 dws等最后用于查询的表可以考虑使用row存储加快查询&#xff0c;即用空间换时间duplicate key的选择要考虑最常查询使用适当使用bloomfilter 加速查询适当使用aggregate 模式降低max&#xff0c;avg&#xff0c;min之类的计算并加快查询…...

Mybatis插件better-mybatis-generator的下载与使用

1.下载 找到设置 插件 搜索better-mybatis-generator 下载并且重启IDEA 2.连接数据库 点击测试连接 连接成功如下图 3.使用插件 选择对应的表 右击选择 注意&#xff1a;mysql8.0驱动一定要勾上mysql_8 其他地方不要动 然后实体类 mapper xml就都生成好了 mapper里有默认增删…...

uniapp小程序实现弹幕不重叠

uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...

Scarab:让空洞骑士模组管理变得如此简单

Scarab&#xff1a;让空洞骑士模组管理变得如此简单 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经因为空洞骑士模组安装的复杂流程而头疼&#xff1f;是否在寻找依…...

从数据清洗到结果可视化:一份给地理学新手的R语言geodetector实战避坑指南

从数据清洗到结果可视化&#xff1a;一份给地理学新手的R语言geodetector实战避坑指南 第一次用R语言跑地理探测器时&#xff0c;我盯着满屏的报错信息差点崩溃——明明照着教程一步步操作&#xff0c;为什么别人的代码能跑出漂亮的结果&#xff0c;我的却总在数据导入环节就卡…...

我已战胜一切!感谢哥白尼,感谢爱因斯坦,感谢豆包,,,曾经我都经历过什么,我自己非常清楚,既有爱因斯坦的压缩版,又有哥白尼的压缩版,,,

不是时代不好&#xff0c;是人心中的成见就像一座大山般&#xff0c;无法被逾越&#xff0c;只有暴雨降下&#xff0c;洗刷这个世界&#xff0c;重塑这个宇宙&#xff0c;各位其位&#xff0c;大道至简。历史的车轮早已不可阻挡&#xff0c;&#xff0c;&#xff0c;暴风雨会来…...

SDXL 1.0电影级绘图工坊惊艳案例:电影质感风景图动态范围实测

SDXL 1.0电影级绘图工坊惊艳案例&#xff1a;电影质感风景图动态范围实测 1. 项目简介 SDXL 1.0电影级绘图工坊是基于Stable Diffusion XL Base 1.0模型深度优化的AI绘图工具&#xff0c;专门为RTX 4090显卡的24G大显存进行了极致性能调优。与常规部署方式不同&#xff0c;这…...

终极指南:如何彻底解决Colab运行text-generation-webui的Matplotlib后端错误

终极指南&#xff1a;如何彻底解决Colab运行text-generation-webui的Matplotlib后端错误 【免费下载链接】text-generation-webui The original local LLM interface. Text, vision, tool-calling, training, and more. 100% offline. 项目地址: https://gitcode.com/GitHub_…...

STM32开发方式对比与HAL库实战指南

1. STM32开发方式概述作为一名嵌入式开发者&#xff0c;我亲历了STM32开发方式的变迁。从早期的寄存器操作到标准库&#xff0c;再到如今主流的HAL库&#xff0c;每种方式都有其独特的优势和适用场景。对于刚接触STM32的新手来说&#xff0c;选择合适的开发方式往往是个令人困惑…...

避坑指南:Unreal导航网格NavMesh生成与Agent属性设置的5个常见误区

Unreal引擎导航系统避坑指南&#xff1a;NavMesh生成与Agent配置的5个关键误区 在Unreal引擎中构建可靠的AI寻路系统时&#xff0c;许多开发者常陷入相似的陷阱。当AI角色频繁卡在门槛边缘、拒绝攀爬斜坡或选择匪夷所思的绕路路线时&#xff0c;问题往往不在于代码逻辑&#xf…...

如何免费将OFD转PDF?Ofd2Pdf完整使用指南

如何免费将OFD转PDF&#xff1f;Ofd2Pdf完整使用指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 你是否经常收到OFD格式的文件却无法打开&#xff1f;无论是电子发票、政府公文还是企业文档&…...

字符串拆分合并

贪心算法,最长限制。 import reclass TextFilter:def __init__(self):# 字符映射规则self.char_map = {# 省略号 → 停顿…: ,, ...: ,,: ,,# 破折号 → 停顿——: ,, —: ,,# 书名号 → 直接删除《: , 》: , 〈: , 〉: ,# 其他特殊符号 → 删除*: , /: , #: ,}# 需要保留的…...

使用Tableau Public

一、实验准备 官网&#xff1a;探索 | Tableau Public 二、实验步骤 &#xff08;一&#xff09;数据获取与导入 打开 Tableau Public&#xff0c;点击左侧 **“获取数据”** → 选择 **“示例数据集”**。在示例数据集列表中选个顺眼的。数据加载后&#xff0c;在左侧 “数…...