关于Python 的 Web 自动化测试的实践

news2024/11/28 8:35:14

Web 测试是软件测试中比较重要的一个分支,而要实现 Web 自动化测试则要求测试人员能熟练掌握自动化测试工具和编程语言。介绍免费开源的 Web 测试工具 Selenium,以及流行的编程语言 Python。根据自动化测试的原理,对网页元素的常用定位方式,如何对页面元素进行操作进行重点叙述。结合工作实际分析自动化测试的基本流程,即分析测试需求、编写测试用例、搭建测试环境、创建测试脚本、执行测试及测试结果分析。最后对自动化测试的实践进行总结和展望,为后续更好地开展测试工作奠定基础。

与手工测试类似,自动化测试也需要制定测试计划,根据软件需求规格说明书分析测试需求,使用黑盒、白盒等方法设计测试用例,在搭建好测试环境的基础上使用相关语言编写自动化脚本,执行测试并记录缺陷等。当然在执行自动化脚本之前也需要进行手工测试,为更好地发现缺陷奠定坚实的基础。

1 自动化测试技术

1.1测试工具

根据被测软件的类型不同,可以选择不同的测试工具。例如针对桌面应用,主流的测试工具有 UTF、Auto Runner 等;如果测试的是 Web 系统,Selenium 则是一种非常不错的选择。

Selenium 是一款免费、开源的分布式的自动化测试工具,对商业用户也没有任何限制;支持多种平台,可以在 Windows、Linux、Mac 和 Solaris 等多种操作系统上运行;支持多种浏览器,包括 IE、Firefox、Safari、Opera、Chrome 等;使用方便,支持脚本录制,可以将测试用例分布到不同的测试机器上执行;支持多种语言,包括C、Java、Ruby、Python、C#等。

1.2Python语言

Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。它的特点包括:代码简洁、短小,开源、跨平台,面向对象,可扩展性好等,因此它被应用于数据分析与处理、网络爬虫、Web 应用开发、人工智能、自动化测试等多个领域。

在自动化测试领域既可以使用 Python 的标准库 PyUnit 作为自动化测试框架,也可以使用 Robot Frame?work 等自动化测试框架来开展工作,该框架具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。

2 网页元素定位

自动化功能测试工具 Selenium 可以模仿人类对网页进行自动化的操作,那么要实现对网页元素的操作,就要能够精准地对网页元素进行定位。可以用于定位的常用的 Web 页面元素的属性有:id、name、class name、link text、XPath 和 CSS Selector 等。下面我们重点介绍常用的四种方法。

2.1通过id属性进行定位

如果 Web 页面中的 id 不是动态的,则一个页面的 id 是唯一的。该方法通过查找 Web 页面上的元素 id值来获取元素,但是对于动态分配 Web 元素 id 的情况,这种方法不能使用。

例如:百度首页搜索框的源代码如下:

  <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

不难发现其 id 属性是“kw”,因此可以使用 id 来进行元素定位。driver 表示为创建的一个 webdriver 对象,代码为:

 element = driver.find_element_by_id("kw")

2.2 通过link text属性进行定位

访问网页的时候,我们可以通过超链接的方式链接到下层的网页或者其他网站,通过查找网页的 link text 属性,模拟对链接文本的单击操作就可以实现自动地访问。该定位方法仅适用于文本链接的场景,通过元素标签对应的文本信息来定位元素,相对其他的元素定位方法,适用的场景比较有限。

  例如百度首页上方“新闻”文字的 link text 属性是 “新闻”,可以使用该属性来进行元素定位。

  代码为:

