Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。java
Selenium IDE:Firefox的一个扩展,它能够进行录制回放,并把录制的操做以多种语言(例如java、python等)的形式导出成测试用例。python
Selenium WebDriver:提供Web自动化所需的API,主要用做浏览器控制、页面元素选择和调试。不一样的浏览器须要不一样的WebDriver。web
Selenium Grid:提供了在不一样机器的不一样浏览器上运行selenium测试的能力。shell
本文将详细介绍如何运用Python结合Selenium WebDriver库搭建web自动化测试框架。数据库
一个典型的自动化测试框架通常包括用例管理模块、自动化执行控制器、报表生成模块和log模块,这些模块相辅相成。浏览器
接下来介绍各模块的逻辑单元:框架
一、用例管理模块函数
用例管理模块包括新增、修改、删除等操做单元,这些单元又会涉及到用例书写模式,测试数据库的管理、可复用库等。工具
二、自动化控制器测试
控制器是自动化用例执行的组织模块,主要是负责以什么方法执行咱们的测试用例.
三、报表生成模块
主要负责执行用例后的生成报告,通常以HTML格式居多,信息主要是用例执行状况。另外还能够配置发送邮件功能。
四、log模块
主要用来记录用例执行状况,以便于高效的调查用例失败信息以及追踪用例执行状况。
一、需求分析
首先咱们的测试对象是一个web平台,基于此平台设计的框架要包含测试用例管理、测试执行控制器、测试报告以及测试日志的生成。
二、设计和实现
页面管理
假设测试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方法,在实现用例的过程当中能够重写。依托页面管理和公共库模块实现的页面方法和公共函数,每个测试用例脚本的书写都会很是清晰简洁。
从这个测试用例中,咱们能够看到
三、用例执行模块
执行模块主要用来控制测试用例脚本的批量执行,造成一个测试集。用例的执行引用了Python标准库中的subprocess来执行nosetests的shell命令,从而执行给定测试用例集中的用例。测试用例集是一个简单的纯文本文件,实现过程当中利用了.txt文件testcases.txt。
用例前没有“#“标记的测试用例脚本会被执行,而有”#“标记的则会被忽略,这样能够很方便的控制测试集的执行,固然也能够建立不一样的文件来执行不一样的测试集。
对于现有实现的测试框架,已经能够知足web对象的自动化需求,但仍是有些能够改进提升的地方,好比:
基于Selenium实现的web自动化测试框架不只轻量级并且灵活,能够快速地开发自动化测试用例,结合本篇的框架设计和一些好的实践,但愿对你们之后的web自动化框架的设计和实现有所帮助。
做者:武贯祥
来源:宜信技术学院