基于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自动化框架的设计和实现有所帮助。
作者:武贯祥
来源:宜信技术学院
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
消灭 Java 代码的“坏味道”
导读 明代王阳明先生在《传习录》谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷,愈探愈深,必使精白无一毫不彻方可。 代码中的"坏味道",如"私欲"如"灰尘",每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些"坏味道",不仅能提高自己的编码水平,也能使代码变得"精白无一毫不彻"。这里,整理了日常工作中的一些"坏味道",及清理方法,供大家参考。 1.让代码性能更高 1.1.需要 Map 的主键和取值时,应该迭代 entrySet() 当循环中只需要 Map 的主键时,迭代 keySet() 是正确的。但是,当需要主键和取值时,迭代 entrySet() 才是更高效的做法,比先迭代 keySet() 后再去 get 取值性能更佳。 反例: Map<String, String> map = .
- 下一篇
11个点让你的Spring Boot启动更快
前言 使用的是 OpenJDK 11。 java --version openjdk 11.0.1 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode) 可以按照下面这样运行基准测试。运行起来可能需要一些时间,下面会执行所有的测试。 ./mvnw clean package (cd benchmarks/; java -jar target/benchmarks.jar) FluxBaseline 使用 SpringInitializr 创建项目,仅包含 Reactive Web。接下来,我会写一个 WebMVC 风格的极简controller。 @SpringBootApplication @RestController public class DemoApplication { @GetMapping("/") public String home() { return "Hello"; } ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6