使用 Bitbucket Pipelines 进行集成测试的教程
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 容器的日志。
就是这样!现在,您已了解如何向管道添加服务以运行集成测试。请务必阅读相关文档,详细了解如何使用这些服务。
分享这篇文章
下一个主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。