集成测试对于确保您的 Go 应用程序与数据库等外部依赖项完美配合至关重要。在本博客中,我们将探讨如何使用 GitHub Actions 设置和运行 Go 应用程序的集成测试。我们将在 CI 管道中配置 PostgreSQL 数据库,简化测试流程,并确保您的代码库在每次推送时都是可靠且可投入生产的。让我们开始吧!.
我们在上一篇文章中创建了单元测试和集成!。在本文中,我们希望对 github 存储库的所有提交运行这些测试。
它们是一个持续集成和持续交付 (CI/CD) 平台,可让您自动化构建、测试和部署管道。
Github Actions 允许您在存储库中发生其他事件时运行工作流程
工作流程是一个可配置的自动化流程,将运行一个或多个作业。工作流由签入存储库的 YAML 文件定义,并在存储库中的事件触发时运行。工作流程在 .github/workfows 中定义。
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
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 数据库来运行我们的测试。
jobs: build: name: tests runs-on: ubuntu-latest
此行获取存储库的最新版本,提供对所有源文件的访问。
- 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
- 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 操作允许您执行以下操作
通过利用 GitHub Actions,此工作流程简化了测试和数据库设置,确保了稳健可靠的软件开发。
访问 github 存储库以查看正在使用上述操作进行测试的代码。
以上是GitHub Actions 上的 Go 应用程序与 PostgreSQL 的无缝集成测试的详细内容。更多信息请关注PHP中文网其他相关文章!