element = driver.find_element_by_link_text("新闻")

 2.3通过XPath属性进行定位

  XPath 是英文 XML Path Language 的简称,即 XML 文档路径的定位语言。XPath 基于 XML 的树状结构进行信息的查找,它使用路径表达式定位 XML 文档中的节点或节点集。通过记录由根节点到该节点经过的所有节点的 tagName 等信息,可以形成唯一一条到达该节点的路径表达式。Selenium可以将这种强大的语言应用在 Web 页面元素的定位中,定位的方式通常有绝对路径和相对路径两种。具体如下:

  (1)绝对路径

  绝对路径表达式以“/”开头,它从树形结构的根节点开始,沿着树结构一直到目标节点结束。当元素层级很深的时候,绝对路径表达式会过长,阅读性不好,既影响查找的效率又很难进行维护,因此一般不建议使用。

  (2)相对路径

  相对路径表达式以“//”开头,它从某个节点开始,沿着树结构一直到目标节点结束。目前常用的浏览器谷歌、火狐等都提供了 XPath 的工具,可以方便地获取XPath 路径。例如百度搜索框的 XPath 属性可以通过定位到该元素,在该元素的 HTML 代码使用快捷菜单“Copy-> Copy XPath”获得 ,其属值为“//*[@id="kw"]”。“//”表示当前页面某个目录下;“*”是通配符,表示匹配任意的节点;“[@id="kw"]”表示匹配的这个元素的 id 属性值等于 kw。

  2.4通过CSS属性进行定位

  层叠样式表 CSS 是英文 Cascading Style Sheets 的简称,是一种用来表现 HTML 或 XML 等文件样式的计算机语言,它也可以通过浏览器工具查询相关元素的CSS,从而进行元素定位。例如百度搜索框的 CSS 属性可以通过定位到该元素,在该元素的 HTML 代码使用快捷菜单“Copy -> Copy selector”获得,其属性值为#kw。代码可以写成:

 element = driver.find_element_by_css_selector("#kw")

 3 获取和处理用户操作

  Selenium 库中有一个 WebDriver 的 API,它能使用 Chrome、Firefox、IE 等浏览器进行 Web 测试,模拟用户打开浏览器,在页面单击鼠标,鼠标在某个元素上悬停,进行键盘各项操作等。Selenium 测试通过模拟用户在前端的键盘鼠标等操作,触发前端页面事件,解析网页文档获取相应结果验证。

  3.1鼠标事件

  鼠标操作除了我们比较熟悉的单击操作外,还包括右击、双击、悬停和拖动等。在 WebDriver 中,将这些关于鼠标操作的方法封装在 ActionChains 类提供。例如,鼠标悬停的代码为:

  # 引入ActionChains 类from selenium.webdriver.common.action_chains import Action?Chains# 定位元素并悬停above=driver.find_element_by_link_text("文库")ActionChains(driver).move_to_element(above).perform()

  3.2键盘操作

  所有键盘中操作的方法由 Keys 类提供,它既可以模拟键盘的输入,也可以模拟键盘按键,包括组合键(例如 Ctrl+N)。模拟百度搜索框中输入搜索关键字

  “Python”的代码为:

# 引入 Keys 类from selenium.webdriver.common.keys import Keys# 模拟输入框输入内容driver.find_element_by_id("kw").send_keys("Python")

 3.3元素等待

  由于自动化测试的操作速度比人工快许多,加上目前网页中普遍使用 AJAX 技术,页面元素可能不是同时被加载,就需要设置合适的等待时间,确保元素正确地被识别。WebDriver 中有两种类型的等待:显式等待和隐式等待。

  3.4多窗口切换

  如果在操作过程中单击某个链接弹出新窗口后,就需要使用 switch_to.window()方法进行切换,从而确保后续的相关操作能顺利进行。

  3.5警告框处理

  WebDriver 还可以处理由 JavaScript 生成的弹框,方法是使用 switch_to_alert()定位到警告框,然后使用相关方法来进行操作,使用的方法包括:

  ●text:返回警告框中的文字信息

  ●accept:接受当前警告框

  ●dismiss:解散当前警告框

  ●send_keys(KeysToSend):发送文本至当前警 告框

  4 自动化测试的实践

  自动化测试的过程大致可以分为:分析测试需求、 编写测试用例、搭建测试环境、创建测试脚本、执行测试及测试结果分析等。

  4.1 分析测试需求

  不论是手工测试还是自动化测试,测试需求都是测试工作开展的首要前提,根据需求确定被测软件的哪些模块适合开展自动化功能测试。

  4.2 编写测试用例

  自动化测试是在手工测试的基础上进行的,分析各模块的功能特点,根据已有的功能测试用例抽取自动化测试用例,并进行补充和完善,尽量细化到具体的页面和对象。

  4.3搭建测试环境

  搭建自动化测试环境首先要下载并安装 Python, 并且安装包管理工具 pip;接着需要下载并安装 Python的 Selenium 包,并且验证安装是否成功;最后需要下载浏览器的驱动,并放置在 Python 安装目录的根目录下。需要特别注意的是:浏览器、Selenium 版本以及浏览器驱动的匹配,否则浏览器将无法正常启动。下面在 Python 自带的 IDLE 环境中,以启动谷歌浏览器为例来验证环境是否搭建成功。代码如下:

  from selenium import webdriver #导入 webdriver 模块driver = webdriver.Chrome()driver.get("https://www.baidu.com")

