LuaCov-Skynet
是专为Skynet
框架定制的覆盖率分析库。
该项目是 LuaCov 的扩展。其中lcov
格式的转换程序源自 luacov-reporter-lcov。
LuaCov
本身不支持多线程安全,每个actor
分别输出不同的文件。文件的后缀使用.actor.{skynet.self()}
来拼接。
覆盖率结果以lcov
格式输出,可以通过 lcov 命令合并多个actor
的结果。然后使用 diff-cover 进行增量覆盖率和页面生成。
- 克隆项目后,编译
src/fileutil.c
生成fileutil.so
库; - 使用 cluacov-skynet;
- 将
src/bin/luacov
复制到系统的任意可执行路径;
在所有需要检测覆盖率的Lua
代码开头添加:
require("luacov.tick")
只有创建$report_doing_file
文件后才会收集覆盖率数据。
覆盖率数据在内存中,通过创建文件进行跨进程通信。
指定生成原始文件的文件标识名:
-- defaults.lua
report_get_file = "luacov.report"
在项目主目录下执行以下命令:
touch luacov.report
要重置执行结果的文件标识名:
-- defaults.lua
report_reset_file = "luacov.reset"
执行以下命令自动在当前目录下生成lcov
格式的文件:
luacov -r lcov -s luacov.stats.out.actor.1
其中.actor.
是固定的,luacov.report.out
取自default.lua
的reportfile
配置。
使用以下命令合并多个actor
的lcov
文件:
lcov -a luacov.stats.out.actor.1 -a luacov.stats.out.actor.2 -o luacov.report.out.lcov
创建$report_lock_file
后,必须创建$luacov.report.reset
来重置状态。
文件监控逻辑跑在skynet
的定时器上,目前是间隔1s
,相关文件创建、删除操作保险来看要sleep 2s
以上。