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

作者:武贯祥

来源:宜信技术学院

基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架相关推荐

  1. 基于Selenium实现的web自动化测试框架

    目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供 ...

  2. Web自动化测试 (Selenium+Python)测试环境搭建

    目录 一.什么样的项目适合做Web自动化测试 二.Python+Selenium环境搭建 三.八大元素定位 一.什么样的项目适合做Web自动化测试 1.软件需求不会频繁的变更 2.项目周期比较长 3. ...

  3. Python+Selenium简单实现Web自动化测试

    这篇文章是入门级别的应用Python + Selenium进行自动化测试,包括环境搭建及简单的实例.基本思想是用Firefox Selenium IDE插件录制脚本并生成Python代码,用Pytho ...

  4. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...

    原标题:Selenium 凭什么成为 Web 自动化测试的首选?(内附源码) 自动化 · 工具 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试. 2. Selenium ...

  5. 怎么退出python命令界面_怎么退出python命令行

    因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...

  6. Java+selenium简单实现web自动化测试

    最近在转行软件测试,有点艰难,为了提高自己的竞争力,只有不断的学习,学习多一点技术和知识. 这次要学习的是Java+Selenium的Web自动化测试,虽然这个自动化测试技术已经少有人用,或者说已经没 ...

  7. python写界面输入测试脚本,python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

  8. python仿真界面_基于Python语言的ABAQUS脚本仿真简介

    经常在使用ABAQUS进行仿真的时候,会遇到逆向的仿真需求,如在变形量要求范围内去判定载荷大小,几何尺寸大小等参数,或者有很多重复性的操作.在这个时候其实使用ABAQUS正向分析是比较费时效率也不是很 ...

  9. python selenium_自动化测试:Selenium+Python环境搭建

    为了运行或编写Selenium脚本,这里选择python语言.所以需要准备内容如下: Python环境+selenium模块+浏览器驱动+浏览器 1 python环境 Python安装不再赘述,假设大 ...

  10. Python+Selenium PO模式Web自动化测试实战

    1.项目结构 2.BASE层封装代码 # -- coding: UTF-8 -- import datetime import os from selenium.webdriver.support.s ...

最新文章

  1. (转载)Linux usbtouchscreen驱动分析
  2. 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
  3. 跨域问题解决方案--Nginx代理转发
  4. mac 下 通过 brew 安装 MariaDB
  5. KDD 18 论文解读 | GraphWave:一种全新的无监督网络嵌入方法
  6. 使用Java生成二维码图片(亲测)
  7. linux 手机 wlan信号桥,手机WLAN信号桥是什么?WLAN信号的作用和使用方法
  8. 【LCT】遥远的国度(P3979)
  9. 用 git 维护 vim 代码
  10. ubuntu下Pure-FTPd的安装和配置
  11. python访问注册表_Python 操作注册表
  12. Python搭建投票分类器模型来进行机器学习实验
  13. 最全面计算机英语单词列表(一)
  14. TNF5SLNO 华为OSN1800全新原包装4路STM-16,8路STM-4或8路STM-1光接口板
  15. 英文对“ Big O”符号的解释是什么?
  16. dry的原理_【面板制程刻蚀篇】史上最全Dry Etch 分类、工艺基本原理及良率剖析...
  17. 配置OPTIONS方法服务器响应,nginx设置X-Frame-Options的两种方法
  18. 彻底理解差模共模 输入信号
  19. 程序员的价值观与网络的复杂性
  20. 什么蓝牙耳机的延迟最低?2022延迟最低的蓝牙耳机推荐

热门文章

  1. Kotlin学习 PART 1:kotlin定义和目的
  2. Scrum介绍——续
  3. 事务处理操作(COMMIT,ROLLBACK)。复制表。更新操作UPDATE实际工作中一般都会有WHERE子句,否则更新全表会影响系统性能引发死机。...
  4. Modelsim仿真如何查看内部信号
  5. 关于迭代器中IEnumerable与IEnumerator的区别
  6. android 常用类
  7. Netlog 的数据库及 LAMP 架构
  8. debug.keystore文件不存在解决办法
  9. WPF异步载入图片,附带载入中动画
  10. IE下实现全屏两方法