基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

news2024/11/26 0:44:33

目录

一、什么是Selenium?

二、自动化测试框架

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

四、需要改进的模块

五、总结

总结感谢每一个认真阅读我文章的人!!!

重点:配套学习资料和视频教学


一、什么是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自动化测试框架。

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+icon-default.png?t=N176https://www.bilibili.com/video/BV1AF411T7qJ/?p=1&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75                  

二、自动化测试框架

一个典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和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类库,以便更方便的控制日志输出。

          2023最新的Python+Web自动化测试详细教程,你想要的全都有,全套资料免费送icon-default.png?t=N176https://www.bilibili.com/video/BV1JT411e75h/?vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

                 

 

测试用例仓库

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

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

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

3、用例执行模块

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

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

四、需要改进的模块

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

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

五、总结

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

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+icon-default.png?t=N176https://www.bilibili.com/video/BV1AF411T7qJ/?p=1&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75                                             

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

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

相关文章

SpringBoot bean 加载顺序如何查看(源码解读)

背景 SpringBoot bean 加载顺序如何查看,想看加载了哪些bean, 这些bean的加载顺序是什么? 实际加载顺序不受控制,但会有一些大的原则: 1、按照字母顺序加载(同一文件夹下按照字母数序;不同文件…

界面开发(4)--- PyQt5实现打开图像及视频播放功能

PyQt5创建打开图像及播放视频页面 上篇文章主要介绍了如何实现登录界面的账号密码注册及登录功能,还简单介绍了有关数据库的连接方法。这篇文章我们介绍一下如何在设计的页面中打开本地的图像,以及实现视频播放功能。 实现打开图像功能 为了便于记录实…

CobaltStrike攻击payload(有效载荷)介绍

HTA文档Office宏payload生成器有效载荷生成器windows可执行程序windows可执行程序windows stageless生成所有有效载荷HTA文档该模块为HTML Application attack(HTML应用攻击)。简单来说,就是这个包生成一个运行有效负载的HTML应用程序该模块下…

TCP UPD详解

文章目录TCP UDP协议1. 概述2. 端口号 复用 分用3. TCP3.1 TCP首部格式3.2 建立连接-三次握手3.3 释放连接-四次挥手3.4 TCP流量控制3.5 TCP拥塞控制3.6 TCP可靠传输的实现3.7 TCP超时重传4. UDP5.TCP与UDP的区别TCP UDP协议 1. 概述 TCP、UDP协议是TCP/IP体系结构传输层中的…

Flink 定时加载数据源

一、简介 flink 自定义实时数据源使用流处理比较简单,比如 Kafka、MQ 等,如果使用 MySQL、redis 批处理也比较简单 如果需要定时加载数据作为 flink 数据源使用流处理,比如定时从 mysql 或者 redis 获取一批数据,传入 flink 做处…

三、HTTP协议之三

文章目录一、HTTPS协议概述二、 HTTPS使用成本三、从HTTP到HTTPS四、HTTP协议的瓶颈五、双工通信的websocket六、HTTP2.0一、HTTPS协议概述 二、 HTTPS使用成本 HTTPS对性能的影响 https之所有安全是因为使用TLS(SSL)来加密传输. 三、从HTTP到HTTPS 了解个大概 第一步&#x…

react:二、jsx语法规则

目录 1.传输数据的xml和json格式举例 2.jsx语法规则 3.js语句跟js表达式的区别 4.jsx的小练习 1.传输数据的xml和json格式举例 2.jsx语法规则 1.定义虚拟DOM时,不要写引号。 2.标签中混入JS表达式时要用{}。 3.样式的类名指定不要用class,要用cla…

第十一章 寡头垄断市场中的企业决策

寡头垄断市场的定义、条件 寡头垄断市场:少数几家企业控制了某一行业的市场,供给该行业生产的大部分产品 寡头垄断市场应具备的条件: 一个行业或市场中,只有少数几家企业企业之间存在着相互制约、相互依存的关系新企业进入行业比…

golang大杀器GMP模型

golang 大杀器——GMP模型 文章目录golang 大杀器——GMP模型1. 发展过程2. GMP模型设计思想2.1 GMP模型2.2 调度器的设计策略2.2.1 复用线程2.2.2 利用并行2.2.3 抢占策略2.2.4 全局G队列2.3 go func()经历了那些过程2.4 调度器的生命周期2.5 可视化的CMP编程2.5.1 trace方式2…

【LeetCode】33. 搜索旋转排序数组、1290. 二进制链表转整数

作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 33. 搜索旋转排序数组 1290. 二进制链表转整数 33. 搜索旋转排序数组 33. 搜索旋转排序…

JavaEE简单示例——Bean的实例化

简单介绍: 在我们之前使用某个对象,那么就要创建这个类的对象,创建对象的过程就叫做实例化。对于Spring来说,实例化Bean的方式有三种,分别是构造方法实例化,静态方法实例化,实例工厂实例化。我…

哪款手推式洗地机好用?2023洗地机推荐

虽然现在市面上的洗地机层出不穷,但是无论洗地机怎么变,关于洗地机的选择看准吸力、除菌、续航、清洁力这几点就够了。因此,一款好用的洗地机必须要拥有良好的清洁力和续航时间,最好还拥有除菌等细节功能。那么下面就让我们一起来…

【Linux】文件系统详解

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享C/C相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…

Unity脚本复习

1.在Project面板中显示和创建的每一个脚本其实都是一个类,当我们把脚本挂载到Hierarchy层级中的游戏物体时,其实我们就实现了将脚本类实例化为一个脚本组件(对象)的过程 2.在游戏运行时,场景加载,游戏对象…

云边端协同时序数据库的挑战与解决方案

现今,时序数据库在经济金融、环境监控、医疗生物等多个领域有着极为广泛的需求。其中,在环境监控等领域,时序数据库主要部署在云边端架构中。但如何实现云边端协同是目前TSDB所面临的巨大挑战。由于云、边和端的计算、存储资源状况和对数据管…

【LeetCode】剑指 Offer(21)

目录 题目:剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 40. 最小的k个数 -…

论文阅读和分析:A Tree-Structured Decoder for Image-to-Markup Generation

目录1.主要内容:2.树解码器3、损失函数4、结论:参考:1.主要内容: (1、提出创新的树结构解码器来表示树、输出树、优化基于注意力的编解码框架; (2、设计一个问题说明特别是在复杂结构时字符解…

AidLux AI 应用案例悬赏征集活动正式启动!

ChatGPT爆火之后,AI领域的人才需求迎来了疯狂增长,AI学习也一跃成为业界大热门。 但AI囊括知识广、学习周期长,要克服理论、实战等多重阻碍并不容易。 而持续降低AI学习门槛是我们一直在做的事情。 为此,我们举办了多期AidLux …

R语言基础(五):流程控制语句

R语言基础(一):注释、变量 R语言基础(二):常用函数 R语言基础(三):运算 R语言基础(四):数据类型 6.流程控制语句 和大多数编程语言一样,R语言支持选择结构和循环结构。 6.1 选择语句 选择语句是当条件满足的时候才执行…

【麒麟服务器操作系统忘记开机密码怎么办?---银河麒麟服务器操作系统更改用户密码】

银河麒麟服务器操作系统更改用户密码 1.启动主机进入 grub 菜单,如图 1.1 以最新版本 Kylin-Server-10-SP2-x86-Release-Build09-20210524 为例。 图 1.1 grub 菜单 2 编辑 kernel 2.1按下”e”输入,输入用户名和密码(root/Kylin123123&…