• 0
  • 0
分享

  背景

  事件的起因在于老板最近的两次“故障”,一次去年的,一次最近。共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用。

  最神奇的是,事后多次 Code Review,结果还是没有发现任何能够导致该问题的 bug,最后推测有可能是服务器在发布打包的时候出了问题。

  当老板第 N + 1 次吐槽因为他写的工程化工具领来的天外飞锅,我突然思考起来,如何才能避免这种天外飞锅。

  归根结底,导致这类线上故障的原因都是在于打包上线的代码没有经过验证。针对这个问题,有两种方法可以解决:

  治本

  由于请求地址不同,预发(测试)版本不可直接发线上,而线上版本缺少了上线之前的验证过程。所以,可以通过在发布系统的预发和线上之间,新增一个 beta 发布,beta 发布使用线上发布的打包流程,不同的是,只允许内网访问,专门用于内部测试。

  有人可能会问,哪怕添加了 beta 发布,依然无法保证线上发布重新打包的时候不出错呀?

  重点来了,这种解决方案的核心就在于,beta 发布测试通过后,直接将 beta 发布的打包产物进行线上发布,因为不需要二次打包,所以避免了打包过程中产生新的问题。由于添加 beta 发布需要不同岗位,比如运维、后端、移动端的协作,所以实施难度较大。

  治标

  既然线上版本上线之前验证不了,那么上线之后立刻回归验证,如果发现问题,立刻手动回滚。正所谓没有人发现的故障就不是故障,perfect!

  正如之前所说的,治本的方法实施难度较大,所以,我们重点关注治标的方法,即上线之后进行回归验证。

  说到这里,问大家一个问题,需求上线之后,作为前端,大家会主动进行回归验证而不是等测试进行验证吗?

  不管你们会不会,反正我是不会。在这种情况下,前端 UI 自动化测试闪亮登场。

  什么是前端 UI 自动化测试

  众所周知,测试是一个很重要的环节,由于它的重要性,甚至软件工程中出现了 TDD 这种说法。

  在之前,所谓的前端测试,更多的是在页面上点点点,进行人肉测试,毫无疑问,效率低下。

  所以,有了前端自动化测试,使用机器代替人工。一般来说,前端自动化测试分为两种:单元测试以及 e2e 测试(UI 自动化测试)。

  单元测试本质上是一种白盒测试,是对程序中的最小可测试单元进行测试。

  e2e 测试本质上是一种黑盒测试,相当于模拟用户访问应用程序,主要检查界面或功能是否正确。

  相比于单元测试,UI 自动化测试更多的是站在用户角度,从用户的角度发现问题。但是,由于它其实是一种黑盒测试,所以效率相对于白盒测试要低一些。

  前端 UI 自动化测试框架对比

  Selenium

  e2e 测试鼻祖级的框架,有多种编程语言的版本,如果你去问问你们公司的测试,那么你一定会发现,他们正在用 Python 版本的 Selenium 写自动化测试脚本。

  值得一提的是,它是基于 webdriver 而不是 webkit 内核实现的,所以,Selenium 的浏览器兼容性相对于其他浏览器要好很多。

  PhantomJS

  开创性的 headless(无头)测试框架,何为 headless?即没有 UI 界面的浏览器。headless 最大好处在于可以像单元测试一样,在命令行中跑 e2e 测试。

  Nightmare

  一句话——加强版的 PhantomJS,相对于 PhantomJS,无论是开发还是运行效率都得到了很大的提升。

  Tips:Nightmare 还有个优点——它提供了一个 Chrome 插件 daydream,该插件可以通过录制屏幕,自动化生成测试代码,懒人福音。

  Nightwatch

  名字和Nightmare 很像,但是完全不一样的一个 e2e 框架,使用 Node 调用 webdriver 实现。相对于 Selenium,开发和运行效率更高,最重要的是,迭代很活跃,这点,用开源产品的用户懂得都懂。

  Cypress

  我接触的第一个 e2e 测试框架,测试界面和文档做到极致的一个产品,推荐大家可以试一试。

  Puppeteer

  e2e 测试框架的集大成者,默认以 headless 模式运行,但是也可以通过配置变为 Chromium 运行。开发效率以及运行效率一流,最重要的是,它像 Nightmare 一样,提供了测试代码生成插件——puppeteer-recorder。

  综上所述,如果考虑浏览器兼容性,使用Nightwatch,反之,选择Cypress 或者 Puppeteer,如果需要 headless 或者自动化生成代码的功能,那就使用 Puppeteer。

  使用前端 UI 自动化测试的价值

  从自动化测试的收益来说,自动化测试有个公式:

  自动化的收益 = 迭代次数 * 全手动执行成本 - 首次自动化成本 - 维护次数 * 维护成本

  简而言之,迭代越频繁,维护成本越高的项目,添加自动化测试的价值越高。在基建项目或频繁迭代项目中引入前端 UI 自动化测试,可以大大减少每次迭代后手动测试的时间。比起手动测试,前端 UI 自动化测试测试的更快也更彻底。

  另一个方面,随着前端技术的高速发展,各个公司的前端开发、监控体系已经很完善了,但是缺少前端在测试方向上的延伸。而前端 UI 自动化测试最大的价值,就是在前端部分,弥补开发和监控之间的空白区域,形成一个完整的闭环,三管齐下,极大地保障了项目的质量。

  未来的展望

  针对前端 UI 自动化测试,我思考了很久,个人认为主要有两大方向:

  1.针对单个项目,进行一系列关键功能的测试,不过如果需要追求测试覆盖率的话,比较耗费时间,算是一种比较常规、精细的测试方案,所以比较适合一些长期维护的基建项目或者大型业务项目,缺点在于活动页基本覆盖不了。

  2.针对所有项目,添加一个自动化测试的脚手架(或者平台化),能够通过配置项,自动访问目标页面,并进行一系列的 e2e 测试,根据不同的结果采取截图、生成 pdf、报警等不同处理方案。

  如果有不同想法的同学,欢迎一起交流~


