命令行 与 自动化
/
[Info]=> UPR for Win: 2.17.3.0
[Info]=> Usage: UnityPerfProfiler [OPTIONS]
[Info]=> Start command line process, connect to player and forward perf data to server.
[Info]=>
[Info]=> Options:
-h, --help Show this message
-v, --version UPR for Mac
--stop Stop current test
--force-stop force stop with sessionId
-m, --captureMemory Capture memory
-c, --captureObjects Capture objects
-t, --tag[=VALUE] Add tag
-i, --instanceId=VALUE Instance id
-p, --player=VALUE Player ip
-s, --sessionId=VALUE Session id
-n, --name=VALUE The package name for test
-d, --device=VALUE The device identifier for test
--adb=VALUE Adb tool path
--dumpPath=VALUE Temp path for dumped messages
--kcp Use kcp
-u
--platform=VALUE IOS / Android
[Info]=> [Test with wifi]: ./UPRDesktop.exe -p [playerIP] -s [SessionId] (application should be opened first)
[Info]=> [Test with adb]: ./UPRDesktop.exe -p [playerIP] -s [SessionId] -n [PackageName]
//
Win UPR命令行
1. 打开Win UPR程序
UPR Windows程序也可以以命令行的方式打开 。
可以通过命令
UPRDesktop.exe -h
获取可以使用的命令行提示。
通过命令行的方式开始测试
参数 <device_ip> 为待测设备的IP地址,UPR 会通过该IP地址跟设备建立TCP连接, 需要确保UPR能够通过该IP地址连通到待测设备。 <session_id> 为通过UPR页面创建session所获取的session_id。
UPRDesktop.exe -p <device_ip> -s <session_id>
如果使用数据线连接进行测试时,需要输入测试的游戏包名。<package_name>为待测试游戏的包名,此时UPR会通过数据线连通到待测设备上,<device_ip>可以填写为待测设备IP地址,也可以填写为127.0.0.1。
更多命令行开启测试方法,请参考命令行手册
UPRDesktop.exe -p <device_ip> -s <session_id> -n <package_name>
2. 在命令行模式下,也可以使用命令行记录对象快照/内存快照/Tag。
UPRDesktop.exe -c // 记录对象快照 UPRDesktop.exe -m // 记录内存快照 UPRDesktop.exe -t // 记录Tag UPRDesktop.exe -t=<tag_name> //记录自命名的Tag UPRDesktop.exe -z // 记录Renderdoc快照,该指令只有在Renderdoc模式下生效,并且会造成卡顿,比较耗费性能。
3. 待测试结束,使用命令行结束测试
在命令行模式下,也可以使用命令行关闭UPR Windows。
该命令会将之前启动的UPRDesktop进程一并关闭。
UPRDesktop.exe --stop UPRDesktop.exe --force-stop //(调用了—stop还有帧没上传完时)可以直接强制结束而不等待没上传完的帧上传完。同UI上的Force Stop一致。 UPRDesktop.exe -s <session_id> —-force-stop // 可以直接强制已经结束但是并没有生成报告的session结束测试生成报告。
4. 测试结束,可以到UPR官网查看测试报告
Mac UPR手册
1. 下载 UPR Mac 程序。
2. 下载并安装 .net 3.0 core程序。
3. 点击「UnityPerfProfiler」程序,并获取可以使用的命令行提示。
4. 打开UPR Mac程序。
第一次使用UPR Mac时,需要给UnityPerfProfiler程序增加可执行权限。
sudo chmod +x UnityPerfProfiler
使用Lightning线测试IOS设备时,需要调用Libimobiledevice文件夹内的小工具,需要执行以下命令。
sudo spctl --master-disable
在使用Mac Silicon版本UPR时,需要给UPR以及Libimobiledevice文件夹可执行权限,以免出现 “未识别开发者“的弹框 造成无法使用的情况。
sudo xattr -r -d com.apple.quarantine * sudo xattr -r -d com.apple.quarantine libimobiledevice/*
在启动Mac UPR开始测试前,请确保被测试的游戏已经启动。
使用命令行的方式打开UPR Mac。
参数 <device_ip> 为待测设备的IP地址,UPR 会通过该IP地址跟设备建立TCP连接, 需要确保UPR能够通过该IP地址连通到待测设备。 <session_id> 为通过UPR页面创建session所获取的session_id。
./UnityPerfProfiler -p <device_ip> -s <session_id>
当使用数据线连接进行测试时,需要输入待测要应用包名。<package_name>为待测试游戏的包名,此时UPR会通过数据线连通到待测设备上,<device_ip>可以填写为待测设备IP地址,也可以填写为127.0.0.1。
./UnityPerfProfiler -p <device_ip> -s <session_id> -n <package_name>
更多命令行开启测试方法,请参考命令行手册
5. 在测试过程中,可以通过命令行记录对象快照/内存快照/Tag/RenderDoc等。
./UnityPerfProfiler -m ./UnityPerfProfiler -c ./UnityPerfProfiler -t
6. 待测试结束,使用命令行结束测试。
./UnityPerfProfiler --stop ./UnityPerfProfiler --force-stop //(调用了—stop还有帧没上传完时)可以直接强制结束而不等待没上传完的帧上传完。同UI上的Force Stop一致。 ./UnityPerfProfiler -s <session_id> —-force-stop // 可以直接强制已经结束但是并没有生成报告的session结束测试生成报告。
7. 测试结束,可以到UPR官网查看测试报告。
命令行手册
命令行解释说明
-h 或者 --help 显示命令行提示信息 -v 或者 --version 显示当前UPR Desktop版本 -s 或者 --sessionId=VALUE 在UPR网站上创建的测试的session id -p 或者 --player=VALUE 待测设备的IP地址,请确保测试设备和UPR Mac在一个局域网内 -n 或者 --name=VALUE 为待测试的应用包名 -r 或者 --renderDocPackage=VALUE 在renderdoc模式下(需为ADB模式+Android测试机),输入待测试的应用包名 --stop 结束当前UPR测试 --force-stop 直接强制结束当前测试而不等待没上传完的帧上传完 -m 或者 --captureMemory 截取内存快照 -c 或者 --captureObjects 截取对象快照 -z 或者 --captureRendering 截取Renderdoc快照,测试需要处于renderdoc模式下 -t 或者 --tag[=VALUE] 截取Tag --adb=VALUE 用于指定测试使用的adb路径,避免同其他应用产生冲突 --dumpPath=VALUE 用于指定缓存存放位置,避免默认位置硬盘空间不足 也可以通过更改文件夹内的config.xml文件内的TempPath的setting进行更改 通过--dumpPath=VALUE命令行参数传入的优先级大于config.xml文件内的TempPath的setting --platform=VALUE VALUE可以为IOS/Android 用于命令行测试情况下,通过deviceId判定Android 和IOS应用错误前提下,强行指定对应的测试平台 --kcp 用于kcp数据传输(企业版专供) -i 或者 --instanceId=VALUE 指定当前测试的instance_id,用于多机测试。如果不指定,将会按照测试顺序依次生效 -d 或者 --device=VALUE 当多台手机链接电脑时,用于指定设备的deviceId,。对于Ios设备即为对应的udid
测试模式解释说明
Wi-Fi模式: 1.在启动UPR Desktop前,请确保被测试的游戏已经启动 2.-n传入游戏包名,不是必须的,需要手动开启游戏 3.需要输入设备的IP地址,并确保测试设备和UPR Desktop在一个局域网内 ADB模式: 1.-n传入游戏包名后,解锁手机屏幕,UPR Desktop可以自动拉起待测项目 2.仅在ABD模式下,可以进入renderdoc模式(仅支持Android设备) 多机测试模式: 1.可以开启多个UPR Desktop线程,同时进行多台手机的测试 2.在启动时,可以通过-i指定当前测试的instance_id(用户自定义的名称) 3.在进行截取内存快照/Tag/Stop等操作时,需要加上具体的-i参数来对应启动的测试,否则将会按照测试顺序依次生效。例如: ./UnityPerfProfiler -i <instance_id> -m ./UnityPerfProfiler -i <instance_id> -c ./UnityPerfProfiler -i <instance_id> --stop
Desktop UPR 开启测试
*以下使用Mac UPR为例演示测试流程,Win UPR操作流程类似,在此不作过多赘述。 使用命令行的方式启动UPR Mac ./UnityPerfProfiler -p <device_ip> -s <session_id> 当使用数据线连接进行测试时(ADB),需要输入待测要应用包名 ./UnityPerfProfiler -p <device_ip> -s <session_id> -n <package_name> 当使用数据线连接进行测试时,进入renderdoc模式,需要通过-r输入待测要应用包名 ./UnityPerfProfiler -p <device_ip> -s <session_id> -r <package_name> 使用命令行的方式启动UPR Mac,开启多个UPR测试 ./UnityPerfProfiler -p <device_ip> -s <session_id> -i <instance_id>
自定义ADB连接
1. 准备
确认PC安装过ADB Tools,将手机通过USB连接线连接,打开开发者模式并且启动USB调试。
1. 执行
adb devices
指令查看移动设备是否连接成功, 如果出现如下信息则说明设备连接成功。
List of devices attached 44dd1836 device
2. 确认端口
55000
56000
23333
未被占用请确保移动设备和电脑上的 55000 56000 23333端口都没被占用。
可以通过在命令提示符或终端中执行netstat -ano | findstr <port>"
来查看端口是否被占用3. 释放被占用端口
如若端口已经被占用的情况下,由上一条指令可以看到占用端口的应用
PID
值,通过如下指令将其终止即可taskkill /pid <pid>
4. 端口映射
adb forward tcp:55000 localabstract:Unity-<package_name> adb forward tcp:56000 tcp:56000 adb forward tcp:23333 tcp:23333
样例
C:\Users\test\adb forward tcp:55000 localabstract:Unity-Unity-jp.co.unity3d.UnityChanCRS 55000 C:\Users\test\adb forward tcp:56000 tcp:56000 56000 C:\Users\test\adb forward tcp:23333 tcp:23333 23333
5. 检查端口映射
执行成功后。可以通过指令
adb forward --list
查看是否3个端口都映射成功6. Win UPR指定IP
在使用Win UPR测试过程中,请在
Choose a player
处选择Selected IP
, 并在弹出框内输入127.0.0.1
7. Mac UPR指定IP
./UnityPerfProfiler -p 127.0.0.1 -s 12345678-1234-1234-123456789123
///
UPR Open API
申请
请前往「App Key管理」页面申请,审核通过后将获得「App Id」和「App Secret」用以调用UPR Open API。
API文档
样例代码 (Python)
# -*-coding: utf-8-*-
import requests
API_ENDPOINT = 'https://upr.unity.cn/open-api'
# https://upr.unity.cn/projects
PROJECT_ID = '<PROJECT_ID>' # 请填写 ProjectId
# 前往 https://upr.unity.cn/open-api 申请UPR Open App
AUTH = (
'<APP_ID>', # 请填写项目的 App ID
'<APP_SECRET>' # 请填写项目的 App Secret
)
def main():
# 创建测试session
session_request = {
"projectId": PROJECT_ID,
"sessionName": "battle test", # 测试名称
"gameName": "demo game", # 游戏名称
"gameVersion": "0.0.1", # 游戏版本号
"packageName": "com.demo.test", # 游戏包名
"unityVersion": "2018.4", # Unity版本号
"tags": [
"tag1", "tag2", "tag3" # 测试标签(可利用测试标签定位测试区间)
],
"screenshotEnabled": True, # 屏幕截图是否开启
"screenshotFrequency": 4, # 屏幕截图频率 (单位秒)
"frameLockEnabled": True, # 游戏是否有锁帧
"frameLockFrequency": 60, # 游戏锁定帧率
"enableDeepLua": False, # 是否开启Lua Profiling代码 (需要搭配UPR Package一起使用)
"enableDeepMono": False, # 是否开启Mono C#代码Profiling (需要搭配UPR Package一起使用)
"monitor": False, # 是否需要手机UPR App性能数据 (对UPR Desktop无效)
"shareReport": True, # 是否允许Project外的人员通过sessionId直接访问报表
"gpuprofileEnabled": True, # 是否开启GPU profiling
}
resp = requests.post('%s/sessions' % API_ENDPOINT, auth=AUTH, json=session_request)
print(resp.text)
'''
[Response]
{
"SessionId": "<session_id>",
"ProjectId": "<project_id>",
"OrganizationId": "",
"SessionName": "battle test",
"GameName": "demo game",
"GameVersion": "",
"PackageName": "com.demo.test",
"UnityVersion": "2018.4",
"Tags": [
"tag1",
"tag2",
"tag3"
],
"ScreenshotEnabled": true,
"ScreenshotFrequency": 4,
"EnableDeepMono": false,
"EnableDeepLua": false,
"Monitor": false,
"GPUProfileEnabled": true,
"GPUProfileFrequency": 1000,
"FrameLockEnabled": false,
"FrameLockFrequency": 0,
"ShareReport": true
}
'''
# 更多API请详见 https://upr.unity.cn/api/swagger/index.html
/
UPR Desktop + Open API自动化测试文档
申请UPR Open API权限
请前往 “ Open API > App Key管理 ” 页面申请Open API权限。
审核通过后将获得App Id和App Secret用以调用UPR Open API。
新建测试
样例代码 (Python)
# -*-coding: utf-8-*-
import requests
API_ENDPOINT = 'https://upr.unity.cn/open-api'
# https://upr.unity.cn/projects
PROJECT_ID = '<PROJECT_ID>' # 请填写 ProjectId
# 前往 https://upr.unity.cn/open-api 申请UPR Open App
AUTH = (
'<APP_ID>', # 请填写项目的 App ID
'<APP_SECRET>' # 请填写项目的 App Secret
)
def main():
# 创建测试session
session_request = { ... }
resp = requests.post('%s/sessions' % API_ENDPOINT, auth=AUTH, json=session_request)
session_request的详细参数如下所示:
成功新建测试后的Response,如下所示:
通过返回的sessionId,使用UPR Desktop,可以以CLI的方式开始测试。
开始测试
*以下使用UPR Windows为例演示测试流程,UPR Mac操作流程类似,在此不作过多赘述。
UPR Windows程序支持以命令行的方式打开。
可以通过命令UPRDesktop.exe -h
获取可以使用的命令行提示。
UPRDesktop.exe -p <device_ip> -s <session_id>
<device_ip>为设备的IP地址,请确保测试设备和UPR Windows在一个局域网内。
使用「ADB连接」,无需保证测试设备和UPR Windows在同一局域网内。
使用ADB连接进行测试时,需要将待测设备解锁,使用数据线连接,并打开设备中的待测游戏,开始测试,链接UPR服务器。
如果使用数据线连接进行测试时,需要输入测试的游戏包名。
UPRDesktop.exe -p <device_ip> -s <session_id> -n <package_name>
<package_name>为待测试的游戏包名。
使用数据线连接进行测试时,如果输入测试的游戏包名,UPR Windows可以自动根据项目包名开启手机内的待测项目,并开始游戏。
使用ADB连接可以将处在不同网络环境下的安卓设备和电脑相连接进行测试,并改善数据传输速率,提高传输稳定性。
记录Tag、内存快照、对象快照
使用命令行记录对象快照/内存快照/Tag。
结束测试
使用命令行关闭UPR Windows。该命令会将之前启动的UPRDesktop进程一并关闭。
UPRDesktop.exe --stop
获取测试结果
测试完成后,通过UPR Open API可以获取测试结果。
成功完成测试后的测试结果,如下所示:
包括:CPUDetails、GraphicOverviewAndGraphicBatching、HotSpotData、MemoryUsage、OverviewAndCPUPerformance、ResourceDetails等信息。
获取更多信息
使用UPR Open API,可以获取更多测试详情,包括Report详情、区间报告、frame详情、函数耗时与GC的统计信息、内存快照详情、内存快照对比、对象快照、对象快照对比等等。
更多UPR Open API请详见 Swagger UI
/