使用Kong Insomnia CLI和GitHub Actions进行API的CI。

412 阅读8分钟

DZone>Web Dev Zone>使用Kong Insomnia CLI和GitHub Actions进行API的CI。

使用Kong Insomnia CLI和GitHub Actions进行API的CI测试

在这篇文章中,我们将用Node.js和Express创建一个简单的服务器,使用Kong Insomnia编写API测试,然后用Inso和GitHub Actions在CI管道中运行这些测试。

Tyler Hawkins user avatar通过

邓小平

CORE -

1月31日,22 - Web Dev Zone -教程

喜欢 (2)

评论

保存

鸣叫

314次浏览

加入DZone社区,获得完整的会员体验。

免费加入

Insomnia是一个来自Kong的桌面应用程序,非常适合于构建、调试和测试后端API。虽然临时的手动测试很好,但如果将我们的API测试纳入我们的持续集成(CI)管道,那不是更好吗?有了Inso,Kong Insomnia的CLI工具,我们就可以了

Inso允许你直接从命令行运行你的自动化API测试,这意味着用GitHub Actions设置工作流是很容易的。

在这篇文章中,我们将用Node.js和Express创建一个简单的服务器,使用Kong Insomnia编写API测试,然后用InsoGitHub Actions在CI管道中运行这些测试。


演示应用程序。一个任天堂游戏数据库

我们建立了一个游戏数据库,其中包含有史以来出版的所有NES游戏的信息。这个应用是一个服务器,它实现了一个REST API的端点,以获得关于游戏、类别、开发商、发行商和发行年份的数据。

你可以在GitHub上找到完整的代码


使用Kong Insomnia进行手动测试

在开发API时,快速反馈周期有助于确保您的API以您想要的方式工作,并返回您期望的数据。Kong Insomnia是这种临时测试的完美选择。

为了开始开发我们的NES游戏API,我们在Kong Insomnia中创建了一个新的设计文档。我们将设计标签中的信息留空,然后前往调试标签,开始提出请求。下面,我们为我们的服务器提供的每个API端点提出了请求。我们可以在Kong Insomnia中运行每个请求,结果数据会显示在用户界面中。

Insomnia中的API请求示例


使用Kong Insomnia编写测试

手动点击我们的API端点对于临时测试和调试来说是很好的,但最终我们想要的是一个自动测试套件,以确保我们的应用程序的行为是正确的。Kong Insomnia允许您在桌面应用程序的测试标签中编写测试

测试是通过从Debug标签中选择一个请求,然后对服务器返回的数据进行断言而编写的。你可以运行单个测试或整个测试套件。

正如你在下面看到的,我们已经为我们的每个API端点编写了测试,在我们的测试套件中总共有11个测试。

Insomnia中的API测试

这些测试(以及我们的设计文档中的信息)可以与Git同步,并包含在我们的代码库中。这样一来,任何拥有Kong Insomnia桌面应用程序的人也可以运行这些请求和测试。

要将Kong Insomnia与Git同步,只需点击应用顶部的 "Setup Git Sync "按钮。

Insomnia中的Setup Git Sync按钮

在那里,您可以提供相关的细节,将Kong Insomnia与您项目的Git repo连接起来。

将Insomnia与您的GitHub repo连接起来

将Kong Insomnia与您的Git repo同步需要一个认证令牌。您可以在GitHub的账户设置中轻松创建一个个人访问令牌

在GitHub中创建一个个人访问令牌


用Inso从命令行运行测试

我们现在在Kong Insomnia中拥有一组请求和一套测试,帮助我们进行调试和测试。但我们还没有自动运行这些测试,所以现在让我们来做这件事。这就是Kong Insomnia的CLI,Inso,开始发挥作用的地方。

Inso可以作为一个npm包来安装,所以我们把它作为一个开发依赖添加到我们的项目中:yarn add --dev insomnia-inso

为了使运行我们的测试套件变得简单,我们已经在我们的package.json 文件中创建了一个npm脚本。下面的脚本用Inso运行我们的测试"test": "inso run test \"NES Games API Test Suite\"" 。这意味着我们可以在任何时候简单地运行yarn test ,从命令行中运行我们的测试。


