如何确定Salesforce部署需运行的最少测试用例以缩短验证耗时
实现动态指定测试集的具体方案
- 第一步:在GitHub Action中获取PR的变更文件列表
在校验步骤执行前,先通过git命令提取当前PR和目标分支的所有差异文件:git diff --name-only origin/${{ github.base_ref }} HEAD > changed_files.txt - 第二步:关联变更文件对应的测试类
提前约定团队统一的测试类命名规则,比如业务Apex类对应测试类为「原类名+Test」后缀,触发器对应测试类为「触发器名+Test」后缀,写轻量脚本遍历changed_files.txt,筛选出后缀为.cls、.trigger的开发文件,按命名规则匹配出对应测试类,收集到测试列表中。 - 第三步:兜底校验避免报错
收集完测试类后做两层校验:- 逐一确认匹配到的测试类确实存在于代码库中,过滤无效项
- 如果最终有效测试类数量为0,直接兜底使用原
RunLocalTests模式,避免无测试可跑导致部署校验失败
- 第四步:拼接参数执行Salesforce CLI命令
存在有效测试类的场景下,将所有测试类用逗号拼接为字符串,替换原命令的测试等级参数即可:
其中sfdx force:source:deploy -x output/package/package.xml --testlevel=RunSpecifiedTests --runtests "${TEST_LIST}" --checkonly${TEST_LIST}为前面拼接好的逗号分隔的测试类名列表。
补充优化点
- 如果团队没有统一测试类命名规则,可以额外维护一份业务类和测试类的映射表,脚本匹配时直接查表即可
- 如果PR变更涉及的测试类数量过多,可以设置阈值,比如超过15个测试类就自动切回
RunLocalTests,避免参数过长报错 - 可以把筛选测试类的逻辑封装为独立的shell/JS脚本,后续调整规则不需要修改Action的yaml配置
- 想要更精准的测试覆盖的话,可以调用Salesforce CLI的依赖查询接口,找出所有依赖变更类的测试类,一并加入测试列表
内容的提问来源于stack exchange,提问作者Xaphy
相关产品推荐
相关产品推荐

