今天先聊聊如何搭建自动化测试框架,主要会聊聊一些思路上的东西,从一个最简单的demo到把一个框架该有的组件都搭建好。本文主要以web自动化为例子,使用的语言是js。

一、什么是自动化测试框架

在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面,而后者是从目的方面给出的定义。

—百度百科

对于自动化测试框架大致包含以下的内容

自动化测试工具(selenium、puppeteer…)

Runner(Jest…)

日志(logger)

报告(reportor)

持续集成

二、使用puppeteer开始写一个最小的demo

2.1 工具选型

目前,对于web端UI自动化比较主流的工具有selenium、webDriver。而在这里选择的是Puppeteer,先来了解下puppeteer。

在chrome 59 chrome团队支持了headless模式,在Headless模式下,用于自动化测试和不需要可视化用户界面的服务器。例如,你想在一个网页上运行一些测试,从网页创建一个PDF,或者只是检查浏览器怎样递交URL。

Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

Puppeteer 核心功能:

利用网页生成PDF、图片

爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)

可以从网站抓取内容

自动化表单提交、UI测试、键盘输入等

帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用例

捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题

Puppeteer是使用node语言进行开发的,在使用中你可以使用async/await异步解决方案,async/await可能是目前为止最简单的异步方案了。

很强大是不是,接着我们去学习下puppeteer的接口文档,接着开始写我们的demo。

2.2 测试用例

该用例是直接使用puppeteer,先launch一个browser然后newPage,接着开始写case。如果你想执行可以把then后的内容改成访问百度界面的。如下图,

我们来看下整体的框架,如下图,图中直接使用Puppeteer。

对于以上的case,假如我要在写一条case,需要新建一个js文件,然后先launch一个browser然后newPage,接着开始写case。在这样的一个过程中我们可以看到我们每次都要launch browser,close browser,当然还有其他的问题比如怎么快速的执行多个用例等等,那么该如何解决这个问题呢?这时候考虑引入一个Runner的概念。

三、使用Jest进行lifecycle管理

3.1 了解Jest

对于Jest,在并发执行可以保持最高的性能,在沙盒模式下每个测试都有一个干净的环境。Jest在做UT、AT有着很成功的应用。接着我们在框架里面加入lifecycle去管理一些资源。需要去做一些setup、teardown的工作。

3.2 Jest+puppeteer

在这里抽象了一个environment(下图左),去统一管理测试过程中的一些资源,在这里引入了setup、teardown,声明全局的browser、page变量。而对于case(下图右),使用Jest的case编写规则去写,首先是一个describe,类似test suite,在describe可以写多个it,一条的it代表一条的case,你就可以在一个文件里写多条的case。对比下二中的case此时我们不需要在每次执行launch了。

接着看下整体的框架图,可以看到我们把jest给加入了

对于上面的case我们把对页面元素的建模跟对应的操作以及测试方法都写到同个class里面了。对于这样的case,如果改动了某个元素需要改动很多个的文件,维护成本很高,这是我们不希望看到的。接下来我们引入了POM.

四、POM

4.1 了解POM

POM的全称是Page Object Model。POM模型要求将一个页面上所有功能/可重用组件写到一个class文件中,它存在以下规则

1.Page Object Model is a design pattern to create Object Repository for web UI elements.

2.Under this model, for each web page in the application, there should be corresponding page class.

3.This Page class will find the WebElements of that web page and also contains Page methods which perform operations on those WebElements.

对于三中的代码很明显没有遵循POM,接着我们进行改进。

4.2 采用POM模型编写代码

在这里我抽象出一个pages,把不同界面的建模以及对元素的操作放在一个文件夹下,在case层只有测试方法。

在使用POM的过程中我还做了一件事情,抽象出driver层,对puppeteer的API进行封装,封装的意义有两方面为了支撑其他的工具比如selenium,统一接口,更好的做兼容性测试,(puppeteer支持的browser类型比较少);另一方面,对于driver这类的工具在ui

测试工程其实不会用到所有的大概能用上十几个method,我们可能对它进行封装让它更好用,比如可以在click前waitFor这个element出现,这样做就不需要在写case的时候每次click前都wait了。

接着我们来看下整体的框架:

对于这样的框架我们能很好的工作了,接下来需要加的是啥呢?

五、Logger&Report&Assert

loggger、report、assert是框架的必须部分。

logger需要统一的管理打印到console或者某个file,logger可以帮助我们更快的定义问题对于logger可以分为两类一个应用本身的log,一个测试代码的log,根据需要收集;report是在测试结束后把结果展示出来,可以是dashboars可以是html,告诉case的整体情况,以及错误时候的信息,当然还可以是更详细信息,比如说每一步的步骤信息等;Assert这里是采用了Jest自带了,觉得Jset自带的expect已经很强大了,当然如果你需要用别的或者封装也是可以的。我们接着看下代码(如下图),对于这些我们去使用是很方便的集成的,易于集成也是衡量一个第三方library的一个重要指标。

对于框架层加了两个模块进去。

六、其他工具类

