自动化测试模型(一)

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做软件测试

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

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

相关文章

语音识别基础算法——动态时间规整算法

前言 动态时间规整算法,Dynamic Time Wraping,缩写为DTW,是语音识别领域的一个基础算法。 算法的提出 DTW 的提出是为了解决或尽量解决在语音识别当中的孤立词识别不正确的问题。该问题简单描述为:在识别阶段,将输入…

Word论文交叉引用一键上标

Word论文交叉引用一键上标 1.进入Microsoft word使用CtrlH快捷键或单击替换按钮 2.在查找内容中输入[^#] 3.鼠标点击,标签为“替换为:”的文本框,注意光标一定要打在图红色方框圈中的文本框中! 4.点击格式选择字体 5.勾选上标…

BLIP论文笔记

论文地址 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文思想 其实Clip就相当于只用了ITC

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致,并确保团队拥有交付出色工作所需的资源。在过去几年中,由于分布式团队的需求不断增加,项目经理这一角色已迅速…

【交叉编译】sysstat 离线编译

1、下载源码 首先从下载: https://github.com/sysstat/sysstat/tags ,我直接下载最新的 2、配置交叉编译链 快速的方法就是把整个编译包全部放在Linux ,然后编辑~/.zshrc或者~/.bashrc,在最后加入: export PATH$PATH:/opt/arm-so…

算法题(20):买卖股票的最佳时机

审题: 需要返回最大利润值 思路: 首先我们需要看看股票走势图 我们看到股票走势图是把数据图像化了,那么我们观察这个股票图的时候发现他在某一段区间呈大体上升,而大体上升的前提就是没有出现比最低点更低的数据值。 根据这一点我…

IDEA XML 文件 SQL 提示

首先连接到对应的数据库。Database 里面要填写对应的数据库名称 配置当前项目的 SQL 方言,例如我这里是 MySQL 数据库管理系统,那么就选择 MySQL 此时就有 SQL 语法、表名、字段名等提示信息了

【STM32项目】基于STM32单片机温湿度PM2.5粉尘甲醛环境质量监测系统wifi【完整工程资料源码】

演示视频: 基于STM32单片机温湿度PM2.5粉尘甲醛环境质量监测系统 目录 演示视频: 一、项目简介: 1.1 功能介绍: 1.2 设计背景: 1.3 设计意义: 1.4 设计目的 二、硬件设计: 2.1 整体原理图设计&…

优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变

优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变 在当今数字营销环境中,搜索引擎优化(SEO)是提升网站流量和可见性的关键策略。苹果CMS作为一款灵活的内容管理系统,提供了丰富的插件功能,尤其是…

SAP PP bom历史导出 ALV 及XLSX 带ECN号

bom总数 104W PS超过XLSX上限 ,那就分文件 *&---------------------------------------------------------------------* *& Report ZRPT_PP_BOM_HIS_ECN *&---------------------------------------------------------------------* *& tcode:zpp0…

HAL 库句柄

一、命名方式:句柄是h为首字母,后面接协议名称 比如:huart、hadc、hi2c等 二、句柄类型: 这里拿huart举例,它的类型是UART_HandleTypeDef 进去stm32f1xx_hal_uart.h之后发现句柄的结构定义有部分是灰色的 灰色的当U…

JVM 性能监控工具之命令行篇

在 Java 开发过程中,性能监控和问题排查是开发者经常面临的任务。JDK 提供了一系列命令行工具,帮助开发者监控 JVM 运行状态、诊断内存泄漏、线程死锁等问题。本文将详细介绍这些工具的使用方法及其应用场景。 1 JDK性能监控工具 1.1 jps:查…

使用IDEA远程debug服务器上的jar包

仅用于测试环境调试,debug会阻塞 如生产jar包叫 test.jar ,部署的IP为10.184.136.18,端口为9999,idea的项目为local-network,照如下配置即可,仅红色部分需替换 弄完之后,打开debug,…

【SQL Server】教材数据库(3)

接着教材数据库(1)的内容,完成下列查询。 1 查询订购高等教育出版社教材的学生姓名 2 查询比所有高等教育出版社的图书都贵的图书信息 3 列出每位学生姓名、订购教材书名、价格。 1、嵌套查询:use jiaocai select student.nam…

你有哪些Deep Learning(RNN、CNN)调参的经验?

在深度学习的实践中,调参是一项既艺术又科学的工作。它不仅需要理论知识的支撑,还需要大量的实践经验。以下是一些在RNN和CNN模型调参中积累的经验,希望对正在这个领域摸索的朋友们有所帮助。 1. 从成熟的开源项目开始 对于初学者来说&…

Unity3D仿星露谷物语开发11之添加Scenary Fader

1、目标 当角色移动到草/树的后面时,因为草/树层级优先级大于等于角色,导致角色无法全部展示。 如下图所示,草遮挡了一半的角色,而树则遮挡了全部的角色。 我们希望当角色走到草/树的后面时,草/树能够改变透明度&…

021-spring-springmvc

比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是: org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc.method.annotation.Requ…

关于 PCB线路板细节锣槽问题 的解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144783817 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

无人机快速巡检、森林、电力、水利大大节省人力成本,降低风险事故

无人机在快速巡检、森林、电力、水利等领域的应用,确实大大节省了人力成本,并有效降低了风险事故。以下是对这些应用的详细分析: 一、无人机快速巡检 无人机快速巡检技术以其高效性、安全性和精准性,在众多领域展现出了巨大的应…

生态碳汇涡度相关监测与通量数据分析实践技术应用

基于MATLAB语言、以实践案例为主,提供所有代码、原理与操作结合 1、以涡度通量塔的高频观测数据为例,基于MATLAB开展上机操作: 2、涡度通量观测基本概况:观测技术方法、数据获取与预处理等 3、涡度通量数据质量控制&#xff1a…