Expecto如何实时记录单测试状态 定位引发进程崩溃的用例
Expecto 实时输出日志定位崩溃测试用例配置方法
Expecto 默认会缓存所有测试结果,等全部测试执行完成后再统一输出,遇到会直接打崩测试进程的偶发flaky用例时,无法拿到崩溃前的执行记录,通过以下配置即可开启实时日志输出定位问题用例:
- 开启单测结果实时打印配置
将测试运行配置中的printTestCaseResultImmediately参数设为true,配置生效后每个测试用例执行结束后会立刻打印结果,不会做全局缓存。如果怀疑是并行执行触发的偶发问题,可以同时把parallel参数设为false,改成单线程顺序执行,进一步降低定位难度。
直接运行测试可执行文件的场景,配置示例:open Expecto [<EntryPoint>] let main argv = let customConfig = { defaultConfig with printTestCaseResultImmediately = true parallel = false } runTestsInAssembly customConfig argv dotnet test命令行场景额外配置
如果是通过dotnet test命令调用Expecto测试适配器执行用例,执行命令时追加详细控制台日志参数,关闭输出缓存:dotnet test --logger "console;verbosity=detailed"- 兜住进程级崩溃场景的前置日志配置
如果崩溃是段错误、非法内存访问这类Expecto全局异常捕获无法拦截的场景,可以给配置增加testCaseRun钩子,在每个用例开始执行前就打印当前用例名称,哪怕进程直接崩溃,控制台最后一行输出的就是触发故障的用例。配置示例:let customConfig = { defaultConfig with printTestCaseResultImmediately = true testCaseRun = fun testName testFunc -> printfn $"[TEST START] {testName}" testFunc() }
配置完成后重新执行测试,崩溃前控制台输出的最后一个测试用例,就是导致进程退出的flaky用例。
内容的提问来源于stack exchange,提问作者farlee2121
相关产品推荐
相关产品推荐