对于框架而言,通常会留有一个Helper,把跟测试相关的工具放在这里。方便使用与管理。我们看下框架。

七、持续集成

首先,持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。自动化测试作为在持续集成中的一个重要环节,我们需要在执行UT/IT后接着执行AT,更早的发现bug。在这里可以使用docker搭建puppeter的运行环境,在jenkins上通过pipeline在docker中执行测试。

八、总结

以上就是本文的主要内容,希望看完这篇文章大家可以思考一些问题,对于这样的设计有何优化建议?在编写测试中可能会遇到哪些问题?我来说下,如何支持多个browser?测试太慢如何通过缓存提供web 元素的加载?面对这些该如何解决呢?

最后的最后,该框架的源码在github上,https://github.com/summergan/EndToEnd

目前只有文章中的demo,后续有时间会继续更新。

版权声明:本文出自51Testing原创,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

如何搭建自动化测试框架相关推荐

  1. 平安夜福利,送3本《从0到1搭建自动化测试框架》

    VOL 338 24 2021-12 今天距2022年8天 这是ITester软件测试小栈第338次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 09 ...

  2. 如何从零搭建自动化测试框架

    搭建的自动化测试框架要包括API测试,UI测试,APP测试三类.以上三类其实可以简化为两类,那就是: 1)接口自动化测试框架搭建 2)UI自动化测试框架搭建. 没问题,安排,且是手把手教你如何搭建以上 ...

  3. Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

    目录 一.项目结构介绍 1.mztestpro测试项目 2.bbs目录 3.test_case 二.编写公共模块 三.编写Page Object 四.编写测试用例 五.执行测试用例 小结: 本人在网上 ...

  4. 软件测试用例自动化框架,如何搭建自动化测试框架?

    序 今天先聊聊如何搭建自动化测试框架,主要会聊聊一些思路上的东西,从一个最简单的demo到把一个框架该有的组件都搭建好.本文主要以web自动化为例子,使用的语言是js. 一.什么是自动化测试框架 在了 ...

  5. 从0开始搭建自动化测试框架之PO分层架构

    一.什么是PO模式 全称:page object model  简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePag ...

  6. Ruby+Watir搭建自动化测试框架

    通过一番比较和精选,最终决定使用目前比较流行的Ruby来作为我的自动化测试框架设计的首先测试脚本,加上它的测试工具Watir几乎完美的代替了所谓收费工具QTP,并且有过之而无不及. 下面我们正式开始说 ...

  7. 大招来袭 | 还在为不会搭建自动化测试框架而发愁吗?万字长文,大佬有妙招!!

    开始前我想吟诗一首 <无 题> 曾经有个难题摆在我的面前,自动化测试框架到底如何搭建? 曾经觉得它神秘而又那么难以企及: 曾经觉得它高端.大气.上档次. 而如今: 大佬想说: 其实他就是个 ...

  8. appium+python搭建自动化测试框架_TestAPP框架(三)

    Pycharm 创建 Project,搭建 APPTEST框架如下图: 1.框架功能 业务功能的封装 测试用例封装 测试包管理 截图处理 断言处理 日志获取 测试报告生成 数据驱动 数据配置 2. d ...

  9. eclipse+java+selenium+testNG搭建自动化测试框架

    1 Java环境的搭建 1.1访问oracle的官网下载最新版本的jdk http://www.oracle.com/technetwork/java/javase/downloads/index-j ...

最新文章

  1. 24. Swap Nodes in Pairs
  2. 作用域和闭包的通俗理解
  3. 数据中台(四)数栈,企业级一站式数据中台PaaS
  4. 对 Session 的深入探讨
  5. 父级居中后,并继承子级浮动方法
  6. CodeForces - 1321C Remove Adjacent(贪心+模拟)
  7. 算法 --- 冒泡排序、选择排序、插入排序的js实现
  8. 由C过渡到C++-入门知识点
  9. linux的基础知识——进程组
  10. 二叉树最近公共祖先 LCA
  11. 技术解析+代码实战,带你入门华为云政务区块链平台
  12. 卡尔曼滤波 -- 从推导到应用(一)
  13. web前端入门到实战:CSS3两大实用属性,以及网页制作技巧
  14. 吴恩达新公司曝光:签下富士康,要用AI变革制造业
  15. MySQL_采购入库价格与在线售价监控_20161213
  16. css 悬停动画_CSS3缩放图像动画效果悬停
  17. R语言自动化报告格式——knitr
  18. 银行排队问题之单队列多窗口服务 (25 分)(结构体排序)
  19. SQLyog安装教程详解
  20. 人脸识别门禁系统设计(一)

热门文章

  1. HMM算法详解(内含推导)
  2. python+selenium提取数据
  3. 我,是一个培训班出来的程序员
  4. 线上引流方法有哪些?怎么做线上引流推广?
  5. PID中各个参数意义
  6. socket中的reuse addr和reuse port
  7. 微服务和分布式的区别什么?有什么特点?
  8. 【线上活动】中秋诗词接龙!
  9. VBA中字典的写入技巧
  10. 8种在JavaScript数组中查找指定元素的方法(用于开发中数据的处理)