在 Gitlab CI 中使用 cypress 和 django

Posted

技术标签:

【中文标题】在 Gitlab CI 中使用 cypress 和 django【英文标题】:Using cypress with django in Gitlab CI 【发布时间】:2019-07-08 17:01:47 【问题描述】:

我正在使用 Django 开发应用程序,并使用 Cypress 进行前端测试。该设置在本地工作,但我想在 gitlab-ci 上设置测试。

我已经设法让 Gitlab 运行 Cypress 测试(而应用程序在生产服务器上运行)。我想要实现(并且我正在努力实现)是让 Gitlab CI 运行 Django 应用程序(甚至可能使用 nginx/gunicorn,模仿生产环境;但嵌入式开发服务器也足够了)。

有可能吗?一次性运行服务器并让 Cypress 运行? 我已经看到了一些在 Gitlab-CI 上为 nodejs 应用程序使用 docker-compose 的示例 - 但我想避免它,因为正确设置它们(以便它使用缓存等)似乎是超级麻烦的任务。

【问题讨论】:

【参考方案1】:

我建议在纯 bash 中进行。通过& 运算符可以并行运行2个任务。

python manage.py runserver & npx cypress run 将运行 django 和 cypress,最后一个 (cypress) 的结果将是命令的最终结果。

如果您的后端需要一些时间来运行,我建议您在一段时间(例如 5 秒)后运行 cypress,python manage.py runserver & (sleep 5 && npx cypress run)

如果你想杀死后端进程,你可以通过python manage.py runserver & echo $! > backend.pid & npx cypress run将这个进程的pid保存到文件中,然后运行kill $(cat backend.pid)命令来杀死这个文件中保存的id的进程

【讨论】:

在 cypress 退出后使用 pidfile 和 kill 的技巧似乎是最合适的。还有一个问题——使用哪个 docker 基础镜像? Python 应该基于python:3,而 cypress 应该基于cypress/base:10;使用cypress/base:10 并在里面安装python3 就足够了吗? 在我看来,使用 cypress 和 python3 为 ci 目的创建 docker 容器不会有任何问题。

以上是关于在 Gitlab CI 中使用 cypress 和 django的主要内容,如果未能解决你的问题,请参考以下文章

cypress 录制视频在 gitlab-ci 中不起作用

无法使用 Gitlab CI 运行 Cypress 测试

赛普拉斯/GitLab CI/CD 集成 - 赛普拉斯不会在无头模式下启动

如何使用多个 docker 设置 Gitlab CI E2E 测试

cypress ci缺少libgtk-x11-2.0.so.0

用于 Github Actions 和 AWS 的 nextJS、MongoDB 和 Cypress 的 CI/CD [关闭]