iOS 单元测试覆盖率统计脚本
1、首先安装 lcov
brew install lcov
安装 lcov 的同时,会安装依赖 genhtml
分析 xcode 代码覆盖率文件,并生成可视化的 html
2、工程配置
Scheme 配置
Test 选项 Code Coverage 勾选
Build settings 设置
instrument program flow = yes
generate legacy test coverage files = yes
3、开始单元测试
执行全部单元测试方法,模拟器执行测试
xcodebuild test -scheme schemeName -target targetName -destination 'platform=iOS Simulator,name=iPhone 7 Plus,OS=12.1'
4、拷贝单元测试覆盖率文件至目标文件夹
从 xcodeproj 文件获得覆盖率文件夹的绝对路径
project_setting=$(xcodebuild -showBuildSettings -scheme $scheme_name -project $projectpath -json)
echo $project_setting | jq -r '.[0].buildSettings.PROJECT_TEMP_DIR' > $outputpath/setting.txt
project_setting_out=`cat $outputpath/setting.txt`
detail_path="Debug-iphonesimulator/$scheme_name.build/Objects-normal/x86_64"
project_output_dir=$project_setting_out/$detail_path
从获得的绝对路径拷贝文件至临时文件夹
cp $project_output_dir/*.gcno $outputpath/tmp
cp $project_output_dir/*.gcda $outputpath/tmp
for file_name in ${exit_file_name[@]};do
echo $file_name
rm $outputpath/tmp/$file_name
done
echo 'output'
project_dir=$(pwd)
exit_file_name 是一个需要过滤文件的数组,不想统计覆盖率文件,可以按照 xxxx.* 放入数组
outputpath 是导出的结果文件路径,默认是在当前目录下
exit_file_name=('SV*')
outputpath='./cover_output'
5、生成可视化的覆盖率统计表
lcov -c -d $outputpath/tmp -b $project_dir -o $outputpath/coverage.info
genhtml -t 单元测试报告 $outputpath/coverage.info -o $outputpath
6、完整脚本地址及使用方法
使用方法:
按照配置之后,使用命令或者手动单元测试之后,将 report.sh 文件放入 xcodeproj 同级目录,使用如下命令获得覆盖率报告
sh report.sh -p xxx.xcodeproj -s scheme