Python+Selenium基于PO模式的Web自动化测试框架

news2025/1/11 14:20:17

🍅 视频学习:文末有免费的配套视频可观看

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、什么是Selenium?

Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。

  • Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并把录制的操作以多种语言(例如java、python等)的形式导出成测试用例。
  • Selenium WebDriver:提供Web自动化所需的API,主要用作浏览器控制、页面元素选择和调试。不同的浏览器需要不同的WebDriver。
  • Selenium Grid:提供了在不同机器的不同浏览器上运行selenium测试的能力。

本文将详细介绍如何运用Python结合Selenium WebDriver库搭建web自动化测试框架。【点击文末小卡片免费领取测试资源】

二、自动化测试框架

典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和log模块,这些模块相辅相成。

接下来介绍各模块的逻辑单元:

1、用例管理模块

用例管理模块包括新增、修改、删除等操作单元,这些单元又会涉及到用例书写模式,测试数据库的管理、可复用库等。

2、自动化控制器

控制器是自动化用例执行的组织模块,主要是负责以什么方法执行我们的测试用例.

3、报表生成模块

主要负责执行用例后的生成报告,一般以HTML格式居多,信息主要是用例执行情况。另外还可以配置发送邮件功能。

4、log模块

主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。

三、自动化框架的设计和实现

1、需求分析

首先我们的测试对象是一个web平台,基于此平台设计的框架要包含测试用例管理、测试执行控制器、测试报告以及测试日志的生成。

2、设计和实现

页面管理

假设测试web对象为一个典型单页面应用,所以我们采用页面模式。页面模式是页面与测试用例之间的纽带,它将每个页面抽象成一个单独的类,为测试用例提供页面元素的定位和操作。

BaseClass作为父类只包含driver成员变量,用来标识Selenium中的WebDriver,以便在子类中定位页面元素。LoginClass和PageClass作为子类,可以提供页面元素的定位和操作方法。比如登录页面。

从页面看,需要操作的元素分别为:登录用户名、密码、下次自动登录和登录按钮。具体实现代码如下:

页面父类BaseClass.py

LoginClass继承自BaseClass,并进行登录的元素定位以及操作实现。代码中定位了username和password,并添加了设置用户名和密码的操作。

公共库模块

公共库模块是为创建测试用例服务的,主要包括常量、公共函数、日志、报告等。

Common.py

测试用例信息类用来标识测试用例,并且包括执行用例、执行结果信息,主要包括以下字段。

日志主要用来记录测试用例执行步骤及产生的错误信息,不同的信息有不同的日志级别,比如Information、Warning、Critical和Debug。由于每个测试用例产生的日志条目比较少,所以在测试框架中只利用了最高级别的日志打印,即Debug级别,该级别也会将其他所有的日志级别的信息同样打印出来。在具体的实现中引用了Python标准库中的logging类库,以便更方便的控制日志输出。

测试用例仓库

用例仓库主要用来组织自动化测试用例。每条测试用例都被抽象成一个独立的类,并且均继承自unittest.TestCase类。 Python中的unittest库提供了丰富的测试框架支持,包括测试用例的setUp和tearDown方法,在实现用例的过程中可以重写。依托页面管理和公共库模块实现的页面方法和公共函数,每一个测试用例脚本的书写都会非常清晰简洁。

从这个测试用例中,我们可以看到

  • Setup中定义了执行测试用例前的一些实例化工作
  • tearDown对执行完测试做了清理和写日志文件工作
  • 测试步骤、测试数据和测试检查点非常清晰,易修改(比如用户名密码)
  • 日志级别仅有Debug,所以写日志仅需用同一Log方法

3、用例执行模块

执行模块主要用来控制测试用例脚本的批量执行,形成一个测试集。用例的执行引用了Python标准库中的subprocess来执行nosetests的shell命令,从而执行给定测试用例集中的用例。测试用例集是一个简单的纯文本文件,实现过程中利用了.txt文件testcases.txt。

用例前没有“#“标记的测试用例脚本会被执行,而有”#“标记的则会被忽略,这样可以很方便的控制测试集的执行,当然也可以创建不同的文件来执行不同的测试集。

四、需要改进的模块

对于现有实现的测试框架,已经可以满足web对象的自动化需求,但还是有些可以改进提高的地方,比如:

  • 部分用例可以尝试数据驱动。
  • 二次封装selenium的By函数,以便更高效定位元素。
  • 没有进行持续化集成。

五、总结

基于Selenium实现的web自动化测试框架不仅轻量级而且灵活,可以快速地开发自动化测试用例,结合本篇的框架设计和一些好的实践,希望对大家以后的web自动化框架的设计和实现有所帮助。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看。

2024花15天学完自动化测试全套教程,简单易上手,允许白嫖,拿走不谢!

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

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

相关文章

ElasticSearch:查询操作合集

先看下我的数据: 1、查询所有文档: GET /cartest/_search或者 GET /cartest/_search {"query": {"match_all": {}} }2、匹配查询: match匹配类型查询,会把查询条件进行分词,然后进行查询&…

B02、JVM调优案例

1、调优的基本问题 1.1、为什么要调优? 目的是防止出现OOM,进行JVM规划和预调优;解决程序运行中各种OOM;以及减少Full GC出现的频率,解决运行慢、卡顿问题。 1.2、调优的大方向 合理的编写代码,充分并合理…

easyx 按键信息

