You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于busted的自定义Kong插件单元与集成测试环境搭建求助

Kong插件测试环境配置(解决ngx全局变量nil问题)

问题描述

  • 作为Lua新手,尝试用busted框架为自定义Kong 2.5.0插件编写单元/集成测试,操作流程:
    1. 启动Kong 2.5.0版本Docker容器
    2. 在容器内克隆Kong官方仓库
    3. 运行仓库spec目录下的测试时,触发错误:./kong/tools/utils.lua:37: attempt to index global 'ngx' (a nil value)
  • 参考Kong官方测试文档但环境搭建遇到阻碍,需要配置可正常运行测试的Docker容器

问题根因

Kong的代码依赖OpenResty专属的ngx全局变量,普通Lua环境下没有这个变量,直接跑busted测试会因为缺失上下文报错。

解决方案:配置Docker测试环境

1. 用官方预配置测试镜像(最省心)

官方提供了已经搭好测试环境的镜像,直接用就行:

# 拉取Kong 2.5.0测试镜像
docker pull kong:2.5.0-centos

# 启动交互式容器
docker run -it --rm kong:2.5.0-centos /bin/bash

2. 基础镜像手动配置(如果需要自定义)

如果用基础Kong镜像,手动安装依赖:

# 安装Lua包管理器LuaRocks
yum install -y luarocks

# 安装busted测试框架
luarocks install busted

# 安装Kong测试依赖
luarocks install kong-2.5.0-0.rockspec --server=https://kong.bintray.com/public

3. 正确运行测试

不能直接用普通busted命令,得在OpenResty环境下执行:

# 进入Kong仓库目录
cd kong

# 跑全量测试
make test

# 单独跑自定义插件的测试文件
busted --lua-path="./kong/?.lua;./spec/?.lua" --env=resty spec/your-custom-plugin/

4. 自定义插件测试额外配置

  • 启动容器时挂载本地插件目录到Kong插件路径:
docker run -it --rm -v /本地插件路径:/usr/local/share/lua/5.1/kong/plugins/your-plugin kong:2.5.0-centos /bin/bash
  • 在测试spec文件开头加载Kong测试辅助模块,自动模拟ngx环境:
local helpers = require "spec.helpers"

describe("你的自定义插件", function()
  setup(function()
    helpers.get_db_utils()
    helpers.prepare_prefix()
  end)

  teardown(function()
    helpers.clean_prefix()
  end)

  it("应该完成某个功能", function()
    -- 测试逻辑代码
  end)
end)

内容的提问来源于stack exchange,提问作者Ashay Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:31:03