使用 Pongo 为 Lua 编写的自定义 Kong API 网关插件运行测试时如何生成和显示覆盖率

问题描述

我正在用 Lua 编写一些 kong 自定义插件。我使用的是 Kong 2.3.3 和 Lua 5.1。

我有一些测试用例(单元测试 + 集成测试),我正在使用 pongo run -coverage 选项运行它们。我已经安装了 luacov(还有 cluacov,都安装了 luarocks)并且我所有的测试都通过了,但是没有生成包含覆盖数据的 luacov 文件。我没有从 Docker 运行 pongo,我已经在本地机器(Linux Ubuntu 20.04)上安装并配置了它。

我已经尝试了以下几点:

  • 我的 .busted 文件设置了coverage = true、verbose = true 和output = "gtest"(已经尝试过utfTerminal、tap 和json)
  • 尝试将 luacov 作为依赖项添加到我的 Rockspec 文件中...构建没有失败,但没有生成覆盖文件
  • 我什至尝试在没有 pongo 的情况下直接使用 busted 来运行测试,但这是一个非常糟糕的选择,因为我的 LUAPATH 中没有设置诸如 spec.helpers 或 cjson 库之类的东西

解决方法

一个快速的方法是修改 pongo

将您的 pongo.sh 文件编辑为:

  • 将覆盖标志添加到已破坏的 bytearray
  • 调用 luacov 生成报告 --coverage
  • 显示报告luacov

找到调用 busted 的地方,我的第 959 行:

cat luacov.report.out

安装"/bin/sh" "-c" "bin/busted --coverage --helper=bin/busted_helper.lua ${busted_params[*]} ${busted_files[*]};luacov;cat luacov.report.out" ,编辑luacov 安装失败后添加 luacov:

assets/Dockerfile

&& luarocks install busted-htest \ && luarocks install luacov \ 会给你

pongo run
,

可以基于pongo创建docker镜像

spec/unit/docker/Dockerfile

FROM kong-pongo-test:2.3.2
USER root
RUN luarocks install luacov
WORKDIR /kong-plugin
COPY . .

spec/unit/docker/run.sh

#!/bin/sh
busted --coverage spec/unit
luacov
cat luacov.report.out

运行

docker build -f spec/unit/docker/Dockerfile -t my-coverage .
docker run my-coverage sh spec/unit/docker/run.sh
,

Pongo 对此获得了一些支持(仍然是 PR)。请注意,它只涵盖单元测试,不包括集成测试。

https://github.com/Kong/kong-pongo/pull/184

btw: 其他答案太复杂了,你可以添加.pongo/pongo-setup.sh来安装LuaCov,并将.luacov文件从/kong-plugin移动到/kong。这应该是所有必要的。

可以通过传递标志来简单地运行具有覆盖率的测试,无需编辑 pongo 或 dockerfile。例如,试试 pongo run -- --coverage