Skip to content

自动化测试-e2e测试框架选择 #23

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
CodeLittlePrince opened this issue Jan 13, 2020 · 0 comments
Open

自动化测试-e2e测试框架选择 #23

CodeLittlePrince opened this issue Jan 13, 2020 · 0 comments
Labels

Comments

@CodeLittlePrince
Copy link
Owner

CodeLittlePrince commented Jan 13, 2020

前言

记得前两年,nightmare还是很火的。所以,我在自己的前端脚手架也集成了它。不过,过去了那么久,不知道现在的形式如何。

因为最近发现面向的跨境项目业务越来越复杂,每个组员都负责着多个项目,一下做做A,一下做做B,然后有档期就会被安排做做跨境。因此,因为注意力不能集中,再加上对业务的不了解,就时不时会写一些影响到以前逻辑的bug。

这不得不让我们去规划做自动化回归测试的事情,虽然网站业务繁琐,但至少得保证每次组员的修改,不会影响主流程。

罗列

首先,我先罗列出我调研的e2e框架或库,让大家有个大体的认识。

  1. PhantomJS

    英文解释:
    Scriptable headless browser.

    中文解释:
    可编程无界面浏览器。

    补充:
    它就是一个浏览器,只是内部的点击、翻页等人为相关操作需要程序设计实现。

  1. NightmareJS

    英文解释:
    A high-level browser automation library. Under the covers it uses Electron, which is similar to PhantomJS but roughly twice as fast and more modern.

    中文解释:
    一个轻量级浏览器自动化测试库。基于Electron,和PhantomJS类似,但是快了大约2倍且更现代。

    补充:
    它的接口比PhantomJS友好很多,大大提高了开发效率:
    image
    而且,它还提供了chrome插件-daydream,它能够录制你在页面上的操作,并且生成对应的代码。这也是我为什么当初选择它的重要的原因之一。

    但是,现在NightmareJS好像难产了,核心代码的更新是在一年多前,而且daydream的插件安装页面也404中。果断抛弃。

  1. Puppeteer

    英文解释:
    Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the DevTools Protocol. Puppeteer runs headless by default, but can be configured to run full (non-headless) Chrome or Chromium.

    中文解释:
    Puppeteer是一个提供建立在DevTools协议(devtools-protocol),控制Chrome或Chromium的高阶API node库。Puppeteer默认无界面运行,不过可以通过配置变为有界面运行Chrome或Chromium。

    补充:
    它由Chrome DevTools维护,而且和NightmareJS一样,也提供了自动生成代码的Chrome插件-puppeteer-recorder。所以它完全可以替代NightmareJS,或者说就是NightmareJS凉了的原因吧。
    image
    Puppeteer还分puppeteerpuppeteer-core,区别可参阅 puppeteer-vs-puppeteer-core

    而且,Puppeteer如今已经可以跨浏览器,比如在Chrome、Firefox、Edge等浏览器上测试了。
    总之,个人认为是最好的e2e自动化测试库。

  1. Selenium-webdriver

    英文解释:
    Selenium is a browser automation library. Most often used for testing web-applications, Selenium may be used for any task that requires automating interaction with the browser.

    中文解释:
    Selenium是一个浏览器自动化测试库。大都用来测试web应用,Selenium可以用来做任何需要和浏览器交互的任务。

    补充:
    底层基于webdriver实现,所以,可以自动化测试各种浏览器,只要对应的浏览器实现了webdriver功能(现代浏览器,IE是凉凉的)都可以用它来自动调起和测试。

    启动浏览器的lancher/driver已经继承到selenium-webdriver中了:
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const firefox = require('selenium-webdriver/firefox');
 
let driver = new webdriver.Builder()
    .forBrowser('firefox')
    .setChromeOptions(/* ... */)
    .setFirefoxOptions(/* ... */)
    .build();

  1. Nightwatch

    英文解释:
    End-to-end testing framework written in Node.js and using the Webdriver API.

    中文解释:
    Node.js调用Webdriver API实现的端到端(e2e)测试框架。

    补充:
    我们注意到,它是一个framework而不是一个library。之前介绍到的库的话,往往要结合其它库,比如mocha,chai等,然后通过一番折腾结合,才能实现完整的测试功能。

    framework虽然也不是说不需要装任何额外的库或插件,但是,基础的东西,它都已经集成到框架中了,它能大大减少你的折腾时间。

    同Selenium,它也是基于webdriver实现,所以,可以也自动化测试各种浏览器。

    启动各个浏览器只需装对应浏览器的laucher/driver就好:
Geckodriver (Firefox):
Geckodriver is the WebDriver service used to drive the Mozilla Firefox Browser.
$ npm install geckodriver --save-dev
Chromedriver:
Chromedriver is the WebDriver service used to drive the Google Chrome Browser.
$ npm install chromedriver --save-dev

  1. Protractor

    英文解释:
    E2E test framework for Angular apps.

    中文解释:
    为Angular应用而生的e2e测试框架。

分类

说到对比,就得先分类,先搞清服务的维度。
image

如图,我将这些测试库或框架,以底层实现的方式分为三类:

  1. devtools-protocol类;
  2. Webdriver类;
  3. 其它类;
  • Webdriver类,之前也说过,不局限某个特定浏览器,只要想测的浏览器有Webdriver能力就都可以跑自动化。
    image

  • devtools-protocol类,和Webdriver类类似,也是不局限某个特定浏览器,只要想测的浏览器有devtools-protocol能力就都可以跑自动化。
    image
    图片来源WICG/devtools-protocol

  • 其他类,比如Phantom,Nightmare这种,没有跨浏览器能力。

对比

Protractor太针对Angular了,所以就不加入对比:

名称 接口易用 框架 跨浏览器 自动生成代码插件 社区活跃
PhantomJS yes
NightmareJS yes yes
Puppeteer yes yes yes yes
Selenium yes yes yes
Nightwatch yes yes yes yes

所以,比对下来的结论就是:

  • Puppeteer是首选;

马路边边

在调研的过程中,还发现了一款挺有意思的e2e测试框架——cypress

它的优点:


  1. image
    启动它后,它会有一个可视化界面提供给用户进行操作,而且,操作的过程和结果都体现在了web页面上,整个测试过程高端大气上档次。

  2. 方便
    因为是框架,所以基础的东西都已经集成处理好了:
    image

它的缺点:

  1. 不跨浏览器
    当我看到它文档的Unsupported-Browsers,我就觉得不香了;

  2. 没有自动生成代码的插件
    之前我们也看到了,非Webdriver虽然不能跨浏览器,但是毕竟是提供自动生成代码的插件,还是很方便的。所以,我就觉得它也不酷了,啥花里胡哨的东西。

总结

重要的话说两遍:

  • Puppeteer是首选;

参考资料

Chromium
Comparison of browser engines
electronjs.org

@CodeLittlePrince CodeLittlePrince changed the title 自动化测试-e2e框架选择 自动化测试-e2e测试框架选择 Jan 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant