运行 使用 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)。
我已经尝试过以下几种方法:
- 我的 .busted 文件正在设置 coverage = true、verbose = true 和 output = "gtest"(已经尝试过 utfTerminal,点击和 json)
- 尝试将 luacov 添加为我的 rockspec 文件的依赖项...构建没有失败但没有生成覆盖文件
- 我什至尝试过 运行 在没有 pongo 的情况下进行测试,直接使用 busted 但这是一个非常糟糕的选择,因为 spec.helpers 或 cjson lib 之类的东西没有设置在我的 LUAPATH
一个快速的方法是修改 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
。
我正在 Lua 中编写一些 kong 自定义插件。我正在使用 Kong 2.3.3 和 Lua 5.1.
我有一些测试用例(单元测试 + 集成测试),我 运行 使用 pongo 运行 -覆盖选项对它们进行测试。我已经安装了 luacov(还有 cluacov,都安装了 luarocks)并且我的所有测试都通过了,但是没有生成带有覆盖率数据的 luacov 文件。我不是来自 Docker 的 运行ning pongo,我已经在我的本地机器上安装并配置了它(即 Linux Ubuntu 20.04)。
我已经尝试过以下几种方法:
- 我的 .busted 文件正在设置 coverage = true、verbose = true 和 output = "gtest"(已经尝试过 utfTerminal,点击和 json)
- 尝试将 luacov 添加为我的 rockspec 文件的依赖项...构建没有失败但没有生成覆盖文件
- 我什至尝试过 运行 在没有 pongo 的情况下进行测试,直接使用 busted 但这是一个非常糟糕的选择,因为 spec.helpers 或 cjson lib 之类的东西没有设置在我的 LUAPATH
一个快速的方法是修改 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
。