基于Selenium+Python的web自动化测试框架详解

一、什么是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自动化框架的设计和实现有所帮助。

【软件测试行业现状】2023年干测试,约等于49年入国军。未来已寄..测试人该何去何从?【自动化测试、软件测试面试、性能测试】

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【爬虫系统设计系列】模板爬虫的动态配置策略设计与实现

文章目录 1. 写在前面2. 页面配置规划3. 制定模板格式4. 模板引擎实现5. 模板爬虫优势 1. 写在前面 作为一名爬虫开发者来说,涉及数据采集和爬虫开发时,往往都面临着各种挑战。包括技术复杂性、维护成本以及数据源结构的不断变化 早期我们对爬虫开发方式…

虚拟机风格>解释器风格

1.解释器风格 解释器作为一种体系结构,主要用于构建虚拟机,以弥合程序语义和计算机硬件之间的间隙。在解释器结构中,主要包括一个执行引擎和三个存储器。它的实质是利用软件创建的一种虚拟机,因此,解释器风格又被称为…

OS 死锁

资源问题 引起死锁的主要是需要采用互斥访问方法的、不可被抢占的资源 可重用资源和可消耗资源 可重用资源 定义:一种可供用户重复使用多次的资源 性质: 每个可重用资源中的单元,只能分配给一个进程使用,不允许多个进程共享…

iOS的应用生命周期以及应用界面

在iOS的原生开发中,我们需要特别关注两个东西:AppDelegate和ViewController。我们主要的编码工作就是在AppDelegate和ViewControlle这两个类中进行的。它们的类图如下图所示: AppDelegate是应用程序委托对象,它继承了UIResponder类…

分布式:一文吃透分布式事务和seata事务

目录 一、事务基础概念二、分布式事务概念什么是分布式事务分布式事务场景CAP定理CAP理论理解CAPCAP的应用 BASE定理强一致性和最终一致性BASE理论 分布式事务分类刚性事务柔性事务 三、分布式事务解决方案方案汇总XA规范方案1:2PC第一阶段:准备阶段第二…

【C++的OpenCV】第十四课-OpenCV基础强化(三):单通道Mat元素的访问之data和step属性

🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…

Python Django 之全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置:settings.py2.1 注册 APP:INSTALLED_APPS2.2 模板路径:TEMPLATES2.3 静态文件:STATICFILES_DIRS2.4 数据库:DATABASES2.5 允许访问的主机:ALLOWED_HOSTS 1 …

【Linux】进程的概念

文章目录 1. 基本概念2. 进程的描述3. 进程的一些基本操作3.1 查看进程3.2 结束进程3.3 通过系统调用获取进程标示符3.4 通过系统调用来创建子进程 4. 进程状态4.1 操作系统的进程状态4.2 Linux对于这些状态的处理方式 1. 基本概念 什么是进程? 在回答这个问题之前…

C++标准模板(STL)- 类型支持 (复合类型类别,is_member_pointer,is_reference,is_compound)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

kafka为什么如此之快?

天下武功&#xff0c;唯快不破。同样的&#xff0c;kafka在消息队列领域&#xff0c;也是非常快的&#xff0c;这里的块指的是kafka在单位时间搬运的数据量大小&#xff0c;也就是吞吐量&#xff0c;下图是搬运网上的一个性能测试结果&#xff0c;在同步发送场景下&#xff0c;…

详解:WMS系统IQC来料检验

WMS系统IQC来料检验是仓库管理系统(WMS)中的一个重要环节,它的目的是对进仓原材料进行抽样检验,以确保入库的原材料符合质量标准。WMS系统通过对仓库的收货、存储、配送、装车和信息管理等过程实现集中化、规范化、标准化、自动化的管理。IQC即进货质量抽查。 IQC来料检验的目的…

Mybatis学习

一、 1.第一个mybatis程序 层层递进&#xff0c;SqlSession用来执行sql语句&#xff0c;SqlSession是与数据库的一次会话。 通过SqlSessionFactory获取SqlSession 通过SqlSessionBuilder的build()方法获取SessionFactory 2.第一个程序就找了30分钟的错&#xff08;悲惨&…

【Redis】redis的过期策略如何实现有关定时器的补充

文章目录 redis的过期策略如何实现关于定时器的补充基于优先级队列/堆实现的定时器基于时间轮实现的定时器 redis的过期策略如何实现 注意&#xff1a;不能直接遍历所有的key来判断当前key是否过期&#xff0c;这样子效率非常低&#xff0c;redis整体策略是&#xff1a;定期删…

Java中String的split函数的详解及应用

文章目录 一、 split函数详解二、应用 一、 split函数详解 split(String regex)为java.lang.String类的方法&#xff0c;其功能通俗的说就是以传入的分隔符参数拆分该字符串 方法具体为&#xff1a; public String[] split(String regex) {return split(regex, 0); }方法内部…

4.2 SSAO算法 屏幕空间环境光遮蔽

一、SSAO介绍 AO 环境光遮蔽&#xff0c;全程Ambient Occlustion&#xff0c;是计算机图形学中的一种着色和渲染技术&#xff0c;模拟光线到达物体能力的粗略的全局方法&#xff0c;描述光线到达物体表面的能力。 SSAO 屏幕空间环境光遮蔽&#xff0c;全程 Screen Space Amb…

MySQL与MongoDB,该如何做技术选型?

hello&#xff0c;大家好&#xff0c;我是张张&#xff0c;「架构精进之路」公号作者。 引言 一般情况下&#xff0c;会考虑到MySQL与MongoDB如何做技术选型的时候&#xff0c;你一定是遇到了类似于非结构化数据JSON的存取难题&#xff0c;否则大家都直接MySQL开始搞起了。 为什…

matlab simulink PMSM_SVPWM PI转速控制

1、内容简介 略 8-可以交流、咨询、答疑 2、内容说明 略PMSM_SVPWM PI转速控制 PMSM SVPWM PI转速控制 3、仿真分析 4、参考论文 略

电脑办公最佳拍档 夸克网盘升级低耗能备份、PDF阅读器等功能

临近年终&#xff0c;上班族不仅要总结过去一年的成绩还要开始制定新规划&#xff0c;在这个过程中整理资料是必不可少的环节。对于经常需要使用文件备份和PDF的用户&#xff0c;推荐大家试一下夸克网盘电脑端&#xff0c;升级后的“低耗能备份”和“PDF阅读器”让备份体验更丝…

面试150题做题记录

面试150题做题记录 题目1: 合并两个有序数组 题目1: 合并两个有序数组 题目&#xff1a;https://leetcode.cn/problems/merge-sorted-array/?envTypestudy-plan-v2&envIdtop-interview-150 最优思路&#xff1a;利用原有数列的单调性质&#xff0c;从右往左遍历&#xff…

MySQL启动后反复重新启动故障

MySQL版本为5.6.45 系统为Ubuntu 20.04 LTS 该服务器重启后&#xff0c;MySQL需要手动执行启动。 运行执行脚本后发现异常&#xff0c;如下图&#xff1a; 提示MySQL服务在不停重复启动。 反复使用ps -ef |grep mysql命令查看&#xff0c;发现mysql进程号一直在变化&#x…