速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

基于 Selenium 和 Python 的 web 自动化框架

  • 2020-02-12
  • 本文字数:1955 字

    阅读完需:约 6 分钟

基于Selenium 和 Python的web自动化框架

一、什么是 Selenium?


Selenium 是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的 web 自动化解决方案。Selenium 主要包括三部分:Selenium IDE、Selenium WebDriver 和 Selenium Grid:


 1、Selenium IDE:Firefox 的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如 java,python 等)的形式导出成测试用例。


 2、Selenium WebDriver:提供 Web 自动化所需的 API,主要用作浏览器控制、页面元素选择和调试。不同的浏览器需要不同的 WebDriver。


 3、Selenium Grid:提供了在不同机器的不同浏览器上运行 selenium 测试的能力


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


二、自动化测试框架


一个典型的自动化测试框架一般包括用例管理模块、自动化执行控制器、报表生成模块和 log 模块,这些模块相辅相成。


1542074347916062408.png


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


1、用例管理模块


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


2、自动化控制器


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


3、报表生成模块


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


4、log 模块


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


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


1、需求分析


首先我们的测试对象是一个 web 平台,基于此平台设计的框架要包含测试用例管理、测试执行控制器、测试报告以及测试日志的生成。


2、设计和实现


1)页面管理


假设测试 web 对象为一个典型单页面应用,所以我们采用页面模式。页面模式


是页面与测试用例之间的纽带,它将每个页面抽象成一个单独的类,为测试用例提供页面元素的定位和操作。


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


1542074387680012925.png


从页面看,需要操作的元素分别为,登录用户名、密码、下次自动登录和登录按钮,具体实现代码如下:


页面父类 BaseClass.py


1542074400051064993.png


LoginClass 继承自 BaseClass,并进行登录的元素定位以及操作实现。代码中定位了 username 和 password,并添加了设置用户名和密码的操作。


1542074413177087788.png


2)公共库模块


公共库模块是为创建测试用例服务的,主要包括常量、公共函数、日志、报告等。


Common.py


1542074441357020926.png


测试用例信息类用来标识测试用例,并且包括执行用例、执行结果信息,主要包括以下字段。


1542074454331060091.png


日志主要用来记录测试用例执行步骤及产生的错误信息,不同的信息有不同的日志级别,比如 Information,Warning,Critical 和 Debug。由于每个测试用例产生的日志条目比较少,所以在测试框架中只利用了最高级别的日志打印,即 Debug 级别,该级别也会将其他所有的日志级别的信息同样打印出来。在具体的实现中引用了 Python 标准库中的 logging 类库,以便更方便的控制日志输出。


3)测试用例仓库


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


1542074470196021290.png


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


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

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

  • 测试步骤、测试数据和测试检查点非常清晰,易修改(比如用户名密码)

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


3)用例执行模块


执行模块主要用来控制测试用例脚本的批量执行,形成一个测试集。用例的执行引用了 Python 标准库中的 subprocess 来执行 nosetests 的 shell 命令,从而执行给定测试用例集中的用例。测试用例集是一个简单的纯文本文件,实现过程中利用了.txt 文件 testcases.txt


1542074493437045027.png


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


四、需要改进的模块


对于现有实现的测试框架,已经可以满足 web 对象的自动化需求,但还是有些可以改进提高的地方,比如:


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


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


3)没有进行持续化集成


五、总结


基于 Selenium 实现的 web 自动化框架不仅轻量级而且灵活,可以快速的开发自动化测试用例,结合本篇的框架设计和一些好的实践,希望对大家以后的 web 自动化框架的设计和实现有所帮助。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/183


2020-02-12 15:341655

评论

发布
暂无评论
发现更多内容

重新学架构之微信业务与学生管理系统

陈华英

「架构实战营」

从 Gitee 到极狐GitLab 的迁移指南

极狐GitLab

迁移 gitee 极狐GitLab

面试突击19:为什么ConcurrentHashMap不允许插入null值?

王磊

把复杂交给我们,把简单还给你丨TiVP 让 SQL 执行计划可视化

PingCAP

拍乐云发布互动白板2.0,首创超高清文档演示和滚动浏览

拍乐云Pano

WebRTC RTC opengl

2022年1月国产数据库排行榜:TiDB霸榜两年势头不减,openGauss与OceanBase分数大涨

墨天轮

数据库 opengauss TiDB 国产数据库

征集用户| 填写 2022 Apache Pulsar 用户调查问卷,抽取丰厚礼品

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

Flink 流批一体平台 StreamX 1.2.1 正式发布

ApacheStreamPark

spark FlinkSQL 流批一体 Flink 平台 一站式平台

网易Go语言通用开发框架-Ngo开源啦

月读

golang Go 语言 开源治理 开源中国

投票开始 | 和你一起见证龙蜥社区年度优秀开发者的诞生

OpenAnolis小助手

开源 开发者 活动 社群 比赛

华为云FusionInsight连续三次获得第一 加速释放数据要素价值

数据湖洞见

大数据 FusionInsight 华为云

请求管理 | 洞态 IAST 在好大夫 SDL 中的最佳实践

火线安全

信息安全 SDL DevSecOps

做了这么多年架构师,我终于理解了什么是架构设计

博文视点Broadview

V7.1:新字段“嵌入”,实现自定义元素交互

明道云

品高股份加入,龙蜥社区迎来又一家云计算厂商

OpenAnolis小助手

Linux 开源

小程序开发中使用 JS

Speedoooo

Hive底层数据存储格式详解

五分钟学大数据

hive 1月月更

OpenCloudOS开源操作系统社区迎来首个正式版本

科技热闻

深度评测丨GaussDB(for Redis)大Key操作的影响

华为云开发者联盟

redis 运维 GaussDB(for Redis) 大Key KV查询

企业微信业务架构分析

Geek_1b4338

#架构实战营

模块一作业

Geek_ec866b

架构实战营

Hive SQL语句的正确执行顺序

五分钟学大数据

1月月更

多方计算时,每次结果竟然都存在着巨大隐患,此文告诉你可以这样解决!

华为云开发者联盟

安全 多方计算 数据保护 华为云tics服务 差分隐私算法

使用 Lambda 表达式实现超强的排序功能

CRMEB

告警关联中的频繁项集挖掘问题

云智慧AIOps社区

算法 智能运维 智能告警 人工智能「 云智慧

Android C++系列:JNI中的Handler--ALooper

轻口味

c++ android jni 1月月更

鸿蒙轻内核源码分析:虚拟文件系统VFS

华为云开发者联盟

鸿蒙 文件系统 鸿蒙轻内核源码 虚拟文件系统VFS 虚拟文件系统

CWE视图层级关系解析:节点关系查询

华为云开发者联盟

软件开发 cwe 软件缺陷 CWE视图层级关系 节点关系

专访深职院XR专家 | 实时云渲染赋能虚拟仿真实训,打造5G+XR智慧教育平台

3DCAT实时渲染

教育 XR VR/AR 云渲染 元宇宙

凡泰极客荣获2021 InfoQ“最佳技术产品营销奖”

FinClip

InfoQ

面试官太难伺候?一个try-catch问出这么多花样

阿Q说代码

效率 字节码指令 1月月更 try-catch finally-return

基于Selenium 和 Python的web自动化框架_行业深度_武贯祥_InfoQ精选文章