执行程序后,如果可以自动启动谷歌浏览器并访 问“百度”首页,就表示环境搭建成功

  4.4创建测试脚本

  对于较大的系统测试,可以通过对 Selenium 进行二次封装搭建测试框架,提高对页面元素的可视化程度,从而提高测试脚本的编写效率。测试框架应该是由待测系统功能抽离出的共用部分来构建而成的,不能依赖于具体的应用系统,即测试框架与待测系统尽量是低耦合的,这样可以使测试框架具有较高的可复用性。为了减少脚本的冗余,降低脚本的维护成本,可以将测试程序中一致的、共同的脚本提取出来,作为类和接口供其他脚本进行调用。

  自动化测试脚本主要围绕业务流程展开,即由页面元素、业务逻辑、测试数据等组成,测试数据既可以存放在 Excel 表中,也可以存放在 MySQL 等数据库中。下面以某论坛系统的注册功能为例,代码如下:

from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://172.21.1.7:8081/bbs/")driver.find_element_by_link_text("register").click(); #跳转至 注册页面time.sleep(2)#停顿 2 秒driver.find_element_by_name("userName").send_keys("wull")#输入用户名driver.find_element_by_name("password").send_keys ("wull123")#输入密码driver.find_element_by_name("passconfirm").send_keys("wull123")#输入确认密码driver.find_element_by_xpath("//select[@name='sex']").send_keys("female")#输入性别#输入电话driver.find_element_by_xpath("//input[@name='phone']").send_keys("13812345678")#输入电邮driver.find_element_by_xpath("//input[@name='email']").send_keys("12345678@qq.com")driver.find_element_by_id("submit").click()#提交注册信息driver.switch_to_alert().accept()

 4.5 执行测试及测试结果分析

  测试脚本是以.py 为后缀的文件,如果需要执行之后生成测试报告,需要安装并调用 Unittest 的第三方库HTMLTestRunner,运行代码后生成的测试报告是 HT?ML 格式的,可以根据测试报告对测试的结果进行分析。

  5 结语

  基于 Selenium+Python 的自动化测试应用可以减少人工多次的验证活动,降低测试的成本,从而较大幅度地提高软件测试的效率,保证软件产品的质量。后期可以进一步优化自动化测试框架,提高控件可视化识别的效率,加快元素定位的效率,并且加强测试用例的管理。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

📌 博客主页: 程序员念姐
📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识!
📌 如果你也想学习软件测试,文末卡片有我的交流群632880530,加入我们,一起交流和学习!

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

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

相关文章

教育行业的文件管理方法和实践

信息化浪潮的冲击下&#xff0c;教育行业也正在向建设数据化平台发展。在文件管理方面&#xff0c;教育行业依旧存在文件交互与协作方式传统陈旧的问题。Zoho Workdrive为教育行业提供安全的文件集中存储管理空间&#xff0c;用户可以快速使用、共享文件&#xff0c;帮助教育行…

内容动态展示抽屉组件

知识点 mousemove与mouseenter的区别在于mousemove会触发事件冒泡&#xff0c;mouseenter不会&#xff0c;mouseleave同理。 mousemove会触发事件冒泡&#xff0c;因此鼠标在范围区域内移动时会一直触发。 mouseenter只触发一次&#xff0c;鼠标移入后触发&#xff0c;鼠标移…

绘制曲线python

文章目录 import matplotlib.pyplot as plt# 提供的数据 x= [1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,6,6.1,6.2…

AI时代,这些绘画软件让你简单上手绘画

即时灵感 即时设计是一款基于云端的矢量编辑工具&#xff0c;可以帮助用户创建网页和移动应用程序原型、界面和可视化设计等。除此之外&#xff0c;即时设计还具备协同。实时预览、团队管理等多种功能&#xff0c;可以实现多个用户同时设计一个项目。 AI 绘画工具和即时设计虽…

日撸java三百行day81-83

文章目录 说明CNN卷积神经网络1. 什么是CNN&#xff08;CNN基础知识&#xff09;1. 基本概念2.输入层3.卷积层3.1 图像3.2 卷积核3.3 偏置数3.4 滑动窗口步长3.5 特征图个数&#xff08;特征图通道数或深度&#xff09;3.6 边缘填充3.7 卷积过程例子 4. 激活函数5. 池化层6.全连…

打破界限,图文档与物料清单完美互联

在现代企业的产品开发过程中&#xff0c;图文档和物料清单是不可或缺的重要信息。然而&#xff0c;由于数据来源多样、格式繁杂&#xff0c;图文档与物料清单之间的信息传递往往存在障碍。而PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;的…

MySQL插入数据的方法

