一、什么是?
该工具是呈基于浏览器的自动化性质的, 她所供应的是一种跨越平台、跨越浏览器的, 从一端到另一端的 web 自动化解决方面的方案。其主要涵盖三部分, 分别为: IDE, 还有 Grid:
这儿有个扩展, 它属于IDE, 它具备录制回放功能, 它还可以将录制的操作, 以多种语言比如java等的形式, 导出成为测试用例。
其二, 提供用于Web自动化的API, 其主要作用在于浏览器控制, 在于页面元素选择, 还在于调试。不同的浏览器所需的是不同的。
3、Grid, 它具备一种能力, 这种能力是在不同机器之上, 运行测试, 而且是在不同浏览器上进行运行测试的能力。
本文使用结合 库进行自动化测试框架的搭建。
二、自动化测试框架
典型的一个自动化测试框架, 通常涵盖用例管理模块, 并有自动化执行控制器, 还包含报表生成模块以及 log 模块, 这些模块相互辅助、补充。

接下来介绍一下各模块的逻辑单元:
1、用例管理模块
用例管理模块包括新增、修改、删除等操作单元,这些单元又会涉及到用例书写模式,测试数据库的管理、可复用库等。
2、自动化控制器
控制器是自动化用例执行的组织模块,主要是负责以什么方法执行我们的测试用例
3、报表生成模块
主要负责执行用例后的生成报告,一般以HTML格式居多,信息主要是用例执行情况。另外还可以配置发送邮件功能。
4、log模块
主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。
三、自动化框架的设计和实现
1、需求分析
首先, 我们测试的对象是是一个 web 平台, 以这个平台为基础来设计的框架, 要涵盖测试用例管理这一方面, 要囊括测试执行控制器这一方面, 要包含测试报告这一方面, 还要有测试日志的生成这一方面。
2、设计和实现
1)页面管理
假定测试 web 对象属于一个典型的单页面应用, 故而我们选用页面模式, 页面模式。
是那页面跟测试用例之间起连接作用的纽带, 它把每个页面进行抽象, 使其成为一个单独的类, 为测试用例供给页面元素的定位以及操作。
BaseClass作为父类只包含driver成员变量,用来标识Selenium中的WebDriver,以便在子类中定位页面元素。LoginClass和PageClass作为子类,可以提供页面元素的定位和操作方法。比如登录页面。

从页面进行查看, 所要操作的元素分别是, 登录时使用的用户名, 登录时使用的密码,下次登录能够自动进行登录的设置, 以及用于触发登录动作的按钮。具体实现代码如下:

传承而来的, 是针对登录所展开的元素定位以及操作的达成。在代码里, 对相关元素做了定位, 还增添了设置用户名还有密码的操作行为。

2)公共库模块
创建测试用例所服务的模块为公共库模块, 其主要涵盖了常量, 还有公共函数, 以及日志, 再者是报告等。
.py

测试用例会被测试用例信息类予以标明, 而且其中涵盖执行用例, 还有执行结果里面的信息, 主要是包含以下这些字段。

测试用例所执行的步骤以及所产生的错误信息, 主要会被记录在日志当中, 不同的那些信息, 有着不一样的日志级别, 举例来说, 存在, , 跟Debug。鉴于每个测试用例产出的日志条目数量比较少, 因此于测试框架里, 仅仅运用了最高级别的日志打印, 也就是Debug级别, 此级别同样会把其他所有日志级别的信息给打印出来。在具体的实现过程中, 引用了标准库之内的类库, 目的是能够更为便捷地控制日志输出。
3)测试用例仓库
用来组织自动化测试用例的是用例仓库, 被抽象成一个独立类的是每条测试用例, 且每条测试用例均继承自类, 类中的库提供了丰富的测试框架支持, 这丰富的测试框架支持包括测试用例的setUp和方法, 而这测试用例的setUp和方法在实现用例的过程中是可以重写的, 依托页面管理和公共库模块实现的是页面方法和公共函数, 如此一来每一个测试用例脚本的书写都会变得非常清晰简洁。

从这个测试用例中,我们可以看到
Setup中定义了执行测试用例前的一些实例化工作
对执行完测试做了清理和写日志文件工作
测试步骤明确, 测试数据清楚, 测试检查点明晰, 易于修改, 像用户名密码这类内容便是如此。
日志级别仅有Debug,所以写日志仅需用同一Log方法
3)用例执行模块
执行模块主要用于控制测试用例脚本大批量依次执行事宜, 进而形成一个测试集合。用例的执行在此过程中引用了标准库当中的用于执行的shell命令, 借此得以执行给定具体测试用例汇聚集合里边的用例。测试用例集合是一个构造简易的单纯文本格式文件, 在实现整个过程期间运用利用了.txt文件.txt。

用例前没有“#“标记的测试用例脚本会被执行,而有”#“标记的则会被忽略,这样可以很方便的控制测试集的执行,当然也可以创建不同的文件来执行不同的测试集。
四、需要改进的模块
就现正实现着的测试框架而言, 已然能够达成 Web 对象的自动化需求, 然而, 依旧存在着一些能够予以改进提升的方面, 诸如:
1)部分用例可以尝试数据驱动
2)二次封装的By函数,以便更高效定位元素
3)没有进行持续化集成
五、总结
由实现产生的 web 自动化框架, 不但具备轻量级的特性, 而且拥有灵活性, 能够促使自动化测试用例得以快速开发, 将本篇的框架设计与部分优良实践予以结合, 有望为大家后续有关 web 自动化框架的设计以及实现带来助力。
最终感激每一位仔细阅读我所撰写文章之人, 礼尚往来向来是需存在的, 虽说并非是极具价值之物, 要是你能够用得上的话可以径直拿去:

对那些从事【软件测试】工作的朋友而言, 这些资料被当成最全面且最完整的备用仓库, 这个仓库陪伴了上万个测试工程师走过最为艰难的那段路程, 期望它也能够对你有所帮助!
