【自动化测试】基于Selenium + Python的web自动化框架

一、什么是?

该工具是呈基于浏览器的自动化性质的, 她所供应的是一种跨越平台、跨越浏览器的, 从一端到另一端的 web 自动化解决方面的方案。其主要涵盖三部分, 分别为: IDE, 还有 Grid:

这儿有个扩展, 它属于IDE, 它具备录制回放功能, 它还可以将录制的操作, 以多种语言比如java等的形式, 导出成为测试用例。

其二, 提供用于Web自动化的API, 其主要作用在于浏览器控制, 在于页面元素选择, 还在于调试。不同的浏览器所需的是不同的。

3、Grid, 它具备一种能力, 这种能力是在不同机器之上, 运行测试, 而且是在不同浏览器上进行运行测试的能力。

本文使用结合 库进行自动化测试框架的搭建。

二、自动化测试框架

典型的一个自动化测试框架, 通常涵盖用例管理模块, 并有自动化执行控制器, 还包含报表生成模块以及 log 模块, 这些模块相互辅助、补充。

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

1、用例管理模块

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

2、自动化控制器

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

3、报表生成模块

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

4、log模块

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

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

1、需求分析

首先, 我们测试的对象是是一个 web 平台, 以这个平台为基础来设计的框架, 要涵盖测试用例管理这一方面, 要囊括测试执行控制器这一方面, 要包含测试报告这一方面, 还要有测试日志的生成这一方面。

2、设计和实现

复制代码
   1)页面管理

假定测试 web 对象属于一个典型的单页面应用, 故而我们选用页面模式, 页面模式。

是那页面跟测试用例之间起连接作用的纽带, 它把每个页面进行抽象, 使其成为一个单独的类, 为测试用例供给页面元素的定位以及操作。

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

从页面进行查看, 所要操作的元素分别是, 登录时使用的用户名, 登录时使用的密码,下次登录能够自动进行登录的设置, 以及用于触发登录动作的按钮。具体实现代码如下:

页面父类.py

传承而来的, 是针对登录所展开的元素定位以及操作的达成。在代码里, 对相关元素做了定位, 还增添了设置用户名还有密码的操作行为。

复制代码
2)公共库模块

创建测试用例所服务的模块为公共库模块, 其主要涵盖了常量, 还有公共函数, 以及日志, 再者是报告等。

.py

测试用例会被测试用例信息类予以标明, 而且其中涵盖执行用例, 还有执行结果里面的信息, 主要是包含以下这些字段。

测试用例所执行的步骤以及所产生的错误信息, 主要会被记录在日志当中, 不同的那些信息, 有着不一样的日志级别, 举例来说, 存在, , 跟Debug。鉴于每个测试用例产出的日志条目数量比较少, 因此于测试框架里, 仅仅运用了最高级别的日志打印, 也就是Debug级别, 此级别同样会把其他所有日志级别的信息给打印出来。在具体的实现过程中, 引用了标准库之内的类库, 目的是能够更为便捷地控制日志输出。

复制代码
   3)测试用例仓库

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

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

Setup中定义了执行测试用例前的一些实例化工作

对执行完测试做了清理和写日志文件工作

测试步骤明确, 测试数据清楚, 测试检查点明晰, 易于修改, 像用户名密码这类内容便是如此。

日志级别仅有Debug,所以写日志仅需用同一Log方法

3)用例执行模块

执行模块主要用于控制测试用例脚本大批量依次执行事宜, 进而形成一个测试集合。用例的执行在此过程中引用了标准库当中的用于执行的shell命令, 借此得以执行给定具体测试用例汇聚集合里边的用例。测试用例集合是一个构造简易的单纯文本格式文件, 在实现整个过程期间运用利用了.txt文件.txt。

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

四、需要改进的模块

就现正实现着的测试框架而言, 已然能够达成 Web 对象的自动化需求, 然而, 依旧存在着一些能够予以改进提升的方面, 诸如:

1)部分用例可以尝试数据驱动

2)二次封装的By函数,以便更高效定位元素

3)没有进行持续化集成

五、总结

由实现产生的 web 自动化框架, 不但具备轻量级的特性, 而且拥有灵活性, 能够促使自动化测试用例得以快速开发, 将本篇的框架设计与部分优良实践予以结合, 有望为大家后续有关 web 自动化框架的设计以及实现带来助力。

最终感激每一位仔细阅读我所撰写文章之人, 礼尚往来向来是需存在的, 虽说并非是极具价值之物, 要是你能够用得上的话可以径直拿去:

对那些从事【软件测试】工作的朋友而言, 这些资料被当成最全面且最完整的备用仓库, 这个仓库陪伴了上万个测试工程师走过最为艰难的那段路程, 期望它也能够对你有所帮助!

相关推荐
2601_962077531 小时前
Python 条件表达式
python·语法·列表推导式·条件表达式·pep308
右耳朵猫AI1 小时前
Python周刊2026W36 | Python 3.15候选版、RISC-V获CPython支持、PEP 843、asyncio修复
python·sqlite·risc-v
liliangcsdn2 小时前
基于信号强度的稀疏选股算法的探索分析
开发语言·python
小白快快跑哦2 小时前
python-字符串全解(四):字符串方法
开发语言·python·字符串
用户298698530142 小时前
Python 实现文本文件与 Word 文档互转的两种方法
后端·python·api
Zane19942 小时前
明明在赋值前读取,为什么还会报 UnboundLocalError?global 与 nonlocal 深挖
后端·python
小毛驴8502 小时前
Jupyter Notebook 安装步骤
ide·python·jupyter
BUG研究员_2 小时前
LangGraph节点缓存-CachePolicy
python·缓存·langraph