作者:格子熊    

来源:http://www.51testing.com/html/38/n-4481538.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、引言今天分享的这部分内容,应该算是Locust的进阶篇,毕竟针对一般的性能自动化测试人员来说,掌握小鱼写的前5章节的知识,就能足够应对大部分情况。但是,针对有些需要进阶自己的技术,那么,可以持续关注小鱼的博客,让我们一起探索Locust,探索性能自动化。那么,话不多说,我们开始今天的进阶篇,自定义负载测试图形2、定义有些时候,默认的形状已经无法满足我们的特定要求,那么这个时候,我们就需要完全自定义负载测试的图形形状。而这并不难,就是通过设置 用户或者更更改用户数和产生率来实现的。2.1 列举实例例如:我们想自定义时间生成负载峰值或上下倾斜。如何实现呢??直接使用 LoadTestshape...
            1 0 2953
            分享
          • 用Jmeter实现dubbo接口测试的文章,网上可以找到很多,但是只看不练假把式。废话不多说,直接上干货。写这篇文章的过程也是自己不断学习的过程。一、准备(1)自行下载安装zookeeper-3.4.6(这里的版本是我用的,可以自行下载自己喜好的版本)(2)自行下载apache-jmeter-3.1,这是免安装的,解压后\Jmeter\apache-jmeter-3.1\bin目录下执行jmeter.bat即可启动。(3)开发环境STS(即Spring Tool Suite)(4)dubbo-admin-2.4.1(这个是非必须的,主要是为了查看Dubbo的服务提供者和消费者) 二、...
            4 4 3211
            分享
          •     在项目开发流程的各个阶段,都需要测试人员参与,那么测试人员在每个阶段中都需要做什么呢?测试人员要怎么样参与项目的各阶段评审,才能有效的指导自己在后续的测试工作呢?跟大家分享一下我在项目中的一些经验和理解。    在项目的各阶段中,与测试相关的项目阶段可以分为:需求设计阶段/开发设计阶段/测试用例设计阶段/测试用例执行阶段,在需求设计和开发设计阶段,测试人员是参与角色,而测试用例设计和测试执行阶段,测试人员则是主导角色,下面依次讲解各阶段过程中,测试人员的关注重点:1、需求设计阶段:测试人员参加需求分析,需要了解到该需求对于用户...
            2 2 3992
            分享
          • 1、引言性能这块,虽然是小鱼一直不想去触碰的地方,但是,身在江湖漂,哪能不带刀!!小屌丝:鱼哥,最近你得注意身体啊小鱼:昂… 怎么突然关心起我来了?小屌丝:还用我说嘛,最近你博文更新的慢,不是在耍妹子,就是在去耍妹子的路上。小鱼:( ‵o′)凸…我这是在忙工作的事情小屌丝:我差点信了!!小鱼:…算了,我不替自己解释了, 我替IO解释吧!小屌丝:难道,今天要整IO? 那赶紧!在认识IO之前,我们要先了解 一下磁盘。然后在慢慢的认识IO2、 硬盘知识2.1 磁盘原理1、定义①盘片以每分钟数千转到上万转的速度在高速旋转,15K 10k 7.5k 5.2k RPM②磁头就能对盘片上的指定位置进行数据的...
            1 0 3549
            分享
          • 一、测试需求:测试20个用户访问网站在负载达到30QPS时的平均响应时间二、QPS:Query Per Second 每秒查询率。(一台查询服务器每秒能够处理的查询次数,作为域名服务器的性能经常用每秒查询率来衡量)三、测试步骤1、添加线程组(线程数+准备时长+循环次数)1)线程数:虚拟用户数,一个虚拟用户占用一个进程或线程(设置多少个虚拟用户=设置多少个线程)2)准备时长(s):设置的虚拟用户数需要多长时间全部启动。eg:线程数为20,准备时长为10,则说明需要10秒钟启动20个进程。3)循环次数:每个线程发送请求的次数。eg:线程数为20,循环次数为5,那么每个线程发送5次请求,总...
            8 8 2647
            分享
      • 51testing软件测试圈微信