Python 的 Web 自动化测试的实践

news2024/11/20 1:38:18

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

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

如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以加裙485187702,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

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

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

8小时传疯!大厂面试真题全被大佬整理在这个小程序上了!【软件测试,建议收藏】

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础 

  全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

smartLink HW-DP新版提供更多扩展功能——用于PROFIBUS和HART系统中物联网集成

Softing工业自动化的smartLink HW-DP网关可独立于控制器访问PROFIBUS DP网络&#xff0c;且新发布的1.30固件版本还提供了更多数据连接和传输的扩展功能。 smartLink HW-DP可无缝集成到PROFIBUS网络中&#xff0c;而不会影响现有设备的运行。该网关还可为新的和现有的PROFIBUS …

非常爆火的流量卡推广上线了

流量卡推广可以通过“聚量推文”申请&#xff0c;一手渠道 现在非常火的推广项目就是流量卡推广了&#xff0c;佣金价格高 普遍的价格是几十上百块&#xff0c;你一天推广10个收入就接近4位数&#xff0c;还是比较可观的 聚量推客专注于app拉新&#xff0c;网推项目&#xff…

博客系统-项目测试

自动化博客项目 用户注册登录验证效验个人博客列表页博客数量不为 0 博客系统主页写博客 我的博客列表页效验 刚发布的博客的标题和时间查看 文章详情页删除文章效验第一篇博客 不是 "自动化测试" 注销退出到登录页面,用户名密码为空 用户注册 Order(1)Parameterized…

MyBatis-Plus使用——配置yml参数 常用的注解@Table,@TableId,@IdType,@TableField,CRUD的API接口

前言 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 本系列博客结合实际应用场景&#xff0c;阐述MyBatis-Plus实际…

Python开发技能实战-通过配置的代理服务器在具有外网连接的环境中在Pycharm中运行python代码

实现功能 打开科学上网工具&#xff0c;使得能够在浏览器科学上网&#xff0c;通过科学上网工具的配置文件&#xff0c;可以看出本地和远程代理的映射关系&#xff0c;此时&#xff0c;远程地址本地地址&#xff0c;远程端口本地端口。 1、在程序中配置请求网页代理请求。不需…

GTS GtsUnofficialApisUsageTestCases Failed

GTS 测试GtsUnofficialApisUsageTestCases失败如下&#xff1a; junit.framework.AssertionFailedError: There are 102 violation(s) com.google.android.gm / Landroid/window/BackEvent;->getProgress()F / BLOCKED / LINKING com.google.android.gm / Landroid/window/…

java参数中的-、--、-X、-XX、-D

详细描述请参考&#xff1a;https://docs.oracle.com/en/java/javase/19/docs/specs/man/java.html Java标准选项&#xff08;以-、或者–开头&#xff09; Java标准选项被所有的Java虚拟机&#xff08;JVM&#xff09;实现所支持。 这些选项用于普通的动作&#xff0c;例如检…

服务器数据恢复-VSAN环境下ESXI虚拟机无法访问的数据恢复方案

一、用户信息&#xff1a; 广东某单位 二、数据恢复环境&#xff1a; 主机操作系统&#xff1a;ESXI 分区类型&#xff1a;VSAN 存储介质清单 &#xff1a;一共8台服务器节点&#xff0c;每节点2个磁盘组&#xff0c;其中1个磁盘组配置1块SSD固态硬盘&#xff0c;4块1.2T机…

【unity3D】Debug方法(如何在console面板中输出红色的错误信息)

&#x1f4a6;本专栏是我关于游戏开发的笔记 &#x1f236;本篇是一个简短的小知识点 Debug方法 介绍常用方法 介绍 Unity中的Debug方法可以用来输出一些调试信息&#xff0c;帮助开发者查找代码中的错误和问题。 常用方法 Debug.Log()&#xff1a;最常用的Debug方法之一&am…

表白墙(服务器)

目录 0.需求 1.创建Maven项目 2.给pom.xml内引入三个依赖 3.完善目录&#xff0c;并补充web.xml中的内容 4.编写代码 后端代码 ​编辑前端代码 5.引入数据库 创建message表 创建工具类 往MessageServlet类中添加方法 0.需求 前面写好了表白墙页面&#xff0c;但存…

视阅口译有何特点,哪里提供视阅口译翻译?

据了解&#xff0c;视阅口译是一种涉及视听和口头表达的翻译方式&#xff0c;它在跨文化交流等领域中起到了非常重要的作用。那么&#xff0c;视阅口译有何特点&#xff0c;哪里提供专业的视阅口译服务&#xff1f; 我们知道&#xff0c;视阅口译就是基于事先准备好的讲稿或文…

“构建高效的Java Web开发环境及前后端分离后台接口部署“

目录 引言一、安装环境&#xff1a;JDK和Tomcat1. 安装JDK下载jdk配置环境变量2. 安装Tomcat 二、安装MySQL三、部署前后端分离后台接口总结 引言 在现代软件开发中&#xff0c;构建高效的开发环境和部署稳定的后台接口是至关重要的。本文将介绍如何安装和配置Java开发环境&am…

一文2000字使用JMeter进行接口测试教程!(建议收藏)

安装 使用JMeter的前提需要安装JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin&#xff0c;双击jmeter.bat启动运行 启动后默认为英文版本&#xff0c;可通过Options – Cho…

【王道代码】【3 栈和队列】

结构体定义&#xff1a; 队列操作&#xff1a;

DevExpress(GridControl基础样式)

1.设置GridControl底部导航器可见 this.gridControl1.UseEmbeddedNavigator true; 2.隐藏嵌入式导航器的追加按钮&#xff0c;所有导航器的操作可以自行查阅API this.gridControl1.EmbeddedNavigator.Buttons.Append.Visible false; 3.去掉第一列前的空白列&#xff0c;去掉…

学历不好,背景不强?想进入互联网行业难道真的没希望?

随着互联网的大环境越来越好&#xff0c;各个企业又有了新一轮的招聘需求&#xff0c;但是大家会发现企业招人要求出奇的一致&#xff1a;学信网可查、本科及以上学历&#xff01;虽然越来越多的人希望能够进入这个行业&#xff0c;但是有些人可能会因为学历不好或者背景不强而…

C++基础算法④——排序算法(快速、归并附完整代码)

快速排序 快速排序是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分记录的关键字小&#xff0c;则可分别对这两部分记录继续进行快速排序&#xff0c;以达到整个序列有序。 假设我们现在对 …

JVM 类加载的过程

JVM 类加载的过程 加载验证准备解析初始化 加载 “加载”&#xff08;Loading&#xff09;阶段是整个“类加载”&#xff08;Class Loading&#xff09;过程中的一个阶段&#xff0c;它和类加载 Class Loading 是不同的&#xff0c;一个是加载 Loading 另一个是类加载 Class L…

重磅消息!优维发布全新产品“应急管理”

近日&#xff0c;蚂蚁集团旗下的在线文档编辑与协同工具语雀平台发生了一次严重的宕机事件&#xff0c;导致用户无法正常使用其各项功能。从故障发生到完全恢复正常&#xff0c;语雀整个宕机时间将近 8 小时&#xff0c;如此长时间的宕机已经达到了 P0 级事故&#xff0c;并在网…