最近在研究通过Instruments做一些性能测试,并且尽可能地自动化,其中很关键的一步便是通过命令行调用Instruments。
1.基本应用
首先查看instruments的帮忙命令:
usage: instruments [-t template] [-D document] [-l timeLimit] [-i #] [-w device] [[-p pid] | [application [-e variable value] [argument ...]]]
-t便是指定模板,这里有哪些模板,对应什么名字,我是通过模糊查找来确定的。网上有很多直接写定路径的,但每一次Xcode大改版,路径可能会发生变化,所以用模糊查找最靠谱。
查找命令如下:
find / -name *.tracetemplate
查找到各tarcetemplate路径如下(我的为Xcode 9.2):
-D 指定生成的.trace文件;
-l 指定运行时间,此处单位为ms;
-w 指定设备id(吧设备通过usb连接电脑后,设备id可通过system_profiler SPUSBDataType查看);
application 即待测试的app名,如xx.app;
-p 和 -e暂时没用到,后面了解了再补充。
如要进行网络测试,则可运行
instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Resources/templates/Leaks.tracetemplate -D test.trace -l 60000 appName.app
2.进阶应用
有时候需要同时监控好几个模板,这个时候可以导出一个自己需要的.tracetemplate文件。
a.首先打开instruments,在主界面选择需要测试的模板,如下图,通过右上角的+添加。
b.选择完所有需要的模板后,点击Instruments -> file -> Save As Template 保存,记录好保存的位置。
c.然后就可以用自己的模板进行测试啦(all.tracetemplate即步骤2中保存的)
instruments -t ~/Library/Application\ Support/Instruments/Templates/all.tracetemplate -D test.trace -w af18f18c45353435xxxxxx7704115827c5xxxxxx -l 60000 appName.app
d.测试完成后,通过test.trace文件分析数据结果。
3.运行过程中遇到的问题总结
a.运行时间过长时,报错“app died”
原因:因为运行过程中数据线不稳定,失去连接后再重新连接上就会报此错
解决办法:重插数据线,重新运行咯
b.报错“specified target process is not valid”
原因:手机上显示充电中,但instruments app中查看设备是灰的,所以还是因为设备没连接好
解决办法:重新连设备,保证instruments app中看到的设备是可选的
c.报错“Instruments Usage Error: Failed to resolve target for Instrument xxx”
原因:通过命令行调用时没指定测试app
解决办法:指定即可,加上xx.app
后续深入了解后继续补充。