构建Headless 的 E2E 测试

作者: Yuan_Jie | 来源:发表于2018-03-02 12:21 被阅读31次

为什么要构建 Headless 的 E2E 测试

A headless browser is a great tool for automated testing and server environments where you don't need a visible UI shell. For example, you may want to run some tests against a real web page, create a PDF of it, or just inspect how the browser renders an URL.

结合上面的原因,我们还可以

  • Headless结合 E2E 测试,可以让E2E 测试在非 GUI 的操作系统中运行
  • 可以集成至 CI 环境中。让版本得到快速验证

Chrome Headless 的选取

  • Mac/Linux 的Chrome从59版本后,已经支持 Healess 模式的运行。Windows 的从60版本开始支持
  • 所以选择一个你想要的 Chrome 版本,便可以进行 Headless 的测试
chrome \
  --headless \                   # Runs Chrome in headless mode.
  --disable-gpu \                # Temporarily needed if running on Windows.
  https://www.chromestatus.com   # URL to open. Defaults to about:blank.

编写 E2E 测试 - BDD-Gauge

BDD

  • home.spec
Search
----------------

* Search with 123
  • home.cpt
# Search with 123
* Open Baidu homepage
* Search 123
* Check searching result

编写测试实现

使用 Selenium 完成测试用例的实现过程。核心实现

System.setProperty("webdriver.chrome.driver", "Path/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
return new ChromeDriver(options);

执行测试

./gradlew clean gauge

:clean
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:gauge
Feb 28, 2018 10:48:01 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
Starting ChromeDriver 2.35.528157 (4429ca2590d6988c0745c24c8858745aaaec01ef) on port 26606
Only local connections are allowed.
Feb 28, 2018 10:48:02 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
# Baidu HomePage
  ## Search   ✔ ✔ ✔auge

Successfully generated html-report to => /Users/yjshi/Documents/GaugeChromeHeadless/reports/html-report/index.html
Specifications:     1 executed      1 passed        0 failed        0 skipped
Scenarios:      1 executed      1 passed        0 failed        0 skipped

Total time taken: 3.097s

BUILD SUCCESSFUL

Total time: 7.313 secs

挂接 CI

由于现在主流的 CI 在执行 Job 时,都是在 Agent 中执行。因此在跑 Gauge 时,需要在 Agent 中做好准备工作。

准备工作 - Agent

  • 安装 Gauge 及 Java 插件
  • 安装 Chrome
  • 替换BrowserDriver目录中的 driver 为匹配的版本

跑起来

  • 将代码通过 Job 拉取到本地
  • 执行./gradlew clean gauge

注意事项

  • CI执行 Job 的用户不能用 root用户

完整代码

GaugeChromeHeadless

参考

相关文章

  • 构建Headless 的 E2E 测试

    为什么要构建 Headless 的 E2E 测试 结合上面的原因,我们还可以 Headless结合 E2E 测试,...

  • 浅析 codeceptjs

    从测试对象的粒度来说,测试分为三类:单元测试,集成测试和E2E(end to end)测试。对于E2E测试,BDD...

  • 使用Nightwatch进行E2E测试中文教程

    E2E测试 E2E(end to end)测试是指端到端测试又叫功能测试,站在用户视角,使用各种功能、各种交互,是...

  • Angular 2 E2E测试入门

    E2E测试(集成测试)是一种模拟用户行为的测试。(以demo-app首页为例) E2E测试与单元测试的区别: 单元...

  • Vue Test Utils

    test VUE中的测试 端到端的测试(E2E)黑盒测试 从UI界面的角度进行测试 E2E比较少的一般 单元测...

  • 构建前端自动化测试能力OKR

    一、可选的测试工具 单元测试 jasmine karma mocha jest e2e测试 nightwatch ...

  • Cypress前端E2E自动化测试记录

    Cypress前端E2E自动化测试记录 近期用Cypress作一个新项目的前端E2E自动化测试,对比TestCaf...

  • k8s e2e测试部署和调试

    k8s e2e测试部署和调试 下面简单描述一下e2e测试的部署。 部署k8s all in one 集群 这个国内...

  • 第一个codeceptjs测试框架

    之前的两篇文章从理论的角度分别介绍了E2E(End to End)测试的演进[1]以及E2E测试的常用工具code...

  • Puppeteer Sharp: 使用C#和Headless C

    Puppeteer 是谷歌构建的流行的Headless Chrome NodeJS API爬虫库。Puppetee...

网友评论

    本文标题:构建Headless 的 E2E 测试

    本文链接:https://www.haomeiwen.com/subject/llxaxftx.html