如何修改Makefile测试规则,跑完所有用例后汇总错误码使make返回错误
你可以直接修改Makefile中的tests规则实现需求,修改后的规则如下:
tests: $(TSTE) @exit_code=0; \ for test in $^ ; do \ chmod +x ./$${test} ; \ ./$${test} || exit_code=1; \ done; \ exit $$exit_code
规则说明
你遇到的问题根源是shell的for循环默认只会返回最后一次迭代中最后一条命令的退出状态,哪怕中间有测试用例执行失败,只要最后一条命令执行成功,整个循环的退出码就为0,make就会判定任务执行成功。
上述修改的逻辑为:
- 循环开始前初始化状态变量
exit_code为0,代表无失败的初始状态 - 每执行一条测试用例时,若用例返回非0错误码,就将
exit_code设置为1(只要有任意用例失败,整体状态就标记为失败) - 所有测试用例执行完成后,将汇总的
exit_code作为整个shell语句的退出码返回,make会直接继承该状态作为自身的最终退出码
该方案既可以保证所有测试用例全部执行完成,又能在存在用例失败时让make返回非0错误码,满足CI/CD流水线的失败识别需求。
内容的提问来源于stack exchange,提问作者Christopher Clark
相关产品推荐
相关产品推荐

