4

使用 Cypress 创建测试镜像并完成 E2E 测试

 2 years ago
source link: https://guzhongren.github.io/2022/01/%E4%BD%BF%E7%94%A8cypress%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95%E9%95%9C%E5%83%8F%E5%B9%B6%E5%AE%8C%E6%88%90e2e%E6%B5%8B%E8%AF%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 Cypress 创建测试镜像并完成 E2E 测试

 2022-01-16  约 894 字   预计阅读 2 分钟 

最近在做一个 Buildkite 的 Dashboard 的项目 Powerboard,项目是托管在 GitHub 的 Git Pages 上的;项目只是一个纯前端项目,且 E2E 测试是用 Cypress 构建的;如果要进行 E2E 测试一般情况都是对着部署在 Git Pages 上的网站直接测试,而且也是这么做的😄。

这么做肯定是有问题的,产品都上线了才做测试,肯定已经迟了;如果程序有问题,那么就会影响所有用户。这种情况应该算是 P1 级别的产品事故,对用户来说简直就是灾难。应该在部署之前就应该完成 E2E 测试,如果测试通过不了,就不应该部署代码。所以测试应该前移。

由于我们的测试需要自动化,需要在 Pipeline 上执行,所以必须是一个可以独立运行的程序和 Cypress 程序同时运行,并最终返回测试结果,由 Pipeline 来决定是否终止 Pipeline 运行。

在 GitHub Actions 的 Pipeline 上同时运行程序只能依靠 docker-compose, 在这我们可以使用 Cypress 官方出品的 cypress/included, 通过编排程序来进行测试。

cypress/included

cypress/included 可以让我们挂载 cypress 的测试脚本,然后自动执行,并在最终返回 Linux 命令状态值,如 0 , 非 0 值。

Docker-compose

Docker-compose 是一套容器编排工具,可以很轻松的管理容器的启动顺序等。在本地项目搭建中非常有用,比如构建数据库,执行 shell/yaml lint 等。

构建应用镜像

在测试之前需要将应用构建好并部署好,我们可以用 Node 镜像打包应用,并利用容器的多阶段构建 (multi-stage builds) 完成应用轻量化构建,并部署在 Nginx 中。

FROM node:17-alpine as distPackage
COPY ./ /app
WORKDIR /app
RUN yarn
RUN yarn build

FROM nginx:latest
COPY --from=distPackage /app/dist /usr/share/nginx/html

编排 service

因为我们的程序需要在测试的时候就要部署好,所以我们可以利用 Docker-compose 的 build 参数,在容器启动时构建应用并部署。并在 cypress/included 启动是执行测试命令 npx cy:docker, 具体就是cross-env ENV=docker cypress run --spec 'cypress/integration/dashboard.spec.js

version: '3'
services:
  web:
    build:
      context: ./
      dockerfile: ./Dockerfile
    container_name: web
    restart: always
    ports:
      - '80:80'

  e2e:
    image: cypress/included:9.2.1
    container_name: cypress
    depends_on:
      - web
    environment:
      - CYPRESS_baseUrl=http://web
      - ENV=docker
    command: npx cy:docker
    working_dir: /e2e
    volumes:
      - ./:/e2e

这样我们就可以独立的运行起真实程序和正式的测试程序了,具体的 Pipeline 可以参考 Powerboard 的 Workflow

      - name: E2E
        run: |
          docker-compose up --build e2e

Docker-compopse 有很好的应用编排能力,可以很轻松的构建多服务程序;并在构建应用的时候可以使用多阶段构建来优化镜像大小。使用 Cypress 可以提高开发效率并可在 Pipeline 上保证程序的正确性。

Disclaimer

本文仅代表个人观点,与 Thoughtworks 公司无任何关系。


https://cdn.jsdelivr.net/gh/guzhongren/data-hosting@master/20210819/wechat.ae9zxgscqcg.png

SHA256 checksum: f2fe1394e4ab9297ed69ff73ac32e9ac1375f01c2102183b509bf9379a5995d6

/images/pay/PayForGuzhongren.svg

SHA256 checksum: 964978ecd2059064abe542e51dc02e204d3ee2e6c320ca68e2b1399ce0c6953c

使用此 文件 进行校验: gpg --verify PayForGuzhongren.svg.sig


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK