介绍
集成测试对于确保您的 Go 应用程序与数据库等外部依赖项完美配合至关重要。在本博客中,我们将探讨如何使用 GitHub Actions 设置和运行 Go 应用程序的集成测试。我们将在 CI 管道中配置 PostgreSQL 数据库,简化测试流程,并确保您的代码库在每次推送时都是可靠且可投入生产的。让我们开始吧!.
我们在上一篇文章中创建了单元测试和集成!。在本文中,我们希望对 github 存储库的所有提交运行这些测试。
Github 操作
它们是一个持续集成和持续交付 (CI/CD) 平台,可让您自动化构建、测试和部署管道。
Github Actions 允许您在存储库中发生其他事件时运行工作流程
Github 工作流程
工作流程是一个可配置的自动化流程,将运行一个或多个作业。工作流由签入存储库的 YAML 文件定义,并在存储库中的事件触发时运行。工作流程在 .github/workfows 中定义。
- 事件 是存储库中触发工作流运行的特定活动。在我们的例子中,这将推动我们的分支。
- 作业 是在同一运行器上执行的工作流程中的一组步骤。
- Runners 是一个在触发工作流时运行工作流的服务器。每个运行程序一次只能运行一项作业。
工作流程 YAML
- 第一步是创建 .github/workflows 文件夹,我们的 yaml 文件将位于其中。
- 下一步是创建 yaml 文件,在本例中我们将其命名为 ci-test.yml。
name: ci-test on: push: branches: [main] pull_request: branches: [main] env: POSTGRES_USER: postgres POSTGRES_PASSWORD: Password123 POSTGRES_DB: crud_db jobs: build: name: tests runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate - name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV - run: env - name: Make Migrations run: make migrations URL=${{ env.DB_URL }} - name: Seed test DB run: go run db/seed.go - name: Test run: make test
yaml 描述
- 第一部分是命名操作,在本例中为 ci-test。
工作流程触发器
- 第二部分描述触发器。触发操作的事件。在此文件中,我们有两个事件将触发此作业的运行,针对主分支的推送和拉取请求。这确保了用于生产的每个代码更改在合并之前都经过测试,从而保持了项目的完整性。
环境变量
Github 工作流程支持全局和特定于作业的环境变量。这些变量描述了我们稍后将在 yaml 文件中使用的 postgres 凭据。
工作
name: ci-test on: push: branches: [main] pull_request: branches: [main] env: POSTGRES_USER: postgres POSTGRES_PASSWORD: Password123 POSTGRES_DB: crud_db jobs: build: name: tests runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate - name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV - run: env - name: Make Migrations run: make migrations URL=${{ env.DB_URL }} - name: Seed test DB run: go run db/seed.go - name: Test run: make test
在这里,我们为将执行核心任务的作业分配了一个名称,这些任务正在构建和测试我们的代码。
Runner - 描述工作流程将在 Ubuntu 虚拟机上运行的位置。
服务
Github Actions 工作流程允许您定义服务。在这种情况下,我们需要一个 postgres 数据库来运行我们的测试。
- PostgreSQL 容器是使用官方 PostgreSQL Docker 镜像创建的。
- 容器配置了我们之前声明的环境变量
工作流程步骤
- 第一步是检查存储库代码
jobs: build: name: tests runs-on: ubuntu-latest
此行获取存储库的最新版本,提供对所有源文件的访问。
- 第二步是在运行器中设置 golang。
- uses: actions/checkout@v4
- 第三步是在我们的运行器上安装 dbmate。 Dbmate 是一个管理应用程序迁移的迁移工具。
- name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22"
- 第四步是构造db url
- name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate
- 第五是运行数据库迁移来设置我们的关系,该关系将与日期一起播种
- name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV
- 倒数第二个操作是使用测试数据为数据库播种。
- name: Make Migrations run: make migrations URL=${{ env.DB_URL }}
seed.go 文件用测试数据为数据集播种。设置真实的测试环境。要进一步检查此文件,请访问此处
最后阶段是使用 make 文件执行我们的 go 测试
- name: Seed test DB run: go run db/seed.go
现在,每次我们发出拉取请求或将代码推送到主分支时,此工作流程都会运行
采用 Github Action 的一些优点。
正如我们所见,github 操作允许您执行以下操作
- 自动化测试 - 在每次代码更改时一致地运行测试。
- 拥有数据库集成 - 提供真实的 postgres 环境用于测试、模拟生产条件
- 可重现的环境 - Github 操作使用容器化服务和预定义步骤来确保所有运行的结果一致。
- 快速反馈循环 - 它们使开发人员能够在出现问题时收到快速反馈,从而更快地解决问题。
- 简化协作 - 他们确保所有贡献者的更改在出现之前都得到验证,从而保持代码质量和项目稳定性
结论
通过利用 GitHub Actions,此工作流程简化了测试和数据库设置,确保了稳健可靠的软件开发。
访问 github 存储库以查看正在使用上述操作进行测试的代码。
以上是GitHub Actions 上的 Go 应用程序与 PostgreSQL 的无缝集成测试的详细内容。更多信息请关注PHP中文网其他相关文章!

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

Dreamweaver Mac版
视觉化网页开发工具

记事本++7.3.1
好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。