自动化测试概念篇

文章目录

  • 目录
    • 1. 自动化
      • 1.1 自动化概念
        • 1.1.1 回归测试
      • 1.2 自动化分类
      • 1.3 自动化测试金字塔
    • 2. web自动化测试
      • 2.1 驱动
        • 2.1.1 安装驱动管理
        • 2.1.2 selenium库
    • 3. Selenium
      • 3.1 一个简单的web自动化示例
      • 3.2 selenium+驱动+浏览器的工作原理

目录

  • 自动化
  • web自动化测试
  • Selenium

1. 自动化

1.1 自动化概念

自动的代替人的行为完成操作。

自动化在生活中处处可见:自动洒水机,只要通上水就可以自动化洒水并且可以自动的旋转;自动洗手液,免去了手动挤压可以自动感应出洗手液;超市自动闸门,不需要手动的开门关门。

生活中的自动化案例有效的减少了人力的消耗,同时也提高了生活的质量。

软件中的自动化测试也是如此,通过自动化测试有效减少人力的消耗的同时也提高了测试的质量和效率。

自动化的主要目的就是用来进行回归测试。

1.1.1 回归测试

软件有多个版本需要进行功能的整体回归,为了避免新增功能影响到历史的功能需要进行功能的回归。

1.2 自动化分类

自动化分类

1.3 自动化测试金字塔

自动化的类型非常多,那么到底哪一种是最好的?哪一种测试的收益会更佳?

这里我们介绍测试圈内非常著名的自动化测试金字塔:

理想的自动化测试金字塔

开发人员写完代码之后就执行单元测试,不需要额外的时间和精力来熟悉代码,因此投资回报率最高。

前端可以看到的元素非常多:文字、图片、输入框、按钮… 每个元素的大小、颜色、形状… 都需要进行测试,而且前端涉及到的不可靠因素太多了,编写自动化脚本相较于接口自动化脚本而言难度会大一些,消耗的人力和时间的成本也会更大一些。

理想的自动化测试金字塔表达了自动化测试的理想情况,利用较少的时间和精力在单元测试上就能够发现更多有效的问题。

然而实际上在企业中,自动化往往是“冰淇淋蛋筒反模式”:

自动化测试“冰淇淋蛋筒反模式”

相较于测试人员来说,开发人员不那么注重测试,因此,实际工作中单元测试投入的时间和精力会比较少。

自动化需要大量的初始投资,找到“突破点”,与手动测试相比,我们开始看到它对长期成本产生的积极影响,也能够清楚,这两种测试活动都是完全兼容,产生短期和长期利益。

2. web自动化测试

自动化测试步骤

2.1 驱动

上面给大家已经介绍过,web系统的测试前提是需要打开浏览器,通过访问web服务器来对服务器界面进行一系列的操作。对于手工测试来说,这一系列的操作都需要测试人员手动的,一步一步的来执行测试。那么对于自动化程序来说,程序如何才能打开浏览器并执行我们预期的操作流程呢?

驱动一词应用广泛,同学们都不会陌生。

车有了驱动才能够让车跑起来。

计算机有了驱动程序就可以与设备(耳机,摄像头,麦克风,键盘,显示器等等设备)进行通信。

驱动程序

程序想要打开web浏览器就需要安装web驱动(即WebDriver),WebDriver以本地化方式驱动浏览器。

WebDriver

2.1.1 安装驱动管理

若通过安装驱动的方式来启动浏览器,每次浏览器更新后对应的驱动也需要更新,为了解决这个问题,selenium中提供了驱动管理工具webdriver-manager,有了webdriver-manager无需手动安装浏览器驱动,即使浏览器更新也不会影响自动化的执行。

命令:pip install webdriver-manager

驱动管理:

webdriver-manager支持的python版本为:3.7~3.11

WebDriver Manager是一个开源的命令行工具,它可以自动下载和安装适用于不同浏览器的WebDriver。通过使用WebDriver Manager,我们可以确保浏览器驱动版本始终与浏览器版本保持一致,从而避免因版本不匹配而导致的各种问题。

2.1.2 selenium库

安装selenium库

selenium版本很多,统一使用selenium 4.0.0版本

pip install selenium==4.0.0

3. Selenium

接下来就是使用selenium来编写web自动化测试脚本。

