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

How to generate and display coverage when running tests with Pongo for custom Kong API Gateway plugins written in Lua

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

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

我已经尝试过以下几种方法:

一个快速的方法是修改 pongo

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

  • 将覆盖标志添加到 busted --coverage
  • 调用luacov生成报告luacov
  • 显示报告cat luacov.report.out

找到调用 busted 的位置,对我来说是第 959 行:

"/bin/sh" "-c" "bin/busted --coverage --helper=bin/busted_helper.lua ${busted_params[*]} ${busted_files[*]};luacov;cat luacov.report.out"

安装 luacov,编辑 assets/Dockerfile 安装失败后添加 luacov:

    && luarocks install busted-htest \
    && luarocks install luacov \

pongo run会给你

[...]
==============================================================================
Summary
==============================================================================

File                                                                              Hits  Missed Coverage
-------------------------------------------------------------------------------------------------------
/kong-plugin/kong/plugins/myplugin/schema.lua                                     105   1      99.06%
/kong-plugin/spec/myplugin/01-schema_spec.lua                                     199   5      97.55%
[...]

您可以创建一个基于 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

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

运行 覆盖测试可以通过传递标志简单地完成,无需编辑 pongo 或 dockerfile。例如尝试 pongo run -- --coverage