将Inso与GitHub动作集成

现在是我们到目前为止所建立的一切的高潮:作为持续集成管道的一部分运行我们的自动化测试。我们可以在命令行中运行我们的测试,这很好,但现在,我们没有在任何地方自动运行它们。我们真的希望我们的测试套件能在每个新的拉动请求上运行。这样做将确保在将任何新代码合并到主分支之前测试通过。这就是最好的持续集成。

GitHub Actions允许我们使用YAML文件来配置任何我们想要的持续集成。我们创建了一个.github/workflows 目录和一个unit-tests.yml 文件。这个文件的全文转载如下。

name: NES Games API CI

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2

      - name: Use Node.js 14.x
        uses: actions/setup-node@v2
        with:
          node-version: 14.x
          cache: 'yarn'

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Start server and run unit tests
        run: yarn ci:start-and-test

正如你所看到的,我们的工作流程检查出我们当前的分支,使用Node v14,用yarn安装我们的依赖,然后运行一个自定义脚本来启动我们应用程序的服务器并运行API测试。每当代码被推送到主干分支或针对主干分支开启新的拉取请求时,这个工作流就会被触发。

这个ci:start-and-test 脚本是我们添加到package.json 文件的另一个npm脚本。使用npm包wait-onconcurrently,我们使用这个脚本来启动我们的服务器,运行API测试,然后在测试结束后杀死服务器。我们的package.json 文件中的npm脚本的完整列表转载如下。

"scripts": {
  "ci:start-and-test": "concurrently -k -s=first \"yarn start\" \"yarn ci:test\"",
  "ci:test": "wait-on http://localhost:3000 && yarn test",
  "format": "prettier --write .",
  "format-watch": "onchange . -- prettier --write {{changed}}",
  "start": "node index.js",
  "test": "inso run test \"NES Games API Test Suite\""
},

现在,我们有了一个漂亮的工作CI管道

我们可以通过在我们的 repo 中创建一个小的 pull request 来测试一切是否正常工作。提出拉动请求后,我们可以看到我们的CI管道正在运行。

在GitHub中,我们的拉动请求的CI管线正在运行

如果我们点击细节按钮查看更多信息,我们可以看到工作流程的各个步骤正在运行。

CI流水线步骤

一旦工作通过,结果就会报告给拉动请求,如下图所示。

我们的拉动请求的CI管道已经通过

我们成功了!所有检查都已通过。

为了完整起见,我们可以做的最后一件事是,在合并拉动请求之前,要求GitHub的所有检查都通过。我们可以在 GitHub 的 repo 设置中做到这一点。

要求在合并拉动请求前通过GitHub中的状态检查

如果你想探索另一种潜在的CI设置,Kong团队也有自己的工作流程范例,你可以使用他们的setup-inso GitHub Action,将Inso安装为CI管道中的工作的一部分。


总结

那么,我们今天完成了什么?事实上,有很多我们使用Node.js和Express创建了一个服务器。我们在Kong Insomnia中创建了临时请求,以帮助开发和调试我们的API。我们在Kong Insomnia中编写了测试,并学会了使用Inso从命令行中运行它们。最后,我们用GitHub Actions创建了一个CI管道,以运行我们的API测试,作为我们的 repo的每个拉动请求的一部分。

Kong Insomnia、Inso和GitHub Actions一起工作,帮助我们自信地开发我们的应用程序。我们的持续集成管道使我们准备好随时部署我们的应用程序。成功了!

为了更进一步,我们可以将这个工作流程合并到一个更广泛的战略中,以管理整个API开发生命周期--在Kong Insomnia中进行设计和开发,用Inso与我们的CI管道集成进行部署,用Kong Gateway等工具进行管理和维护。

谢谢你的阅读,并祝你编码愉快

主题。

javascript, node, api, insomnia, 持续集成, cicd, github actions, 测试自动化, api开发, kong

经Tyler Hawkins授权发表于DZone。点击这里查看原文。

DZone贡献者所表达的观点属于他们自己。

DZone上的热门文章


评论

网络开发 合作伙伴资源