selenium是一个web自动化测试工具,selenium中提供了丰富的方法供给使用者进行web自动化测试。

3.1 一个简单的web自动化示例

web自动化示例

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager#编写自动化脚本,具体步骤#1.打开浏览器----驱动管理
ChromeIns=ChromeDriverManager().install()
###创建谷歌浏览器驱动对象
driver=webdriver.Chrome(service=Service(ChromeIns))
time.sleep(2)
#2.输入百度网址:https://www.baidu.com(网址一定要完整,不要写成www.baidu.com)
driver.get("https://www.baidu.com")
time.sleep(2)
#3.找到百度输入框,输入关键词“迪丽热巴”
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("迪丽热巴")
time.sleep(2)
#4.点击“百度一下”按钮
driver.find_element(By.CSS_SELECTOR,"#su").click()
time.sleep(2)
#5.关闭浏览器
driver.quit()

3.2 selenium+驱动+浏览器的工作原理

实现web自动化测试需要浏览器、浏览器驱动、selenium自动化脚本。这三者是如何交互最终实现web的自动化测试?

selenium+驱动+浏览器的工作原理

  1. 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务
  2. 通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地址
  3. 向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id
  4. 打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到webdriver,然后使用execute发送请求
  5. 驱动收到请求并对请求进行解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求的内容执行对应动作
  6. 浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本

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

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

相关文章

《AI大模型应知应会100篇》第17篇:大模型的偏见与公平性问题

第17篇:大模型的偏见与公平性问题 摘要 在人工智能迅速发展的今天,大型语言模型(LLM)已经深入到我们的日常生活和工作中。然而,这些模型并非完美无缺,它们可能携带并放大数据中的偏见,导致不公…

【踩坑】GitHub Actions 运行的 Linux 环境中,文件名是大小写敏感的

在使用 VuePress 搭建个人博客并部署到 GitHub Pages 的过程中,我遇到了一个颇为棘手的问题:本地打包一切正常,但在 GitHub Actions 自动执行打包流程时,却提示找不到 README.md 文件,导致整个流程失败。经过一番深入排…

C# 13新特性 - .NET 9

转载: C# 13 中的新增功能 | Microsoft Learn C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 SDK 尝试这些功能:Introduced in Visual Studio 2022 Version 17.12 and newer when using C# 13 C# 13 中的新增功能 | Micr…

numpy.ma.masked_where:屏蔽满足条件的数组

1.函数功能 屏蔽满足条件的数组内容,返回值为掩码数组 2.语法结构 np.ma.masked_where(condition, a, copyTrue)3. 参数 参数含义condition屏蔽条件a要操作的数组copy布尔值,取值为True时,结果复制数组(原始数据不变),否则返回…

【Redis】数据结构和内部编码

先来复习一下之前学过的几个基本的全局命令: keys:用来查看匹配规则的keyexists:用来判定执行key是否存在del:删除指定的keyexpire:给key设置过期时间ttl:查询key的过期时间type:查询key对应的…

OBOO鸥柏如何以智能教育室内外触摸屏一体机AI变革硬件

在AI技术蓬勃发展的当下,OBOO鸥柏室外触摸屏一体机通过融入AI科技,为教育领域带来了翻天覆地的变化。这款一体机不仅为高校和大学校园提供了革命性的数字化教学解决方案,更引领了引体向上成绩提升一体机带训室外终端屏幕设备的新潮流。其创新…

从零搭建高并发体育直播网站:架构设计、核心技术与性能优化实战

本文从技术视角拆解体育直播网站开发全流程,涵盖高并发架构设计、低延迟视频流传输、实时弹幕系统实现等核心模块,并附可复用的代码片段与优化方案。适合中高级开发者进阶实战参考。 一、需求分析与技术选型 1. 典型业务场景 核心需求:支持1…

【Python内置函数的深度解析与应用】id

目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现1. 基础身份验证2. 不可变对象优化3. 对象生命周期追踪 运行结果验证 三、性能对比测试方法论量化数据…

3.vtkProp 和vtkProp3D

文章目录 vtkProp 和vtkProp3D使用vtkProp3D使用vtkPro vtkProp 和vtkProp3D vtkProp 和 vtkProp3D 都是VTK(Visualization Toolkit)库中的类,它们用于在渲染场景中表示可视化元素。理解这两个类的区别和用途对于有效地使用VTK进行三维数据可…

