基于busted的自定义Kong插件单元与集成测试环境搭建求助
Kong插件测试环境配置(解决
ngx全局变量nil问题) 问题描述
- 作为Lua新手,尝试用busted框架为自定义Kong 2.5.0插件编写单元/集成测试,操作流程:
- 启动Kong 2.5.0版本Docker容器
- 在容器内克隆Kong官方仓库
- 运行仓库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
相关产品推荐
相关产品推荐