插入数据方法&#xff1a; 1.insert into 表 values(value1, value2, value3....) 2.insert into 表 (字段1&#xff0c; 字段3&#xff0c; 字段5) values(value1, value2, value3) 3.insert into 表 [(字段1&#xff0c; 字段2&#xff0c; 字段3....)] values(value1, val…

41.利用matlab 平衡方程用于图像(matlab程序)

1.简述 白平衡 白平衡的英文为White Balance&#xff0c;其基本概念是“不管在任何光源下&#xff0c;都能将白色物体还原为白色”&#xff0c;对在特定光源下拍摄时出现的偏色现象&#xff0c;通过加强对应的补色来进行补偿。 所谓的白平衡是通过对白色被摄物的颜色还原&…

C++经典排序算法详解

目录 一、选择排序 二、冒泡排序 三、插入排序 一、选择排序 选择排序 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理是&#xff1a;第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存…

Linux命令200例:join将两个文件按照指定的键连接起来分析

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

十二、ESP32控制步进电机

1. 运行效果 2. 步进电机 最大特点:能够控制旋转一定的角度 3. 步进电机原理

P1433 吃奶酪(状态压缩dp)(内附封面)

吃奶酪 题目描述 房间里放着 n n n 块奶酪。一只小老鼠要把它们都吃掉&#xff0c;问至少要跑多少距离&#xff1f;老鼠一开始在 ( 0 , 0 ) (0,0) (0,0) 点处。 输入格式 第一行有一个整数&#xff0c;表示奶酪的数量 n n n。 第 2 2 2 到第 ( n 1 ) (n 1) (n1) 行…

研发工程师玩转Kubernetes——emptyDir

kubernets可以通过emptyDir实现在同一Pod的不同容器间共享文件系统。 正如它的名字&#xff0c;当Pod被创建时&#xff0c;emptyDir卷会被创建&#xff0c;这个时候它是一个空的文件夹&#xff1b;当Pod被删除时&#xff0c;emptyDir卷也会被永久删除。 同一Pod上不同容器之间…

报错Error: error:0308010C:digital envelope routines::unsupported

Error: error:0308010C:digital envelope routines::unsupported 解决&#xff1a; 在原有脚本前加&#xff1a; SET NODE_OPTIONS--openssl-legacy-provider && 原来&#xff1a; 加后&#xff1a;

常规VUE项目优化实践,跟着做就对了!

总结&#xff1a; 主要优化方式&#xff1a; imagemin优化打包大小&#xff08;96M->50M&#xff09;&#xff0c;但是以打包速度为代价&#xff0c;通过在构建过程中压缩图片来实现&#xff0c;可根据需求开启。字体压缩&#xff1a;目前项目内引用为思源字体&#xff0c…

Latex安装与环境配置(TeXlive、TeXstudio与VS code的安装)编译器+编辑器与学习应用

TeXlive 配置Tex排版系统需要安装编译器+编辑器。TeX 的源代码是后缀为 .tex 的纯文本文件。使用任意纯文本编辑器,都可以修改 .tex 文件:包括 Windows 自带的记事本程序,也包括专为 TeX 设计的编辑器(TeXworks, TeXmaker, TeXstudio, WinEdt 等),还包括一些通用的文本编…

对于git功能的探索与研究

读前提示 注意&#xff1a; 本文只是面向初学者或者之前并未接触过git而想学习如何初步使用git的读者&#xff0c;如果您很擅长使用git&#xff0c;并善于维护远程仓库&#xff0c;那么不建议您看此篇文章&#xff0c;这会浪费您的时间。 当然&#xff0c;这篇文章还是能很好地…

配置页面的路由

1.下载router npm i router 2.注册路由 文件路径 &#xff1a;src/router/index.js import Vue from "vue"; import VueRouter from "vue-router"; Vue.use(VueRouter); import Home from "../components/home.vue"; import Main from …

摄像机终端IP地址白名单配置流程

海康摄像头配置白名单流程 1.登录海康摄像机前端 2.进入配置-系统-安全管理-IP地址过滤 3.IP地址过滤方式选择“允许” 4.点击添加按钮输入对应的IP地址或者IP网段 5.最后勾选启用IP地址过滤&#xff0c;然后保存 大华摄像头配置白名单流程 1.登录大华摄像机前端 2.进入设…

openGauss学习笔记-33 openGauss 高级数据管理-视图

文章目录 openGauss学习笔记-33 openGauss 高级数据管理-视图33.1 语法格式33.2 参数说明33.3 示例 openGauss学习笔记-33 openGauss 高级数据管理-视图 视图与基本表不同&#xff0c;是一个虚拟的表。数据库中仅存放视图的定义&#xff0c;而不存放视图对应的数据&#xff0c…