【ZYNQ Linux移植】2-获取设备树

0 写在前面 这是一个系列博客,详细介绍如何在 ZYNQ 与 ZYNQ MP 平台上如何移植 Linux 系统。目前网络上的大部分教程都是全程基于 Petalinux 的开发,虽然这样简化了开发流程,但对于初学者深入理解掌握 Linux 是不利的,所以&#x…

基础算法篇(5)(蓝桥杯常考点)—动态规划(C/C++)

文章目录 动态规划前言线性dp路径类dp经典线性dp背包问题分类01背包问题完全背包问题多重背包分组背包问题混合背包问题多维费用的背包问题区间dp 动态规划 前言 在竞赛中,如果遇到动态规划的题目,只要不是经典题型,那么大概率就是以压轴题的…

obsidian写文章的图床设置方法

目标 要达成的需求: 复制到obsidian的图片,自动上传到Picgo配置的图床。可以自定义大小。可以一键下载当前文章的图片到本地。 obsidian配置图床 安装并配置插件 image auto upload plugin,配置信息如下图。 滚轮alt自定义大小 安装并…

QPaintDevice绘图设备

1.QPixmap 对不同平台做了显示的优化,可以将画的图保存到磁盘上 头文件: #include"QPixmap" #include"QPainter" 1.1QPixmap画图 代码: //Pixmap绘图设备QPixmap pix(300,300);//声明画家QPainter painter(&pix…

数据结构有哪些类型(对于数据结构的简述)

在学习计算机时,数据结构是不可忽视的一点,从考研时的408课程,再到工作中编写软件,网站,要想在计算机领域站住脚跟,数据结构是必备的 在这里,我对于数据结构进行了汇总,并简要描述&…

L2TP实验(无图后补)

拓扑图 一、搭建拓扑并配置基础 IP 地址 设备选型与拓扑搭建:在 eNSP 中,拖入所需设备,包括 LAC(L2TP Access Concentrator,L2TP 接入集中器 )、LNS(L2TP Network Server,L2TP 网络服…

【C#】CAN通信的使用

在C#中实现CAN通信通常需要借助第三方库或硬件设备的驱动程序,因为C#本身并没有直接内置支持CAN通信的功能。以下是一个关于如何使用C#实现CAN通信的基本指南,包括所需的步骤和常用工具。 1. 硬件准备 要进行CAN通信,首先需要一个支持CAN协…

02_C++入门案例习题while循环练习案例:猜数字

案例描述&#xff1a;系统随机生成一个1到100之间的数字&#xff0c;玩家进行猜测&#xff0c;如果猜错&#xff0c;提示玩家数字过大或过小&#xff0c;如果猜对恭喜玩家胜利&#xff0c;并且退出游戏。 需要引入随机数种子 #include <cstdlib> #include <ctime>…

深入理解哈希冲突:原理、解决方案及 Java 实践

概述&#xff1a;在计算机科学领域&#xff0c;哈希表是一种非常重要的数据结构&#xff0c;它通过哈希函数将键映射到存储桶中&#xff0c;从而实现快速的数据查找、插入和删除操作。然而&#xff0c;哈希表在实际应用中会面临 哈希冲突的问题。本文将深入探讨哈希冲突的原理、…

opencv(C++)处理图像颜色

文章目录 介绍使用策略设计模式比较颜色实现方案计算两个颜色向量之间的距离1. 简单方法&#xff1a;曼哈顿距离计算&#xff08;Manhattan Distance&#xff09;2.使用 OpenCV 的 cv::norm 函数3.使用 OpenCV 的 cv::absdiff 函数错误示例 使用 OpenCV 函数实现颜色检测实现方…

DOM解析XML:Java程序员的“乐高积木式“数据搭建

各位代码建筑师们&#xff01;今天我们要玩一个把XML变成内存乐高城堡的游戏——DOM解析&#xff01;和SAX那种"边看监控边破案"的刺激不同&#xff0c;DOM就像把整个乐高说明书一次性倒进大脑&#xff0c;然后慢慢拼装&#xff08;内存&#xff1a;你不要过来啊&…