Close

使用 Bitbucket Pipelines 进行集成测试的教程

Sten Pittet 头像
Sten Pittet

特约作家

了解如何通过在管道中的不同 Docker 容器运行多个服务,从而使用 Bitbucket Pipelines 运行集成测试。

测试是持续集成和持续交付的关键组成部分。而且,如果您正在尝试持续部署,那么在向客户发布变更之前,这将是抵御缺陷的最后一道防线。验证单个方法和类的单元测试是防止出现问题的良好开端,但您还需要运行集成测试,以确保应用使用的不同模块(应用服务器、数据库、缓存)能够正确交互。在本教程中,我们将了解如何通过在管道中的不同 Docker 容器运行多个服务,从而使用 Bitbucket Pipelines 运行集成测试。

时间

30 分钟

观众

持续集成和/或 Bitbucket Pipelines 的新手

先决条件

  • Bitbucket 帐户
  • 需要 Node v4.6 或更高版本来运行应用

  • Docker 社区版 v17.03 或更高版本,用于在本地计算机上运行 MongoDB

  • 执行 bash 命令的终端
  • 使用 Git 来管理存储库并推送回 Bitbucket Cloud

步骤 1:在本地运行示例应用

我们将使用一个基本 Node.js 应用,该应用可在主页上显示一条消息并记录对数据库的访问。如需专注于 Bitbucket Pipelines 配置,只需从终端克隆应用即可。

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

现在,转到本地存储库并运行 npm install 来安装应用所需的依赖项。

cd bitbucket-pipelines-services-tutorial
npm install

运行应用之前,需要启动一个新的 MongoDB 实例。通过 Docker,您可在终端上轻松完成此操作。

docker run --name mongodb -d -p 27017:27017 mongo

然后,启动应用并转到 http://localhost:3000 以查看实际运行情况。

npm start

您可以转到 http://localhost:3000/visits 来确保已将访问正确记录到数据库中。

最后,通过命令 npm test 确保在本地成功完成测试。运行该命令后,您应会看到两个测试已完成。

npm test

此示例应用正在运行两个不同的测试:

  • 一项测试是验证应用是否在主页中显示 Hello World。
  • 而另一项测试则是验证有人访问主页时,数据库中是否记录了该访问。

即使数据库关闭,第一个测试也会通过,但第二个测试是验证 Web 应用与数据库服务器是否正常交互的集成测试。它也可以理解为功能测试,因为它验证了应用的某些业务需求。您可以在我们的指南中了解有关不同类型测试的更多信息。

现在,我们将了解如何使用 Bitbucket Pipelines 自动测试应用,并将其配置为成功通过数据库完成此测试。

第 2 步:使用 Bitbucket Pipelines 自动运行测试

首先在 Bitbucket 帐户中创建一个新存储库,然后更新源的远程 URL 以指向您的 Bitbucket 存储库。

git remote add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainline

转到存储库的 Pipelines 部分以启用 Bitbucket Pipelines。

您可在下一个屏幕上使用默认的 Javascript 模板。它已包含安装依赖项和运行测试套件所需的 npm install 和 npm test 命令。

bitbucket-pipelines.yml 文件应如下所示。

image: node:16

pipelines:
  default:
    - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
              - npm test

缺少数据库服务,但我们稍后会添加。

提交文件后,您将被重定向到存储库的 Pipelines 部分,在那里您可以看到运行中的第一个管道。由于没有数据库连接,第二个测试无法正常运行,因此您的管道将失败。点击进入管道,您应会看到一个类似以下内容的屏幕,其中表明 1 个测试已通过,1 个测试已失败。

在下节中,我们将通过在 Pipelines 配置中添加新的服务定义来修复该问题。

步骤 3:为数据库添加服务定义

借助 Bitbucket Pipelines,您可在运行于某一管道的主应用之外运行多达 3 个额外的 Docker 容器。您可以使用这些容器来运行数据存储、分析工具等服务,或是您的应用完成管道可能需要的任何第三方服务。在本例中,我们将使用单独的服务容器来运行 MongoDB。

转到存储库的源部分以查看文件列表。

单击 bitbucket-pipelines.yml 配置文件以访问它。您会在右上角看到一个“编辑”按钮,通过它您可以编辑文件并直接从浏览器提交。

我们需要在配置文件末尾为我们的数据库添加一个服务定义。

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test

definitions:
  services:
    database:
      image: mongo

对于 MongoDB,我们无需在镜像定义中进行任何额外设置,但是某些数据存储和服务的 Docker 镜像可能要求您指定一些环境变量。您可以在 Bitbucket Pipelines 文档中找到数据库示例列表。

提交文件之前,您需要将新服务添加到正在执行这些测试的步骤中。最终的 Pipelines 配置应如以下代码所示。

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test
        services:
          - database

definitions:
  services:
    database:
      image: mongo

提交文件后,转到 Pipelines 部分以查看正在运行的管道。该管道通常应已成功完成。

您可以点击日志面板中的数据库选项卡来查看 MongoDB 容器的日志。

就是这样!现在,您已了解如何向管道添加服务以运行集成测试。请务必阅读相关文档,详细了解如何使用这些服务。

Sten Pittet
Sten Pittet

I've been in the software business for 10 years now in various roles from development to product management. After spending the last 5 years in Atlassian working on Developer Tools I now write about building software. Outside of work I'm sharpening my fathering skills with a wonderful toddler.


分享这篇文章
下一个主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

DevOps 社区

Devops 示意图

模拟研讨会

地图插图

免费试用

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up