前言 看看代码吧 ExMessage msg { 0 }; bool button(int x, int y, int w, int h, const char* text) {//绘制按钮setfillcolor(RGB(230, 231, 232));fillroundrect(x, y, x w, y h, 5, 5);if ((msg.x > x && msg.x<x w && msg.y>y && …

AcWing 1264. 动态求连续区间和 ,详细讲解线段树与树状数组(Python,篇一)

本篇博客主要介绍一下什么是线段树与树状数组&#xff0c;它们的原理与结构是怎样&#xff0c;并通过实际题型来讲解&#xff0c;篇一主要讲解线段树&#xff0c;下一篇博客讲解树状数组。 线段树与树状数组的区别和特点&#xff1a; 它们的时间复杂度都是O(nlogn) 存储方式…

ets Jan 8 2013,rst cause:1, boot mode:(3,6)解决esp8266不断崩溃重启!

1.RAM使用不要超过50% 2.usb直接插在电脑上&#xff0c;不要插在usb扩展坞上&#xff0c;防止电流太小造成开发板电量不够而引起的不断重启&#xff08;千万注意这个&#xff01;&#xff09; 3.减少全局变量使用 4.减少不必要的方法定义 5. //调试代码的时候打开 struct rst_i…

Three.js——基础材质、深度材质、法向材质、面材质、朗伯材质、Phong材质、着色器材质、直线和虚线、联合材质

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

C#基础|构造方法相关

哈喽&#xff0c;你好&#xff0c;我是雷工。 以下为C#方法相关的学习笔记。 01 方法的概述 概念&#xff1a;方法表示这个对象能够做什么&#xff0c;也就是封装了这个对象行为。 类型&#xff1a;实例方法—>静态方法&#xff08;抽象方法、虚方法&#xff09;—>特殊…

【JAVA进阶篇教学】第五篇:Java多线程编程

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第五篇&#xff1a;Java多线程编程。 在Java编程中&#xff0c;使用多线程可以提高程序的并发性能&#xff0c;但是直接创建和管理线程可能会导致资源浪费和性能下降。Java提供了线程池来管理线程的生命周期和执行任务…

【蓝桥杯省赛真题40】python摘苹果 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python摘苹果 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python摘苹果 第十三届蓝桥杯青少年组python编程省赛真题 一、题目要求 &…

浅谈数据模型

1&#xff1a;事实表和维表的概述 前言&#xff1a;数据仓库是一种用于存储和管理大量数据的技术。其中&#xff0c;事实表和维表是数据仓库中的两个重要概念&#xff0c;首先了解一下事实表和维度表 1.事实表&#xff1a;是指用于存储测量“事实数据”的表&#xff0c;事实数…

IE浏览器,文件下载失败,onDownloadProgress方法里报错:无法获取未定义或null引用的属性“getResponseheader“

问题背景&#xff1a; 谷歌、火狐、edge都没有问题&#xff0c;ie11浏览器也没有问题&#xff0c;ie10及以下会报错&#xff0c;无法获取未定义或null引用的属性"getResponseheader 查看代码&#xff0c;getResponseHeader这个方法是在获取进度条的时候使用&#xff0c; …

OpenWRT设置自动获取IP,作为二级路由器

前言 上一期咱们讲了在OpenWRT设置PPPoE拨号的教程&#xff0c;在光猫桥接的模式下&#xff0c;OpenWRT如果不设置PPPoE拨号&#xff0c;就无法正常上网。 OpenWRT设置PPPoE拨号教程 但现在很多新装的宽带&#xff0c;宽带师傅为了方便都会把光猫设置为路由模式。如果你再外…

SpringCloud系列(15)--Eureka自我保护

前言&#xff1a;在上一章节中我们说明了一些关于Eureka的服务发现功能&#xff0c;也用这个功能进行接口的实现&#xff0c;在本章节则介绍一些关于Eureka的自我保护 1、Eureka保护模式概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。默认情况…

带你走进不一样的策略模式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 带你走进不一样的策略模式 前言策略模式简介概念解释 策略模式的结构策略模式优点项目实践之bean策略构思业务策略实现策略接口实现策略上下文业务实现 前言 在编程的世界里&#xff0c;每一次按键都…

Golang对接Ldap(保姆级教程:概念搭建实战)

Golang对接Ldap&#xff08;保姆级教程&#xff1a;概念&搭建&实战&#xff09; 最近项目需要对接客户的LDAP服务&#xff0c;于是趁机好好了解了一下。LDAP实际是一个协议&#xff0c;对应的实现&#xff0c;大家可以理解为一个轻量级数据库。用户查询。比如&#xff…

高频前端面试题汇总之Vue篇

1. Vue的基本原理 当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组件实…

【ruoyi-vue】登录解析(后端)

调试登录接口 进入实现类可以有 验证码校验 登录前置校验 用户验证 验证码校验 通过uuid获取redis 中存储的验证码信息&#xff0c;获取后对用户填写的验证码数据进行校验比对 用户验证 1.进入控制器的 /login 方法 2.进入security账号鉴权功能&#xff0c;经过jar内的流…

算法-动态规划专题

文章目录 前言 : 动态规划简述1 . 斐波那契模型1.1 泰波那契数列1.2 最小花费爬楼梯1.3 解码方法 前言 : 动态规划简述 动态规划在当前我们的理解下,其实就是一种变相的递归,我们查看一些资料也可以知道,动态规划其实属于递归的一个分支,通过把递归问题开辟的栈帧通过一定的手…

代码随想录第45天|70. 爬楼梯 (进阶)322. 零钱兑换

70. 爬楼梯 &#xff08;进阶&#xff09; 57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; (kamacoder.com) 代码随想录 (programmercarl.com) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶…

企业数字化转型,“业务”先行

在当今时代&#xff0c;数字化转型已经成为企业发展的必经之路。数字化转型&#xff0c;简而言之&#xff0c;就是运用数字技术&#xff0c;对企业运营管理的各个环节进行深度改造&#xff0c;以提升企业的运营效率和市场竞争力。据有关机构研究测算&#xff0c;数字化转型可使…