GCloudSDK2.1.0测试结论

云挂机  时间:2021-02-20  阅读:()

"GCloudSDK测试报告""测试版本号","GCloudSDK2.
1.
0""测试结论","测试通过""报告人及主要测试同学","zeyiweng、ellyjia、uwellpeng、zaidli、v_huixhu、v_qlpeng""测试完成时间",44146,"组件详情""SDK版本更新情况","组件名称","是否统一版本","更新情况","是否支持去腾讯化","更新情况","APM是","无更新","是","首次合入","GameBot是","无更新","是","首次合入","GCloudCore是","合入更新","是","首次合入","GCloud是","合入更新","是","首次合入","GEM是","无更新","是","首次合入","GPM","是","合入更新","是","首次合入","GVoice是","无更新","是","首次合入","HttpDNS是","无更新","否","Midas","否.
分国内/海外/Garena三个版本","无更新","是","首次合入","MSDK","否.
包含多个子组件","无更新","是","首次合入","TDM是","无更新","是","首次合入","TGPA是","无更新","否","TssSDK否.
分国内/海外版本","合入更新","是","合入更新""具体测试项""编译构建","构建设备","构建平台","构建流水线","覆盖的Unity/UE版本详情","测试结论","Mac","Android","OneSDK_集成构建国内OneSDK_集成构建去腾讯化","Unity5.
x、Unity2017、Unity2018、Unity2019、UE4.
18、UE4.
21、UE4.
22、UE4.
23、UE4.
24、UE4.
25","测试通过",,"iOS","OneSDK_集成构建国内OneSDK_集成构建去腾讯化","Unity5.
x、Unity2017、Unity2018、Unity2019、UE4.
18、UE4.
21、UE4.
22、UE4.
23、UE4.
24、UE4.
25","测试通过","Windows","Windows","OneSDK_集成构建国内OneSDK_集成构建去腾讯化","Unity2018、UE4.
24","测试通过",,"PS4","IOneSDK_集成构建主机:http://devops.
oa.
com/console/pipeline/gcloudsdk/p-57f29f949f83478da72c9e76ff9942f2/history,,"XboxOne","IOneSDK_集成构建主机:http://devops.
oa.
com/console/pipeline/gcloudsdk/p-57f29f949f83478da72c9e76ff9942f2/history,,"Switch","IOneSDK_集成构建主机:http://devops.
oa.
com/console/pipeline/gcloudsdk/p-57f29f949f83478da72c9e76ff9942f2/history"预审","包含组件","构建平台","构建流水线","覆盖的Unity/UE版本详情","测试结论","APM、GameBot、GCloudCore、GCloud、GEM、GPM、GVoice、MSDK、TDM、TssSDK","Android","OneSDK_苹果预审","Unity2018/UE4.
22","测试通过.

详见Unity-iOS预审报告:https://wetest.
qq.
com/ios/Report/testid=b9bba9613d8c41375a8ea3e5d0ea3f84&mm=f11ae154a1ba087e866e1e43b8421744UE-iOS预审报告:https://wetest.
qq.
com/ios/Report/testid=2c8cfa47507f1020a2a7c2ae0218e05d&mm=aba564ed3e725165bcce97d9133e41c2","APM、GameBot、GCloudCore、GCloud、GEM、GPM、GVoice、MSDK、TDM、TssSDK","iOS","暂无(手动出包)","Unity2018","测试通过""功能测试","测试说明","测试设备",,"测试用例","测试结论","本次测试对版本进行了约700条集成测试用例的全量测试.
","Android:GooglePixel3(Android11)、华为Mate10(Android10)、华为P30(Android9)、OPPOA9X(Android9)、OPPOR11plus(Android9)、vivoX21(Android9)、努比亚Z20(Android9)vivoX9sL(Android8.
1)、华为荣耀V9(Android7)、vivoX9Plus(Android7.
1.
2)、OPPOA77(Android7.
1.
1)、小米5(Android7)、一加3(Android7.
1.
1)、小米Note2(Android7)、华为荣耀V8(Android6)、vivoY55(Android6.
0.
1)、摩托罗拉x(x+1)(Android5)、努比亚大牛3Z7(Android4.
4)、腾讯手游助手(Android7.
1.
2)iOS:iPhone7(iOS14.
0)、iPhone7(iOS13.
4)、iPhone6s(iOS12.
4.
1)、iPhone7(iOS12.
3.
1)、iPhone7Plus(iOS12.
1.
1)、iPhone6s(iOS11.
4.
1)、iPhone8(iOS11.
4)、iPhone7(iOS10.
3.
2)、iPhone6(iOS10.
0Beta)、iPhone6Plus(iOS9.
3.
1)",,"详见","测试通过""兼容性测试","测试说明","兼容性机型",,,"测试结论","兼容性测试覆盖了如下引擎包:(1)UE4.
23apk要求Androidapilevel不低于17(2)UE4.
23ipa安装要求iOSversion不低于11.
0覆盖范围:TOP100兼容性测试","详见",,,"测试通过""性能测试","测试说明",,,,"测试结论","详见",,,,"详见"安全测试","测试说明",,,,"测试结论","无",,,,"无""弱网测试","测试说明",,,,"测试结论","弱网络测试:本次测试在弱网络环境下进行了基本功能的验证",,,,"GCloud组件详见"总体质量情况""总体质量情况","遗留缺陷数量","遗留缺陷详情项",,,"遗留缺陷评估",7,"【【Tss-Ano】检查SDK已合入了TPAno(可测),测试demo启动搜索日志"comParams"里面没有列出TP的sdkversion】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083027229",,,"对于安全去腾讯化SDK整体功能无影响",,"【【MSDK-Ano】Twitter登录失败,返回Ret:401】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083036007",,,"因开发者账号失效导致无法登陆,不使用Twitter渠道就无影响",,"【【Dolphin-Ano】兼容性测试ApkUpdate偶现崩溃上报ApkUpdateAction.
cpp,麻烦开发帮忙看一下】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083127119",,,"只要不要多实例使用dolphin就无影响",,"【【TDM-Ano】兼容性测试运行自动化发现一例崩溃上报(TDM_Curl_clone_primary_ssl_config),麻烦帮忙确认一下】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083127405",,,"偶现1例,curl网络库问题,非本次修改引入,对本次版本发布无影响",,"【【GRobot-Ano】Android华为荣耀设备偶现一例崩溃】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083135405",,,"特殊机型偶现,非本次修改引入,暂无影响",,"【【Connector-Ano】去腾讯化版本,在腾讯手游助手模拟器上,read有异常.
】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083232223",,,"根据测试结果,仅影响去腾讯化版本Androidx86设备/模拟器",,"【【Dolphin】Unity&UE获取版本信息newVersinInfo中的needDownloadSize不一致】http://tapd.
oa.
com/GcloudSDK/bugtrace/bugs/viewbug_id=1020378512083244819",,,"无影响""其他补充说明""其他补充说明","无"集成测试用例"用例名称","用例描述","前提条件","操作步骤","期待结果","自动化情况","用例级别","是否集成用例","是否兼容用例","备注""Dolphin-程序更新"用例集",,"Dolphin(程序更新),初始化成功再更新--预发布","初始化成功再更新--预发布,程序更新成功","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】","Android端程序更新成功;iOS端拉起AppStore不会更新版本,返回demo,日志打印版本信息","已自动化","P0","是","是",""/"在操作步骤中表示"或者"PC端暂不支持程序更新""Dolphin(程序更新),更新过程中取消再继续更新","更新过程中取消再继续更新,Android端程序更新成功,iOS端拉起AppStore,日志打印版本信息","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】3.
更新过程中点击【CancelUpdate】4.
再点击【Update】","Android端程序更新成功;iOS端拉起AppStore不会更新版本,返回demo,日志打印版本信息","待自动化","P0","是","否","Dolphin(程序更新),Install拉起程序安装","Install拉起程序安装,Android端程序安装成功,iOS端不会拉起程序安装,拉起AppStore,日志打印版本信息","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】3.
点击InstallApk","Android端拉起Apk安装界面,点击允许安装,程序安装成功iOS端拉起AppStore不会更新版本,返回demo,日志打印版本信息(InstallApk按钮置灰不能操作)","无法自动化","P0","是","是","Dolphin(程序更新),更新完成后再次更新(二次更新)","更新完成后再次更新(二次更新),Android端程序更新成功,iOS端拉起AppStore,日志打印版本信息","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】3.
更新完成后4.
再点击【Update】","Android端程序更新成功(第一次成功更新,第二次如果没有先清理掉文件,不会重复更新;iOS端拉起AppStore不会更新版本,返回demo,日志打印版本信息","已自动化","P1","是","否","Dolphin(程序更新),更新过程中,杀掉进程再重新更新","更新过程中,杀掉进程再重新更新,Android端程序更新成功,iOS端拉起AppStore,日志打印版本信息","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】3.
更新过程中杀掉进程,启动demo4.
再点击【Update】","Android端程序更新成功;iOS端拉起AppStore不会更新版本,返回demo,日志打印版本信息","无法自动化","P1","是","否","Dolphin(程序更新),单APK打包模式下首包解压","单APK打包模式下首包解压,首包解压成功","配置:使用默认的","1.
选择【AppUpdate】,勾选【FirstExtract】2.
点击【Update】","首包解压成功,日志打印:onFirstExtract:success首包存放在程序包目录下","已自动化","P0","是","是","Dolphin(程序更新),AppUpdate--灰度更新","AppUpdate--灰度更新,拉取到灰度版本,更新成功","配置:使用默认的","1.
选择【AppUpdate】,勾选【Gray】2.
点击【Update】","拉取到灰度版本,更新成功","已自动化","P0","是","是","Dolphin(程序更新),检查更新下来数据的完整性","检查更新下来数据的完整性,检查更新下来程序的数据和管理端配置的程序的数据一致","配置:使用默认的","1.
选择【AppUpdate】2.
点击【Update】","1.
程序更新成功2.
检查更新下来程序的数据和管理端配置的程序的数据一致","待自动化","P1","是","否","Dolphin-资源更新"用例集",,"Dolphin(资源更新),初始化成功再更新--预发布","初始化成功再更新--预发布,资源更新成功","配置:使用默认的","1.
下拉框选择【SrcUpdate】2.
点击【Update】","资源更新成功,界面日志打印>>OnNoticeUpdateSuccess/OnDolphinSuccess","已自动化","P0","是","是",""/"在操作步骤中表示"或者"""Dolphin(资源更新),初始化成功再更新-正式","初始化成功再更新-正式,资源更新成功","配置:使用默认的","1.
下拉框选择【SrcUpdate】2.
点击【Update】","资源更新成功,界面日志打印>>OnNoticeUpdateSuccess/OnDolphinSuccess","已自动化","P0","是","是","Dolphin(资源更新),更新过程中取消再更新","更新过程中取消再更新,资源更新成功","配置:使用默认的","1.
下拉框选择【SrcUpdate】2.
点击【Update】3.
更新过程中取消再继续","资源更新成功,界面日志打印UpdateSuccess!
/dolphinSuccess","待自动化","P0","是","否","Dolphin(资源更新),弱网更新","弱网更新","弱网分别配置丢包、带宽、延时、延时抖动等参数测试","1.
输入前提条件配置2.
下拉框选择【SrcUpdate】3.
点击【Update】","1.
查看程序更新是否成功2.
查看是否会大量报713错误3.
如果是错误码为716,查看网络探测劫持数据上报是否成功","无法自动化","P1","是","否","弱网下资源更新&弱网场景详见:http://tapd.
oa.
com/CROS_component_test/prong/stories/view/1020417881855557609""Dolphin(资源更新),灰度更新","灰度更新,更新成功,更新到灰度版本","控制台:http://console.
gcloud.
oa.
com/dolphinsvr/channel/713704403配置:使用默认的","1.
输入前提条件配置2.
下拉框选择【SrcUpdate】,勾选【Gray】3.
点击【Update】","资源更新成功,更新到灰度版本","已自动化","P0","是","是","Dolphin(资源更新),检查更新下来的数据的完整性","检查更新下来的数据的完整性,更新成功,检查更新下来的资源是否和管理端配置的资源一样","控制台:http://console.
gcloud.
oa.
com/dolphinsvr/channel/713704403配置:使用默认的","1.
输入前提条件配置2.
下拉框选择【SrcUpdate】3.
点击【Update】","1.
资源更新成功2.
检查更新下来的资源是否和管理端配置的资源一样","待自动化","P1","是","否","Dolphin-首包解压"用例集",,"Dolphin首包解压—无配置首包,单独全解压","无配置首包,进行单独全解压",,"1.

勾选【FirstExtract】2.
下拉框选择【First_Extract_All】3.
点击【Update】","正常报错,无法更新","已自动化","P2","是","否","PC端不支持首包解压每执行一条用例前先清除整个Dolphin缓存目录文件或应用数据(特别说明的用例除外)""Dolphin首包解压—有配置首包,单独全解压","有配置首包,进行单独全解压","有配置首包","1.

勾选【FirstExtract】2.
下拉框选择【First_Extract_All】3.
点击【Update】","1.
将首包的资源全部解压到指定目录","已自动化","P1","是","否","Dolphin首包解压—无配置首包,单独部分解压","无配置首包,进行单独部分解压",,"1.

勾选【FirstExtract】2.
下拉框选择【First_Extract_Part】3.
点击【Update】","正常报错","已自动化","P2","是","否","Dolphin首包解压—单独部分解压","有配置首包,传入单独解压的文件目录的路径(需要考虑只写root目录的情况)进行部分解压","1.
有配置首包","1.
勾选【FirstExtract】2.
下拉框选择【First_Extract_Part】3.
点击【Update】","1.
将首包的资源全部解压到指定目录","已自动化","P1","是","否","Dolphin首包解压—单独部分解压,校验文件分隔符","有配置首包,传入多个文件夹路径,校验文件分隔符,进行单独部分解压","1.
有配置首包","1.
校验支持"三种分隔符2.
校验其它符号","1.
将首包的资源全部解压到指定目录2.
不能识别、会忽略","已自动化","P2","是","否","Dolphin首包解压—单独部分解压,传入错误的文件夹路径","有配置首包,多个文件夹路径,含有部分错误文件夹路径,进行单独部分解压","1.
有配置首包","传入错误的文件夹路径","无异常不报错,直接忽略","已自动化","P2","是","否","Dolphin首包解压—单独部分解压,传入全部错误的文件夹路径","有配置首包,多个文件夹路径,文件夹路径全部错误,进行单独部分解压","1.
有配置首包","传入全部错误的文件夹路径","直接解压成功","已自动化","P2","是","否","Dolphin首包解压—单独部分解压,传入有重复包含文件夹路径","有配置首包,多个文件夹路径,文件夹路径有重复包含的情况,进行单独部分解压","1.
有配置首包","传入有重复包含文件夹路径","正确解压","已自动化","P2","是","否","Dolphin首包解压—无配置首包,单独解压修复","无配置首包,进行单独部分解压",,"1.

勾选【FirstExtract】2.
下拉框选择【First_Extract_Fix】3.
点击【Update】","正常报错","待自动化","P2","是","否","PC端不支持""Dolphin首包解压—有配置首包,之前采用首包全部解压模式,单独解压修复","之前采用首包全部解压模式,进行单独部分解压","1.
有配置首包","1.
勾选【FirstExtract】2.
下拉框选择【First_Extract_All】3.
点击【Update】4.
下拉框选择【First_Extract_Fix】5.
点击【Update】","不会对C中文件做任何更改","待自动化","P1","是","否","Dolphin首包解压—有配置首包,之前采用首包部分解压模式,单独解压修复","之前采用首包部分解压模式,进行单独解压修复","1.
有配置首包2.
已经进行过一次全解压或部分解压的资源更新","1.
勾选【FirstExtract】,勾选【CopyIfsResJson】2.
下拉框选择【First_Extract_Part】3.
点击【Update】4.
下拉框选择【First_Extract_Fix】5.
点击【Update】","首包中没有更新过的资源文件会被全量解压到资源目录,C=B+A3+(A-A3)","待自动化","P1","是","否","Dolphin首包解压—有配置首包,之前采用首包不解压模式,单独解压修复","之前采用首包不解压模式,进行单独解压修复","1.
有配置首包2.
已经进行过一次全解压或部分解压的资源更新","1.
勾选【CopyIfsresJson】,点击【Update】2.
下拉框选择【First_Extract_Fix】3.
点击【Update】","首包中没有更新过的资源文件会被全量解压到资源目录,C=B+A3+(A-A3)","待自动化","P1","是","否","Dolphin-Ifs读取"用例集",,"初始化接口","各种参数单独校验各种组合情况下校验","参数:ifs文件路径:ifsPathifs文件名:ifsName",,"各种参数单独校验各种组合情况下校验初始化都正常","已自动化","P1","是","否","ifs直接读取--获取文件id—指定存在文件",,"初始化成功","1.
点击【InitIFSData】2.
点击【GetFileid】","期待结果:返回有效ID","已自动化","P2","是","否","ifs直接读取--获取文件id—指定错误文件名",,"初始化成功","1.
点击【InitIFSData】2.
点击【GetFileid】","期待结果:返回无效ID,-1","已自动化","P2","是","否","ifs直接读取--获取文件名—输入有效文件ID",,"初始化成功","1.
点击【InitIFSData】2.
点击【GetFileName】","期待:返回正确文件名","已自动化","P2","是","否","ifs直接读取--获取文件名—指定错误文件ID","获取无效文件名","初始化成功","1.

点击【InitIFSData】2.
点击【GetFileName】","期待:返回空","已自动化","P2","是","否","ifs直接读取--获取文件大小—有效文件ID","获取有效文件大小","初始化成功",,"期待:返回正确文件大小,具体数值需要关注下","已自动化","P2","是","否","ifs直接读取--获取文件大小—传入无效文件ID","获取无效文件大小","初始化成功",,"期待:返回0","已自动化","P2","是","否","ifs直接读取--判断是否为目录—传入目录ID","判断传入目录的ID","初始化成功","1.

点击【InitIFSData】2.
点击【IsDirectory】","期待:返回true","已自动化","P2","是","否","ifs直接读取--判断是否为目录—传入文件ID","判断传入文件的ID","初始化成功","1.

点击【InitIFSData】2.
点击【IsDirectory】","期待:返回false","已自动化","P2","是","否","ifs直接读取--判断是否为目录—传入无效ID","判断传入无效ID","初始化成功","1.

点击【InitIFSData】2.
点击【IsDirectory】","期待:返回false","已自动化","P2","是","否","判断文件是否为最新IsFileNewestInIFS","此接口暂未实现","初始化成功",,"期待结果:能正确返回结果",,"P2","是","否","ifs资源读取—正常读取","传入正确参数:文件ID、偏移量、buff大小、读取长度","初始化成功","ifs资源读取对应测试demo中的IFSRead按钮","期待结果:资源读取成功","已自动化","P0","是","否","ifs资源读取—传入错误文件ID","错误的文件ID检查","初始化成功",,"期待:返回false","已自动化","P2","是","否","ifs资源读取4","偏移量为0检查","初始化成功,有效文件ID",,"期待:返回true且资源读取成功","已自动化","P2","是","否","ifs资源读取5","偏移量过大检查","初始化成功,有效文件ID",,"期待:返回true,buffer为空","已自动化","P2","是","否","ifs资源读取6","偏移量适当检查","初始化成功,有效文件ID",,"期待:返回true且资源读取成功","已自动化","P1","是","否","ifs资源读取7","buffer小于读取长度","初始化成功,有效文件ID,偏移值为0",,"期待:返回true,只读取buff的大小","已自动化","P2","是","否","ifs资源读取8","buffer大于读取长度","初始化成功,有效文件ID,偏移值为0",,"期待:返回true且资源读取成功","已自动化","P1","是","否","ifs资源读取9","buffer等于读取长度","初始化成功,有效文件ID,偏移值为0",,"期待:返回true且资源读取成功","已自动化","P1","是","否","ifs资源读取10","读取长度-大于(文件长度-偏移量)","初始化成功,有效文件ID",,"期待:返回true,只读取(文件长度-偏移量)","已自动化","P2","是","否","ifs资源读取11","读取长度-等于(文件长度-偏移量)","初始化成功,有效文件ID",,"期待:返回true且资源读取成功","已自动化","P1","是","否","ifs资源读取12","读取长度-小于(文件长度-偏移量)","初始化成功,有效文件ID",,"期待:返回true且资源读取成功","已自动化","P1","是","否","ifs资源读取14","分多次读取完一个文件到buffer","初始化成功,有效文件ID",,"期待:读取文件成功","已自动化","P2","是","否","初始化失败-ifs读取","初始化失败-ifs各接口调用失败","初始化失败","1.

点击【InitIFSData】2.
点击【IFSRead】","期待:接口读取失败,正常报错,不崩溃","已自动化","P2","是","否","GetLastError接口","当前在任意时间任意操作中,遍历传入参数所有情况,调用此接口,错误码待开发重新修改",,,"期待:返回正确错误码","已自动化","P2","是","否","目前此接口返回错误码不大好用.
自动化只做接口调用测试""Dolphin-获取Normal等属性"用例集",,"Dolphin(getChannelConfig和getRegionid成员),Dolphin初始化,UpdateInitInfo中getChannelConfig=true,getRegionid=true","Dolphin初始化,UpdateInitInfo中getChannelConfig=true,getRegionid=true;回调中返回ChannelConfig和RegionID相关信息,ChannelConfig与控制台一致,RegionID与服务器一致",,"1.
勾选【getChannelConfig】,勾选【getRegionid】;2.
点击【Update】","初始化成功,OnNoticeServerCfgInfo回调中返回ChannelConfig和RegionID相关信息,ChannelConfig与控制台一致,RegionID与服务器一致.
","无法自动化","P1","是",,"集成测试时有OnNoticeServerCfgInfo回调即可""Dolphin-资源修复"用例集",,"[202003新增用例]需求单等内容记录","【Dolphin】资源修复支持散资源模式http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512857166461url_cache_key=fc90e1d2ad60253b62016a6beda040b9&action_entry_type=stories","app中有散资源a,b,c,d,e,f,g,不勾选【首包解压】","散资源修复主要是对首包不解压的情况的一种扩展,原本的首包不解压,存在app内部的是一个ifs压缩包,而散资源顾名思义,资源以原本零散的形式存在于app中,在这样的模式下,支持资源修复的一种方案.
","原本:App:(a,b,c,d,e,f,g)假设括号包围表示一个ifs.
sdcard:b1,c1(b1,c1为b,c的新版本文件),这种情况下,要是b1,c1被删除或者被修改,启动修复之后要把b1,c1修复回来,同时不能下载其他文件比如a,d,e,f,g.

散资源:App:a,b,c,d,e,f,g.
sdcard:b1,c1,这种情况下,要是b1,c1被删除或者被修改,启动修复之后要把b1,c1修复回来,同时不能下载其他文件比如a,d,e,f,g.

测试只要修改资源在app中的存在形式,验收标准就是修复该修复的,不重复下载已有的文件.
",,,"测试说明",,"注意:第一次资源更新或在第一次散资源修复需要点击【CopyIfsResJson】Button""Dolphin(资源更新),app中仅有散资源无首包,进行资源更新","仅散资源,进行资源更新资源更新成功","1.
app中有散资源+首包2.
配置:url:pre-download.
6.
713704403.
tc.
gcloudgbs.
comchannelid:1000036版本号:5.
0.
0.
0资源号:0.
0.
0.
0","1.
选择相应前置条件2.
右上角下拉框选择【SrcUpdate】3.
点击【Update】","资源更新成功界面日志打印UpdateSuccess!
/dolphinSuccess","待自动化","P0","是",,"Dolphin(散资源修复),当前已更新资源文件,删除散资源文件,修复资源","当前已更新资源文件,删除sdcard上散资源文件,修复资源,资源修复成功","1.
当前sdcard上已更新散资源文件b1、c12.
配置:url:pre-download.
6.
713704403.
tc.
gcloudgbs.
comchannelid:1000036版本号:5.
0.
0.
0资源号:0.
0.
0.
0","1.
输入前提条件的配置2.
当前已更新散资源文件,删除sdcard上的b1、c13.
右上角下拉框选择【SourceCheckAndSync_Scatter】4.
点击【Update】","b1、c1散资源修复成功;其他资源未被重新下载界面日志打印UpdateSuccess!
/OnDolphinSuccess","待自动化","P0","是",,"Dolphin(散资源修复),当前已更新资源文件,修改散资源文件,修复资源","当前已更新资源文件,修改sdcard上散资源文件,修复资源资源修复成功","1.
当前sdcard上已更新散资源文件b1、c12.
配置:url:pre-download.
6.
713704403.
tc.
gcloudgbs.
comchannelid:1000036版本号:5.
0.
0.
0资源号:0.
0.
0.
0","1.
输入前提条件的配置2.
当前已更新资源文件,修改sdcard上的散资源文件b1、c13.
右上角下拉框选择【SourceCheckAndSync_Scatter】4.
点击【Update】","b1、c1散资源修复成功;其他资源未被重新下载界面日志打印UpdateSuccess!
/OnDolphinSuccess","待自动化","P0","是",,"Dolphin部分资源解压的资源修复——首包部分解压后,直接进行首包部分解压的资源修复","首包部分解压后,直接进行首包部分解压的资源修复","首包中解压资源集合为A,不解压资源集合为B","1.

勾选【FirstExtract】2.
下拉框选择【First_Extract_Part】3.
点击【Update】4.
下拉框勾选【SourceCheckAndSync_Part】7.
点击【Update】","对比控制台资源修复的资源版本,A仅被改变部分会更新,B不更新","待自动化","P1","是","否","Dolphin首包部分解压的资源更新——与拷贝.
res和filelist.
json文件无关,与控制台相关","首包部分解压的资源更新——无论拷贝.
res和filelist.
json文件都没关系首包解压资源为A,控制台为A'+B","1、.
res和.
filelist.
json文件内容正确","1.

勾选【FirstExtract】2.
下拉框勾选【FirstExtract_Part】3.
点击【Update】4.
下拉框勾选【SourceUpdate】5.
勾选跟不勾选【CopyifsResJson】两种情况6.
点击【Update】","1、更新下载B资源2、若A'不等于A,就会将A更新到A'","待自动化","P1","是","否","Dolphin首包不解压的资源更新——拷贝.
res和filelist.
json文件","首包不解压的资源更新——拷贝.
res和filelist.
json文件首包资源为A,控制台为A'+B","1、.
res和.
filelist.
json文件内容正确","1.
【CopyifsResJson】2.
下拉框勾选【SourceUpdate】3.
点击【Update】","1、更新下载B资源.
2、若A'不等于A,就会将A更新到A'","待自动化","P1","是","否","Dolphin首包不解压的资源修复——首包不解压,不拷贝文件,直接进行首包部分解压的资源修复","首包不解压,不拷贝文件,直接进行首包部分解压的资源修复","1、.
res和.
filelist.
json文件内容正确","1、下拉框勾选【SourceCheckAndSync_full】2、点击【Update】","全量资源修复","待自动化","P1","是","否","Dolphin(资源修复),当前已更新资源文件,删改资源文件,修复资源","当前已更新资源文件,删改资源文件,修复资源资源修复成功","1.
当前已更新资源文件配置:url:pre-download.
2.
507753088.
gcloudcstest.
comchannelid:84536gamekey:5b7b9b3fb8ed4b97a5192f2e9718f5ed版本号:3.
0.
0.
0资源号:0.
0.
0.
0","1.
输入前提条件的配置2.
当前已更新资源文件,删改资源文件3.
右上角下拉框选择SourceCheckAndSync/srccheck4.
点击update/StartTest/download","资源修复成功log示例如下:Unity:>>OnNoticeNewVersionInfo获取新版本:3.
0.
0.
1,预计最多下载大小:0MB,updateType:UpdateType_SourceCheckAndSync>>OnNoticeUpdateSuccess!
UE4:>>OnDolphinProgresscurStage:src-updateanalysediff,Progress:0.
498656>>DolphinOnDolphinVersionInfo.
.
.
DolphinOnDolphinVersionInfoisNeedUpdatingistrueDolphinNewVersion:3001,needDownloadSize:0DolphinOnDolphinVersionInfoContinueUpdate>>OnDolphinSuccess","已自动化","P0","是","是",""/"在操作步骤中表示"或者"""Dolphin(资源修复),未更新资源文件,直接修复资源","未更新资源文件,直接修复资源能拉起管理端最新资源线更新资源","1.
当前未更新资源文件配置:url:pre-download.
2.
507753088.
gcloudcstest.
comchannelid:84536gamekey:5b7b9b3fb8ed4b97a5192f2e9718f5ed版本号:3.
0.
0.
0资源号:0.
0.
0.
0","1.
当前未更新资源文件2.
输入前提条件的配置3.
右上角下拉框选择SourceCheckAndSync/srccheck4.
点击update/StartTest/download","直接拉起管理端最新资源线更新资源,且更新成功所有ios上更新及修复,成功后验证查看是否有onupdatesuccess即可","待自动化","P0","是","是","Dolphin(资源修复),修复过程中切换网络、退后台,再回到dolphin界面、锁屏等中断场景测试","修复过程中切换网络、退后台,再回到dolphin界面、锁屏等中断场景测试资源修复成功","1.
当前更新资源文件和管理端配置最新资源有差异配置:url:pre-download.
2.
507753088.
gcloudcstest.
comchannelid:84536gamekey:5b7b9b3fb8ed4b97a5192f2e9718f5ed版本号:3.
0.
0.
0资源号:0.
0.
0.
0","1.
当前本地更新资源和管理端最新资源存在差异2.
右上角下拉框选择SourceCheckAndSync/srccheck3.
点击update/StartTest/download4.
资源修复过程中切换网络5.
资源修复过程中退后台再回到dolphin界面6.
资源修复过程中锁屏7.
资源修复过程中来电、设置闹铃、接收短信等","1.
网络切换后之前修复过的资源不会重复修复2.
不影响资源修复,最终资源修复成功","无法自动化","P2","是","是","Dolphin(资源修复),配置不存在的版本号(格式错误的版本号)","配置不存在的版本号(格式错误的版本号)拉不起资源修复","参考正确配置:配置:url:pre-download.
2.
507753088.
gcloudcstest.
comchannelid:84536gamekey:5b7b9b3fb8ed4b97a5192f2e9718f5ed版本号:6.
7.
7.
88899a/3.
0.
00000资源号:0.
0.
0.
0","Demo上配置不存在的版本号","拉不起资源修复,不会发生卡死、崩溃等异常","待自动化","P1","是","否","Dolphin-渠道号回写"用例集",,"201909新增用例Dolphin渠道号回写用例说明","1、打渠道号都走飞鹰系统,目前GCloudSDK的测试包名zeyi有权限.

2、目前飞鹰系统不支持v3签名,测试这边只验证v1v2签名类型的渠道号回写功能,纯v2签名的也暂时不测.
以下所有用例需要覆盖三种签名类型升级:v1->v1;v1->v1+v2;v1+v2->v1+v2.
3、目前渠道号白名单号段为:89900000-89999999号段共1w个号码.
4、将当前APK记为A,Dolphin程序更新到的APK记为B.
测试说明",,"Dolphin(程序差异更新),普通渠道包A差异更新到普通渠道包B,v1->v1","普通渠道包A差异更新到普通渠道包B,v1->v1,差异更新成功","1.
控制台配置:B、A的差异更新A普通渠道号B普通渠道号2.
设备安装A","1.
客户端查看渠道号2.
客户端选择【AppUpdate】,输入【ChannelID】,3.
点击【Update】4.
差异更新成功,点击【InstallAPK】5.
安装成功之后,客户端查看渠道号【MSDK】-【Other】-【GetConfigChannel】","1.
渠道号:111001102.
成功生成了更新的diff,差异更新成功3.
安装成功2.
最终包回写A的渠道号:11100110","无法自动化","P1","是",,"【用例集】Dolphin程序差异更新+渠道号回写:v1+v2->v1+v2",,"控制台按照测试包说明配置两个channelID的版本线","客户端查看渠道号:【MSDK】-【Other】-【GetConfigChannel】",,,,"测试说明",,"Dolphin(程序差异更新),普通渠道包A差异更新到普通渠道包B,v1+v2->v1+v2","普通渠道包A差异更新到普通渠道包B,v1+v2->v1+v2,差异更新成功","1.
控制台配置:B、A的差异更新2.
设备安装AA普通渠道号B普通渠道号","1.
客户端查看渠道号2.
客户端选择【AppUpdate】,输入【ChannelID】,3.
点击【Update】4.
差异更新成功,点击【InstallAPK】5.
安装成功之后,客户端查看渠道号【MSDK】-【Other】-【GetConfigChannel】","1.
渠道号:111001102.
成功生成了更新的diff,差异更新成功3.
安装成功2.
最终包回写A的渠道号:11100110","无法自动化","P2","是",,"【用例集】Dolphin程序全量更新+渠道号回写:v1->v1",,,"客户端查看渠道号:【MSDK】-【Other】-【GetConfigChannel】",,,,"测试说明",,"Dolphin(程序更新),A普通渠道号更新到B普通渠道号v1->v1","A普通渠道号更新到B普通渠道号v1->v1,B渠道号变为A渠道号","A普通渠道号B普通渠道号","1、客户端安装A,查看渠道号2、直接程序更新到B3、查看安装成功之后的客户端的渠道号","1、A普通渠道号2、安装成功3、最终包回写A渠道号","无法自动化","P1","是",,"【用例集】Dolphin程序全量更新+渠道号回写:v1->v1+v2",,,"客户端查看渠道号:【MSDK】-【Other】-【GetConfigChannel】",,,,"测试说明",,"Dolphin(程序更新),A普通渠道号更新到B普通渠道号v1->v1+v2","A普通渠道号更新到B普通渠道号v1->v1+v2,B渠道号变为A渠道号","A普通渠道号B普通渠道号","1、客户端安装A,查看渠道号2、直接程序更新到B3、查看安装成功之后的客户端的渠道号","1、A普通渠道号2、安装成功3、最终包回写A渠道号","无法自动化","P2","是",,"【用例集】Dolphin程序全量更新+渠道号回写:v1+v2->v1+v2",,,"客户端查看渠道号:【MSDK】-【Other】-【GetConfigChannel】",,,,"测试说明",,"Dolphin(程序更新),A普通渠道号更新到B普通渠道号v1+v2->v1+v2","A普通渠道号更新到B普通渠道号v1+v2->v1+v2,B渠道号变为A渠道号","A普通渠道号B普通渠道号","1、客户端安装A,查看渠道号2、直接程序更新到B3、查看安装成功之后的客户端的渠道号","1、A普通渠道号2、安装成功3、最终包回写A渠道号","无法自动化","P2","是",,"Dolphin-支持4G+、首包解压等"用例集",,"[202008新增用例]需求单等内容记录","【支持资源解压过程可取消】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859687937","功能点:之前资源解压过程中,同步阻塞,接口不可调用取消,先提供优化cancle接口可以取消解压过程.
",,"验收标准:点击取消后,解压过程停止,不卡UI,重新再更新重新解压",,,"测试说明",,"Dolphin(支持解压过程中可取消),正常流程,解压过程中取消解压","解压过程中取消解压;取消解压成功,解压过程停止","1.
初始化成功2.
常规资源更新正常","1.
点击Update2.
返回开始解压回调时,点击CancelUpdate","取消解压成功,解压过程停止","待自动化","P0","是",,"Dolphin(支持解压过程中可取消),解压过程中取消解压(取消下载),解压过程停止,重新再更新","解压过程中取消解压,重新再更新取消解压成功,解压过程停止,重新再更新;重新解压","1.
初始化成功2.
常规资源更新正常","1.
点击Update2.
返回开始解压回调时,点击CancelUpdate3.
再次点击Update","重新解压,不会重新下载资源文件","待自动化","P0","是",,"[202008新增用例]需求单等内容记录","【新增首包修正功能】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859687917","前提1.
app是大包的情况2.
app包组成:app+散资源+res或者app+ifs+res3.
app内部资源仅是部分资源.
4.
app更新之后,首包的资源比sdcard的资源新,且sdcard也有部分新资源不需要更新的","新方案提供的功能1.
支持将首包res修正到sdcard的res,整体以sdcard的res为主做添加和修改操作.

2.
支持输入相对文件路径列表对sdcard上的res进行修复3.
首包修正是坐在资源更新流程里面,通过初始化参数来确定是否要启用","测试要点:1.
版本1假设总资源700M,制作一个首包res比如500M,需要更新的大小是200M.
版本2假设总资源700M,在做一个首包是500M,理论上需要更新200M,假设需要更新的200M中,有150M本地sdcard已经有了,也就是有150M是属于版本1里面的资源,这个功能下更新大小应该是50M左右",,,"测试说明",,"1.
与首包资源大小和文件个数无关——没有,但是多文件2.
资源包的准备:两个ifs+两个res(增删改+交叉)3.
首包的res拷贝到外面命名为filelistcheck.
res这一步需要demo来做""测试说明","渠道分类ID:1000172app1.
0.
0.
0:放24#的Unity2019测试包资源1.
0.
0.
1放了res1app2.
0.
0.
0:放25#的Unity2019测试包资源2.
0.
0.
1放了res2",,"初始化参数:mergeFilelistType:NotMerge/MergeAppRes/ModifyRes分别对应UI上CopyifsRes的下拉列表:Normal/Res/Json",,,,"测试说明",,"Dolphin(首包修正-ifs),初始化参数mergeFilelistType为MergeAppRes,未首包解压+资源更新+首包修正","初始化参数mergeFilelistType为MergeAppRes,版本A未首包解压,资源版本2.
0.
0.
0,然后程序更新到版本B之后首包修正res,首包修正成功资源更新只下载差异部分(版本A的历史res+版本B的首包ifsvs版本B的服务器res)","1.
控制台首包修正的渠道分类ID:10001722.
初始化成功","1.
ChannelID输入首包修正的;Appver输入1.
0.
0.
02.
更新类型下拉框选择SourceUpdate;点击Update4.
Appver输入2.
0.
0.
0,下拉框选择Res,点击CopyifsRes5.
更新类型下拉框选择SourceUpdate;点击Update6.
观察更新目录下首包res和资源res文件是否和用例预期一致","首包修正成功资源更新只下载差异部分(版本A的历史res+版本B的首包ifsvs版本B的服务器res)","无法自动化","P0","是",,"Dolphin(首包修正-ifs),多次版本更新+资源更新",,"1.
控制台首包修正的渠道分类ID:10000832.
初始化成功","1.
安装app1.
0.
0.
0,【SourceUpdate】,点击Update,资源更新到1.
0.
0.
12.
【AppUpdate】,点击Update,下载完成点击InsatllApk,程序更新到2.
0.
0.
03.
输入【Appversion】2.
0.
0.
0,【SourceUpdate】,【Res】,点击CopyIfsResJson,点击Update,更新到资源2.
0.
0.
24.
控制台上传资源版本2.
0.
2.
2,【Normal】,再次点击Update,资源更新到2.
0.
2.
25.
控制台上传程序版本3.
0.
0.
0,【AppUpdate】,点击Update,下载完成点击InsatllApk,程序更新到3.
0.
0.
06.
输入【Appversion】3.
0.
0.
0,【SourceUpdate】,【Res】,点击CopyIfsResJson,点击Update,更新到资源3.
0.
0.
3","1.
全量资源更新3.
差量资源更新4.
差量资源更新6.
差量资源更新","无法自动化","P0","是",,"Dolphin(首包修正-ifs),初始化参数mergeFilelistType为ModifyRes,sdcard有资源+错误的MD5+指定文件列表首包修正","初始化参数mergeFilelistType为ModifyRes,sdcard有资源+错误的MD5+指定文件列表首包修正,资源更新将重新下载MD5错误的文件+差异文件","1.
控制台首包修正的渠道分类ID:10001722.
初始化成功",,"资源更新成功,将重新下载MD5错误的文件+差异文件","无法自动化","P0","是",,"Connector-TCP-网络连接"用例集",,"TCP模式测试说明","下拉框默认按本条说明的前提条件进行设置","1登录鉴权渠道较多【分国内(QQ、Wechat)海外(Facebook、Guest、Google)】","2网络重连方式分自动重连和Relay重连在兼容性测试及冒烟测试或集成测试中,不需要所有组合情况都覆盖.
建议分"自动重连+国内一种渠道"、"自动重连+国外一种渠道"、"Relay重连+国内一种渠道"、"Relay重连+国外一种渠道"即可",,,,"测试说明",,"Connector(TCP-网络连接),无鉴权连接与无鉴权反复连接","无鉴权连接与无鉴权反复连接,连接成功","配置:(1)Url/模式:URL_TCP_NoneAuth_IPv4/TCP(2)Enc(加密方式):AES(3)Key(密钥生成方法):RAWDH(4)Channel:None(5)需要注意,选择国内或海外环境,鉴权渠道有所不同~海外环境的切换需要在Region/Config选择【Overseas】才会生效","1.
点击【Init】2.
点击【Connect】3.
反复点击【Connect】","1.
连接成功参照log示例如下:#OnConnectChannelType:None,url:lwip://101.
91.
28.
188:10002Connectret=Successip(101.
91.
28.
188:10002),serverId[0]>>ConnectEvent,ConnectSuccess2.
反复连接Unity则不断返回已连接的log","已自动化","P0","是","是","Connector(TCP-网络连接),鉴权连接与鉴权反复连接","鉴权连接与鉴权反复连接,连接成功","配置:(1)Url/模式:URL_TCP_Auth/TCP(2)Enc(加密方式):None(3)Key(密钥生成方法):None(4)Channel:选择国内(QQ、Wechat)海外(Facebook、Guest、Google)】任意一个渠道(5)需要注意,选择国内或海外环境,鉴权渠道有所不同~海外环境的切换需要在Region/Config选择【Overseas】才会生效","1.
点击【Init】2.
点击【Login】,拉起平台登录界面后点击登录,等待返回Connect界面3.
点击【GetLoginRet】4.
点击【Connect】,反复点击【Connect】","1.
连接成功参照log示例如下:#OnConnectChannel:QQ,url:lwip://101.
91.
28.
188:10005Connectret=SuccessConnectedInfo:ip[101.
91.
28.
188],serverId[0]>>ConnectEvent,ConnectSuccess2.
反复连接Unity则不断返回已连接的log","待自动化","P0","是","是","PC端不支持""Connector(TCP-网络连接),发送数据与反复发送数据","发送数据与反复发送数据,数据收发成功","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Write】,反复点击【WriteUDP】","1.
数据收发成功参照log示例如下:OnSendData#SendDataSuccess>>ReceivedDataEventReceivedcorrectly2.
反复发送数据不断打印收发数据的log","已自动化","P0","是","是","Connector(TCP-网络连接),断开连接,发送数据","断开连接,发送数据,数据收发失败","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Disconnect】4.
点击【Write】","1.
步骤3:断开连接成功#OnDisconnect>>DisconnectEvent,result:Success,0,0,0DisconnectSuccessfully2.
步骤4:发送数据失败#OnSendDataNotConnected!
!
","已自动化","P0","是","是","Connector(TCP-网络连接),销毁连接—发送数据","销毁连接—发送数据,销毁连接成功,发送数据失败","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Destroy】4.
点击【Write】","1.
销毁连接成功参照log示例如下:#OnDestoryConnectorDestorySuccess2.
发送数据失败#OnSendDataNotInited>>NotInited","已自动化","P0","是","是","Connector(TCP-网络连接),业务主动关闭连接","业务主动关闭连接,关闭连接成功,勾选了自动重连:连接关闭后也不会发起自动重连;","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【SvrClose】","连接关闭成功,勾选了自动重连:连接关闭后也不会发起自动重连;参照log示例如下:Unity:#OnSvrClose>>StateChangeEvent,State:Error,Result:PeerStopSession,7,5.
.
.
.
.
ServerclosetheconnectionUE:#OnSvrClose>>OnStateChangedProc:4,205,ext:7,ext2:5,ext3:0,Gameserverclosetheconnection","已自动化","P0","是","否","201904新增如果客户端连接服务器后,空闲时间也会关闭连接.
(已自动化检查日志)""Connector(TCP-网络连接),后台中间层Tconnd断开连接","后台中间层Tconnd断开连接,勾选了自动重连:断开会自动重连上;否则,不会自动重连","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【TconndClose】","1.
勾选了自动重连:断开会自动重连上log示例如下:#OnTconndCloseSendTconndCloseDataSuccess>>OnStateChangedProcstate:ReconnectedSuccess,0,0,02.
没有勾选自动重连:不会自动重连log示例如下:#OnTconndCloseSendTconndCloseDataSuccess>>OnStateChangedProcstate:ErrorPeerCloseConnection,-10,0,0ClosedbyConnection,pleasecheckyournetworkisok","已自动化","P0","是","否","201904新增PC端不支持自动重连""Connector(TCP-网络连接),点击SVRCloseWithPkg,Svr主动关闭连接","点击SVRCloseWithPkg,Svr主动关闭连接连接关闭成功,勾选了自动重连:连接关闭后也不会发起自动重连;","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【SvrCloseWithPkg】","连接关闭成功,勾选了自动重连:连接关闭后也不会发起自动重连;>>OnDataRecvedProc:0,ext:0,ext2:0,ext3:0,OnStateChangedProc:4,205,ext:7,ext2:5,ext3:0,Gameserverclosetheconnection","已自动化","P0","是","否","Connector(TCP-网络连接),排队等待连接","排队等待连接,不会发生卡死、崩溃等异常,观察有返回Stayinqueue的回调","初始化成功","1.
点击【Init】2.
点击【LineUp】","不会发生卡死、崩溃等异常,观察有Stayinqueue的回调日志示例如下:>>StateChangedEvent,state:StayInQueue,result:StayInQueue,2,2,60Stayinqueue","已自动化","P0","是","否","201908新增""Connector(TCP-网络连接),断网发送数据—自动发起重连","断网发送数据—恢复重连,连接断开,发送数据失败,重连成功","1.
需要勾选AutoReconnect2.
初始化成功","1.
点击【Init】2.
点击【Connect】3.
断开网络4.
点击【Write】/【WriteUDP】5.
恢复网络后点击【Write】/【WriteUDP】","1.
步骤3:连接断开>>StateChangedEvent,state:error,result:NetworkException,-9,0,0connectfailed,pleascheckyournetworkisok2.
步骤5:恢复网络后自动重连,数据收发成功,打印日志示例如下:>>StateChangedEvent,state:Reconnecting,result:Success,….
.
>>StateChangedEvent,state:Reconnected,result:Success,….
","无法自动化","P0","是","否","PC端不支持""Connector(TCP-网络连接),Wifi与4G网络互切—发送数据验证重连是否成功","Wifi与4G网络互切—观察网络切换回调,发送数据验证是否连接成功,自动重连成功,数据收发成功","1.
需要勾选AutoReconnect2.
初始化成功3.
能连接上服务器","1.
点击【Init】2.
点击【Connect】/【Connect-zone】/【Connect-server】3.
手机端同时打开wifi跟4G,将wifi关闭,自动进行网络切换4.
点击【Write】/【WriteUDP】5.
手机端4g保持连接状态,打开wifi开关连接到wifi6.
点击【Write】/【WriteUDP】7.
关注连接状态","1.
步骤3:断开连接,触发自动重连,自动重连成功2.
步骤5:触发自动重连,自动重连成功3.
步骤4/步骤6:收发数据成功","无法自动化","P0","是","是","PC端可不测""Connector(TCP-网络连接),网络重连方式切换为Relay重连方式—连接服务器","网络重连方式切换成relay重连—连接服务器与前面自动重连模式的用例执行结果相同","需要取消勾选AutoReconnect!
","1.
点击【Init】2.
点击【Connect】/【Connect-zone】/【Connect-server】","1.
初始化成功Initsuccess2连接成功>>ConnectEvent,ConnectSuccess","已自动化","P1","是","否","Connector(TCP-无鉴权连接),弱网分别配置丢包、带宽、延时、延时抖动等参数测试","弱网分别配置丢包、带宽、延时、延时抖动等参数测试,不会发生卡死、崩溃等异常,正常报错","配置弱网环境","1.
点击【Init】2.
点击【Connect】","1.
不会发生卡死、崩溃等异常2.
正常报错","无法自动化","P2","是","否","弱网下程序更新&弱网场景详见:http://tapd.
oa.
com/CROS_component_test/prong/stories/view/1020417881855557609""Connector-LWIP-网络连接"用例集",,"LWIP模式测试说明","下拉框默认按本条说明的前提条件进行设置","1登录鉴权渠道较多【分国内(QQ、Wechat)海外(Facebook、Guest、Google)】","2网络重连方式分自动重连和Relay重连在兼容性测试及冒烟测试或集成测试中,不需要所有组合情况都覆盖.
建议分"自动重连+国内一种渠道"、"自动重连+国外一种渠道"、"Relay重连+国内一种渠道"、"Relay重连+国外一种渠道"即可",,,,"测试说明",,"Connector(LWIP-网络连接),无鉴权连接与无鉴权反复连接","无鉴权连接与无鉴权反复连接,连接成功","配置:(1)Url/模式:URL_LWIP_IPv4/LWIP(2)Enc(加密方式):AES(3)Key(密钥生成方法):RAWDH(4)Channel:None(5)需要注意,选择国内或海外环境,鉴权渠道有所不同~海外环境的切换需要在Region/Config选择【Overseas】才会生效","1.
点击【Init】2.
点击【Connect】3.
反复点击【Connect】","1.
连接成功参照log示例如下:#OnConnectChannelType:None,url:tcp://101.
91.
28.
188:10003Connectret=SuccessConnectedInfo:ip[101.
91.
28.
188],serverId[0]>>ConnectEvent,ConnectSuccess2.
反复连接Unity则不断返回已连接的log","已自动化","P0","是","是","Connector(LWIP-网络连接),发送数据与反复发送数据","发送数据与反复发送数据,数据收发成功","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Write】,反复点击【WriteUDP】","1.
数据收发成功参照log示例如下:OnSendData#SendDataSuccess>>ReceivedDataEventReceivedcorrectly2.
反复发送数据不断打印收发数据的log","已自动化","P0","是","是","Connector(LWIP-网络连接),断开连接,发送数据","断开连接,发送数据,数据收发失败","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Disconnect】4.
点击【Write】","1.
断开连接成功#OnDisconnect>>DisconnectEvent,result:Success,0,0,0DisconnectSuccessfully2.
发送数据失败#OnSendDataNotConnected!
!
","已自动化","P0","是","是","Connector(LWIP-网络连接),断开连接—恢复连接—发送数据","断开连接—恢复连接(Server)—发送数据,恢复连接成功,数据收发成功","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Disconnect】4.
点击【ConnectServer】4.
点击【Write】","1.
恢复连接成功2.
数据数据收发成功步骤4:返回log示例如下:#OnConnectServer_Route>>ConnectEvent,ConnectSuccess>>RecvedDataEventSetSyncInfo:ConnectServer_Route_SetSyncInfo(10242017,data,data.
Lenth)","已自动化","P0","是","否","Connector(LWIP-网络连接),多次销毁连接—发送数据","多次销毁连接—发送数据,打印回调正常;不发生卡死、崩溃等异常","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Destroy】5.
点击【Write】6.
重复1—5步","无UI卡死,闪退,崩溃等返回log相符,参照销毁连接用例","已自动化","P1","是","否","Connector(LWIP-网络连接),业务主动关闭连接","业务主动关闭连接,关闭连接成功,勾选了自动重连:连接关闭后也不会发起自动重连;","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【SvrClose】","连接关闭成功参照log示例如下:Unity:#OnSvrClose>>StateChangeEvent,State:Error,Result:PeerStopSession,7,5.
.
.
.
.
ServerclosetheconnectionUE:#OnSvrClose>>OnStateChangedProc:4,205,ext:7,ext2:5,ext3:0,Gameserverclosetheconnection","已自动化","P0","是","否","201904新增如果客户端连接服务器后,空闲时间也会关闭连接,返回Result:PeerStopSession.

1,268435457.
.
.
OldleClose""Connector(LWIP-网络连接),断网发送数据—发起自动重连","断网发送数据—恢复重连,连接断开,发送数据失败,重连成功","1.
初始化成功2.
已连接服务器、已开启自动重连","1.
点击【Init】,初始化成功2.
点击【Connect】/【Connect-zone】/【Connect-server】3.
手机端打开飞行模式/关闭网络4.
关闭飞行模式/恢复网络5.
发送数据","1.
步骤3:连接断开,发送数据失败打开飞行模式断网后打印日志示例如下:>>StateChangedEvent,state:Error,result:NetworkException,-9,0,0Connectfailed,pleasecheckyournetworkisok2.
步骤5:关闭飞行模式恢复网络后打印两条回调日志如下:>>StateChangedEvent,state:Reconnecting,result:Success,….
.
>>StateChangedEvent,state:Reconnected,result:Success,….
3.
触发自动重连,重连成功,数据收发成功","无法自动化","P0","是","否","PC端不支持""Connector(LWIP-网络连接),Wifi与4G网络互切—发送数据验证自动重连是否成功","Wifi与4G网络互切—观察网络切换回调,发送数据验证自动重连是否连接成功,自动重连成功,数据收发成功","1.
初始化成功2.
能连接上服务器","1.
点击【Init】2.
点击【Connect】/【Connect-zone】/【Connect-server】3.
手机端同时打开wifi跟4G,将wifi关闭,自动进行网络切换4.
点击【Write】/【WriteUDP】5.
手机端4g保持连接状态,打开wifi开关连接到wifi6.
点击【Write】/【WriteUDP】","1.
步骤3:断开连接,触发自动重连,自动重连成功2.
步骤5:触发自动重连,自动重连成功3.
步骤4/步骤6:收发数据成功","无法自动化","P0","是","否","PC端不支持""Connector-集群-网络连接"用例集",,"集群模式测试说明","下拉框默认按本条说明的前提条件进行设置","1登录鉴权渠道较多【分国内(QQ、Wechat)海外(Facebook、Guest、Google)】","2网络重连方式分自动重连和Relay重连在兼容性测试及冒烟测试或集成测试中,不需要所有组合情况都覆盖.
建议分"自动重连+国内一种渠道"、"自动重连+国外一种渠道"、"Relay重连+国内一种渠道"、"Relay重连+国外一种渠道"即可",,,,"测试说明",,"Connector(集群-网络连接),无鉴权连接与无鉴权反复连接","无鉴权连接与无鉴权反复连接,连接成功","配置:(1)Url/模式:URL_Cluster_Server_Zone/集群模式(2)Enc(加密方式):AES(3)Key(密钥生成方法):RAWDH(4)Channel:None(5)需要注意,选择国内或海外环境,鉴权渠道有所不同~海外环境的切换需要在Region/Config选择【Overseas】才会生效","1.
点击【Init】2.
点击【ConnectServer】/【Connect】3.
反复点击【ConnectServer】/【Connect】","1.
连接成功参照log示例如下:#OnConnectChannelType:None,url:tcp://101.
91.
28.
188:10003Connectret=SuccessConnectedInfo:ip[101.
91.
28.
188],serverId[0]>>ConnectEvent,ConnectSuccess2.
反复连接Unity则不断返回已连接的log","已自动化","P0","是","是","Connector(集群-网络连接),鉴权连接与鉴权反复连接","鉴权连接与鉴权反复连接,连接成功","配置:(1)Url/模式:URL_Cluster_Server_Zone/集群模式(2)Enc(加密方式):None(3)Key(密钥生成方法):None(4)Channel:选择国内(QQ、Wechat)海外(Facebook、Guest、Google)】任意一个渠道(5)需要注意,选择国内或海外环境,鉴权渠道有所不同~海外环境的切换需要在Region/Config选择【Overseas】才会生效","1.
点击【Init】2.
点击【Login】,拉起平台登录界面后点击登录,等待返回Connector界面3.
点击【GetLoginRet】4.
点击【ConnectServer】/【Connect】,反复点击【ConnectServer】/【Connect】","1.
连接成功参照log示例如下:#OnConnectChannel:QQ,url:tcp://101.
91.
28.
188:10005Connectret=SuccessConnectedInfo:ip[101.
91.
28.
188],serverId[0]>>ConnectEvent,ConnectSuccess2.
反复连接Unity则不断返回已连接的log","待自动化","P0","是","否","PC端不支持""Connector(集群-网络连接),发送数据与反复发送数据","发送数据与反复发送数据,数据收发成功","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【ConnectServer】/【Connect】3.
点击【Write】,反复点击WriteUDP","1.
数据收发成功参照log示例如下:OnSendData#SendDataSuccess>>ReceivedDataEventReceivedcorrectly2.
反复发送数据不断打印收发数据的log","已自动化","P0","是","否","Connector(集群-网络连接),断开连接,发送数据","断开连接,发送数据,数据收发失败","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【ConnectServer】/【Connect】3.
点击【Disconnect】4.
点击【Write】","1.
断开连接成功#OnDisconnect>>DisconnectEvent,result:Success,0,0,0DisconnectSuccessfully2.
发送数据失败#OnSendDataNotConnected!
!
","已自动化","P0","是","否","Connector(集群-网络连接),断开连接-恢复连接—发送数据","断开连接—恢复连接(Server)—发送数据,恢复连接成功,数据收发成功","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【ConnectServer】/【Connect】3.
点击【Disconnect】4.
点击【ConnectServer】4.
点击【Write】","1.
恢复连接成功2.
数据数据收发成功log参照Connect/Write用例步骤4:返回log示例如下:#OnConnectServer_Route>>ConnectEvent,ConnectSuccess>>RecvedDataEventSetSyncInfo:ConnectServer_Route_SetSyncInfo(10242017,data,data.
Lenth)","已自动化","P0","是","否","Connector(集群-网络连接),销毁连接—发送数据","销毁连接—发送数据,销毁连接成功,发送数据失败","1.
初始化成功2.
已连接服务器","1.
点击【Init】2.
点击【Connect】3.
点击【Destroy】4.
点击【Write】","1.
销毁连接成功2.
发送数据失败参照log示例如下:#OnDestoryConnectorDestorySuccess#OnSendDataNotInited>>NotInited","已自动化","P0","是","是","Connector(集群-网络连接),网络重连方式切换为Relay重连方式—连接服务器","网络重连方式切换成relay重连—连接服务器与前面自动重连模式的用例执行结果相同","需要取消勾选AutoReconnect!
","1.
点击【Init】2.
点击【Connect】/【Connect-zone】/【Connect-server】","1.
初始化成功Initsuccess2连接成功>>ConnectEvent,ConnectSuccess","已自动化","P1","是","否","Connector-新特性"用例集",,"[202007新增用例]需求单等内容记录","【【Connector】支持指定servicename和userdata的路由模式】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859087425",,,,,,"测试说明",,"Connector(集群模式),指定servicename连接成功—SpecifyName","指定servicename创建连接——SpecifyName,连接成功","配置:(以下用例全部适用此前提条件)1.
Unity:Url:选择URL_Cluster_Name_Data;Connect的按钮分别为【ConnectName】/【ConnectNameData】2.
UE4:模式:选择集群;【Route】—ByName/ByNameData3.
【Enc】和【Key】都为none4.
支持鉴权和无鉴权连接(鉴权时Chnnel选择一个渠道先登录)","1.
输入正确的【ServiceName】2.
点击【Init】3.
点击【Connect】/【ConnectName】","连接成功","待自动化","P0","是",,"Connector(集群模式),指定servicename连接成功—SpecifyNameData","指定servicename连接成功——SpecifyNameData,连接成功","正确的servicename+空的userata","1.
输入正确的【ServiceName】,清空【userdata】2.
点击【Init】3.
点击【Connect】/【ConnectNameData】","连接成功","待自动化","P0","是",,"Connector(集群模式),指定servicename连接成功后,发送数据","指定servicename连接成功后,发送数据,发送数据成功",,"1.
输入正确的【ServiceName】2.
点击【Init】3.
点击【Connect】/【ConnectName】4.
点击【Write】5.
点击【Disconnect】6.
点击【Connect】/【ConnectName】7.
点击【Write】8.
点击【Destroy】","步骤4和7发送数据成功","待自动化","P0","是",,"Connector(集群模式),指定servicename和userdata连接成功","指定servicename和userdata创建连接,连接成功",,"1.
输入正确的【ServiceName】+【UserData】2.
点击【Init】3.
点击【Connect】/【ConnectNameData】","连接成功","待自动化","P0","是",,"Connector(集群模式),指定servicename和userdata连接成功后,发送数据","指定servicename和userdata连接成功后,发送数据,发送数据成功",,"1.
输入正确的【ServiceName】和【UserData】2.
点击【Init】3.
点击【Connect】/【ConnectNameData】4.
点击【Write】5.
点击【Disconnect】6.
点击【Connect】/【ConnectNameData】7.
点击【Write】8.
点击【Destroy】","步骤4和7发送数据成功","待自动化","P0","是",,"[202005新增用例]需求单等内容记录","【【Connector】新增Ping功能】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512858302529",,,"注意关注SendPing之后对消息发送有无影响",,,"测试说明",,"Connector(TCP),各种连接方式(鉴权/无鉴权/IPList)下Connect之后SendPing",,,"1.
选择连接方式(鉴权/无鉴权/IPList)2.
点击【Init】(鉴权方式还需要【Login】)3.
点击【Connect】4.
点击【SendPing】5.
点击【Write】","2.
初始化成功3.
连接成功4.
返回值ret(req)>0,且收到PingEvent的回调,ret和回调的seq相等5.
发送数据正常","待自动化","P0","是",,"Connector(LWIP),各种连接方式(鉴权/无鉴权/IPList)下Connect之后SendPing",,,"1.
选择连接方式(鉴权/无鉴权/IPList)2.
点击【Init】(鉴权方式还需要【Login】)3.
点击【Connect】4.
点击【SendPing】5.
点击【Write】或者【WriteUDP】","2.
初始化成功3.
连接成功4.
返回值ret(req)>0,且收到PingEvent的回调,ret和回调的seq相等5.
发送数据正常","待自动化","P1","是",,"需求单等内容记录","【【Connector】Unity提供备用IP连接接口】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512857722885",,,,,,"测试说明",,"Connector(备用IP连接),TCP无鉴权方式下备用IP的List可连接成功","TCP无鉴权方式下备用IP的List可连接成功","IPv4","1.
设置TCP无鉴权连接2.
选中【IsIpList】,下拉框【URLListType】选择"All_Valid_URL"3.
点击【Init】、【Connect】","在TCP无鉴权连接方式下,初始化成功,连接成功","待自动化","P0","是",,"Connector(备用IP连接),备用IPList中的单个URL可连接成功","备用IPList中的单个URL可连接成功,初始化成功,连接成功","UrlList:"tcp://www.
qq.
com:80""tcp://1.
1.
1.
1:88888""lwip://1.
1.
2.
1:77777""tcp://tapolloipv6.
gamedl.
qq.
com:10003"","1.
设置TCP无鉴权连接2.
选中【IsIpList】,下拉框【URLListType】选择"Only_Last_URL_Valid"3.
点击【Init】、【Connect】","初始化成功,连接成功(最后一个URL连接成功)","待自动化","P1","是",,"Puffer-动态下载"用例集",,"Puffer-预发布环境,初始化成功获取文件ID","预发布环境,初始化成功获取文件ID,获取文件ID成功","配置:使用默认的","1.
点击【Init】2.
点击【GetFileID】","能获取文件ID,返回文件id,日志打印如下:#OnGetFileIdzeyiweng/ExtraPack_1/AssetBundle/Scene_ARTIST_PWJ.
assetbundlefileId=87GetFileIdUSVE_1.
unity3dfileId=49","已自动化","P0","是","是","Puffer-预发布环境,下载文件前,判断文件是否准备好","预发布环境,下载文件前,判断文件是否准备好,可以正确判断出文件状态","配置:使用默认的","1.
点击DeleteAll2.
点击【Init】3.
点击【ISFileReady】","可以正确判断出文件状态,返回默认渠道下面所有文件Unity:#OnIsFileReadyIsNotFileReady,count:105,zeyiweng/ExtraPack_1/AssetBundle/Scene_ARTIST_PWJ.
assetbundleUE4:#OnIsFileReadyzeyiweng/ExtraPack_1/AssetBundle/Scene_ARTIST_PWJ.
assetbundle:FalseIfReady=0NotReady=105FileExist=0","已自动化","P0","是","是","Puffer-预发布环境,已初始化,下载文件","预发布环境,已初始化,下载文件,下载文件成功","配置:使用默认的","1.
点击【Init】2.
点击【DownFile】","下载文件成功,日志打印如下:>>OnDownloadReturn,taskId:2,fileid:65,isSuccess:True,errorcode:0注:isSuccess:True,errorcode:0","已自动化","P0","是","是","Puffer-预发布环境,下载文件成功后,判断文件是否准备好","预发布环境,下载文件成功后,判断文件是否准备好,可以正确判断出文件状态","配置:使用默认的","1.
点击【Init】2.
点击【DownFile】3.
点击【ISFileReady】","可以正确判断出文件状态,返回未经准备好的文件(相对路径),日志打印如下:Unity:#OnIsFileReadyAllinputfilesareready!
UE4:#OnIsFileReadyzeyiweng/ExtraPack_1/AssetBundle/Scene_ARTIST_PWJ.
assetbundle:TrueIfReady=0NotReady=0FileExist=105","已自动化","P0","是","是","Puffer-设置最大下载速度为0","设置最大下载速度为0,设置生效,下载过程中手机流量悬浮框显示的速度为0上下;下载非常缓慢","配置:1.
SetMaxDLSpeed设置为0","1.
点击【Init】,点击【DownFile】2.
设置最大下载速度为03.
点击【SetMaxDLSpeed】","1.
设置生效,下载过程中手机流量悬浮框显示的速度为0上下2.
停止下载","待自动化","P0","是","否","201904新增""Puffer-关联dolphin程序下载","预发布或正式环境—关联dolphin程序下载,下载到关联的程序版本,下载成功","打包时已配置关联版本程序配置:1.
UpdateType下拉框选择末尾是Res4DolphinApp的选项2.
DolphinProductid:10000363.
DolphinAppVer:3.
0.
0.
04.
DolphinResVer:默认","1.
点击【Init】2.
点击【DownFile】","下载到关联的程序版本,下载成功","待自动化","P0","是","否","201907新增""Puffer-关联dolphin资源下载","预发布或正式环境—关联dolphin资源下载,下载到关联的程序版本,下载成功","打包时已配置关联版本程序配置:1.
UpdateType下拉框选择末尾是Res4DolphinRes的选项2.
DolphinProductid:10000363.
DolphinAppVer:3.
0.
0.
04.
DolphinResVer:默认","1.
点击【Init】2.
点击【DownFile】","下载到关联的资源版本,下载成功","待自动化","P0","是","否","201907新增""Puffer-检查下载下来的数据的完整性","检查下载下来的数据的完整性,下载成功,检查下载下来的资源是否和管理端配置的资源一样","配置:1.
Productid:10000072.
不勾选NeedCheck3.
不勾选NeedFileRestore","1.
点击【Init】2.
点击【DownFile】3.
点击【CheckFilesMD5】","1.
下载成功2.
检查下载下来的资源是否和管理端配置的资源一样","待自动化","P0","是","否","Puffer(动态下载-弱网测试),弱网分别配置丢包、带宽、延时、延时抖动等参数测试","弱网分别配置丢包、带宽、延时、延时抖动等参数测试,不会发生卡死、崩溃等异常,正常报错","配置弱网环境","1.
点击【Init】2.
点击【DownFile】","1.
不会发生卡死、崩溃等异常2.
正常报错","无法自动化","P2","是","否","弱网下程序更新&弱网场景详见:http://tapd.
oa.
com/CROS_component_test/prong/stories/view/1020417881855557609""Puffer大文件资源下载,下载文件资源总大小:1G/2G/3G+","Puffer大文件资源,下载文件资源总大小:1G/2G/3G+,下载成功","配置:1G/2G/3G控制台渠道ProductId::1000111","1.
勾选ForceDownload2.
点击【DownFile】,3.
下载成功后删掉全部已下载文件4.
重新初始化,点击【DownloadDir】","1.
初始化成功,1G/2G+3G/文件资源下载成功2.
批量下载成功","待自动化","P0","是","否","202010新增""Puffer大文件资源下载,下载文件资源:包含单个文件超过2G的文件资源","下载文件资源:包含单个文件超过2G的文件资源下载成功","配置:1.
控制台渠道Productid::1000013(含有单个文件是2.
4G左右的文件)","1.
勾选ForceDownload2.
点击【DownFile】,3.
下载成功后删掉全部已下载文件4.
重新初始化,点击【DownloadDir】","下载成功","待自动化","P1","是","否","202010新增""Puffer-批量下载"用例集",,"[下载文件目录(夹)用例集]",,"目录test下仅包含目录A、子目录A包含子目录B、25个子文件和空目录F、子目录B仅包含子目录C、子目录C包含子目录D和35个子文件、子目录D包含45个子文件.
目录test下共有105个文件.
测试说明",,"201908新增""Puffer指定文件目录(夹)下载-非强制下载","初始化+指定文件夹(A或B或C或D)非强制下载","配置:Productid:10000761.
例如指定文件夹A:Dir传入:test/A","1.
点击【Init】2.
点击【CopyFileNamesFromRes】,然后点击【ChangeDir】(默认渠道号一般不需要这一步)3.
点击【DownloadDir】","遍历下载指定文件夹下的所有资源文件(文件夹)","已自动化","P0","是","否","测试资源需要有directoryList.
txt文件,然后demo上点击ChangeDir""Puffer指定文件目录(夹)下载-强制下载","初始化+指定文件夹(A或B或C或D)强制下载","配置:Productid:10000761.
例如指定文件夹A:Dir传入:test/A","1.
点击【Init】2.
设置【forceDownload】3.
点击【DownloadDir】","遍历下载指定文件夹下的所有资源文件(文件夹)","已自动化","P1","是","否","Puffer指定文件目录(夹)下载文件-删除部分再非强制下载","初始化+下载完成后,删除部分文件及子目录再非强制下载","配置:Productid用默认的1.
已下载文件目录2.
forceDownload为false,非强制下载文件","1.
不勾选【ForceDownload】2.
点击【DownloadDir】","仅被删除的文件会重新下载","已自动化","P2","是","否","Puffer指定文件目录(夹)下载,不删除文件直接再强制下载","初始化+下载完成后,不删除文件直接再强制下载","配置:Productid用默认的1.
已下载文件目录2.
forceDownload为true开启强制下载文件","1.
勾选【ForceDownload】2.
点击【DownloadDir】","文件都会重新下载","已自动化","P2","是","否","Puffer指定文件目录(夹)下载--反初始化","下载过程中-反初始化","配置:Productid:10000761.
例如指定文件夹A:Dir传入:test/A2.
初始化可以成功","1.
点击【Init】2.
点击【DownloadDir】3.
下载过程中反初始化4.
再次点击【Init】、【DownloadDir】","程序无异常,再次点击【DownloadDir】在断点处继续下载,最终下载成功","无法自动化","P1","是","否","Puffer下载文件列表--指定存在文件下载","指定存在文件去下载","配置:Productid用默认的","1.
点击【Init】2.
点击【DownloadList】","正常下载","已自动化","P0","是","否","[动态设置Puffer的任务优先级用例集]","最高优先级为0、其他会暂停等待直到这个任务结束.
同时设置多个0优先级的任务,最后设置的优先级最高1-100值越小优先级越高注意:已经下载的任务不受优先级排序,除了0优先级101不要使用这个字段,为保留字段"测试说明","否","201908新增""Puffer动态设置任务优先级----指定正在下载的任务","指定正在下载的任务去设置优先级","配置:Productid用默认的1.
初始化成功","1.
点击【Init】2.
点击【DownloadDir】/DownFile4.
设置优先下载的【TaskId】和【Priority】下载过程中点击【SetTaskPriority】","下载任务优先级得到调整","已自动化","P1","是","否","Puffer-资源修复&优化"用例集",,"[202007新增用例]需求单等内容记录","【【Puffer】restore机制优化】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512858808023","1.
当调用StartRestoreFiles接口进行资源修复时,返回值为TaskId(需要修复的文件批量下载任务);2.
业务可以通过OnDownloadBatchProgress接口获取资源修复进度;3.
业务可以通过OnDownloadBatchReturn接口获取资源修复结果;","下载分别为:DownFile\DownloadDir\DownloadList","Puffer调用Restore资源修复过程中,可以获取修复进度以及修复结果;","无法自动化",,"测试说明",,"Puffer(Restore机制优化),资源修复过程中,检查是否返回TaskId","资源修复过程中,检查是否返回TaskId","1.
勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功2.
DownFile\DownloadDir\DownloadList,已经下载完文件","1.
下载完成后删改已下载的部分文件2.
点击【Init】3.
点击【RestoreFiles】4.
检查日志返回的taskId","1.
资源修复过程中返回了taskId2.
最终所有删改文件修复成功,返回回调isSuccess:1,errCode:0,strRet:{"errorcode":0"fail_num":0"ret":true"sucs_num":已修复成功的文件个数}","已自动化","P0","是",,"只有一个TaskID""Puffer(Restore机制优化),资源修复过程中获取资源修复进度","资源修复过程中获取资源修复进度,正常获取到资源修复进度和修复结果","1.
勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功2.
DownFile\DownloadDir\DownloadList,已经下载完文件","1.
下载完成后删改已下载的部分文件2.
点击【Init】3.
点击【RestoreFiles】4.
检查日志是否返回修复进度的回调","正常获取到资源修复进度,返回已修复资源文件的进度回调:OnDownloadBatchProgress:","待自动化","P0","是",,"Puffer(Restore机制优化),资源修复过程中断修复(反初始化),获取资源修复进度和修复结果","资源修复过程中暂停下载,获取资源修复进度和修复结果,不再返回修复进度和修复结果的回调","1.
勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功2.
DownFile\DownloadDir\DownloadList,已经下载完文件","1.
下载完成后删改已下载的部分文件2.
点击【Init】3.
点击【RestoreFiles】4.
修复过程中点击【UnInit】5.
检查日志是否返回修复进度的回调6.
再次点击【Init】、【RestoreFiles】","步骤5:修复中断,不再返回修复进度和修复结果的回调(理论上)步骤6:反初始化之后,再次点击【RestoreFiles】,未被修复的文件下载成功","待自动化","P1","是",,"当前反初始化之后,修复会中断,再次点击【RestoreFiles】,未下载修复的文件未修复成功.
——已知BUG""Puffer资源修复-未下载过文件,直接进行资源修复,修复无效,观察是否返回taskId、是否获取资源修复进度、修复结果","未下载过文件,直接进行资源修复,修复无效,","1.
勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功","1.
点击【Init】2.
点击【RestoreFiles】3.
检查日志返回的taskId、资源修复进度和修复结果","不会修复文件,不会返回taskId和获取资源修复进度回调、修复结果回调","待自动化","P1","是","否","Puffer资源修复-初始化删改的文件本次修复无效,观察是否返回taskId、是否获取资源修复进度、修复结果","Puffer资源修复只在初始化时做文件修复标记.

此用例流程为:设置资源修复功能并初始化+下载文件+删改文件+资源修复","1.
勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功2.
DownFile\DownloadDir\DownloadList,已经下载完文件","1.
下载完成后删改已下载的部分文件2.
直接点击【RestoreFiles】3.
检查日志返回的taskId、资源修复进度和修复结果","删改文件未被修复,不会返回taskId和获取资源修复进度回调、修复结果回调","待自动化","P1","是","否","Puffer资源修复-可通过needFileRestore选项关闭,观察是否返回taskId、是否获取资源修复进度、修复结果","不设置资源修复功能(关闭needFileRestore)删改文件,初始化+资源修复,不修复","1.
未勾选NeedRestore、NeedCheck;取消勾选ForceDownload,初始化成功2.
DownFile\DownloadDir\DownloadList,已经下载完文件","1.
下载完成后删改已下载的部分文件2.
点击【Init】3.
点击【RestoreFiles】4.
检查日志返回的taskId、资源修复进度和修复结果","不会修复文件,不会返回taskId和获取资源修复进度回调、修复结果回调","待自动化","P0","是","否","Puffer-新特性"用例集",,"[201908新增]测试说明","[获取目录下的文件数量用例集]","资源类目ID(Productid):1000076资源结构示例:主要考虑是资源结构不能太单一,有层级,覆盖各种情况目录test下仅包含目录A、子目录A包含子目录B、25个子文件和空目录F、子目录B仅包含子目录C、子目录C包含子目录D和35个子文件、子目录D包含45个子文件.
目录test下共有105个文件.
测试说明",,"Puffer获取资源目录文件数量-目录下有子目录","目录下有子目录1、获取目录A下的文件数量且不包含子目录2、获取目录A下的文件数量且包含子目录","1.
配置:Productid:10000762.
目录下有子目录Dir传入:test/A","不包含子目录:不勾选【hasSubDir】1.
点击【Init】2.
点击【GetDirFileCnt】包含子目录:勾选【hasSubDir】3.
点击【Init】4.
点击【GetDirFileCnt】","2.
期待返回结果25个文件4.
期待返回结果105个文件","已自动化","P2","是",,"[201912新增用例]【Puffer】新增puffer配置参数,设置eifs更新时是否删除旧文件","实现原理:1.
Puffer初始化配置文件新增配置参数,用于设置更新Eifs文件时,是否删除旧文件2.
Puffer.
eifs文件已经存在,并且pufferserver上有更新版本的文件,当pufferinit初始化的时候,发现文件md5不匹配,根据参数配置,此时可以不删除旧文件3.
不被删除的旧文件可以继续使用;4.
当调用接口DownloadFile时会重新下载并替换旧文件","链接:http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512856713315url_cache_key=83b321a0a8ae43081683388ae49488c8&action_entry_type=stories",,,,,"测试说明",,"Puffer(新增配置参数RemoveOldWhenUpdate),RemoveOldWhenUpdate默认设置为True,无关联资源","RemoveOldWhenUpdate默认设置为True,无关联资源,初始化之后立即删除MD5不匹配的文件","无关联资源","1.
ProductId=1000007,ForceDownload=false,RemoveOldWhenUpdate=true;2.
更新类型设置为【SeparateRes】;3.
点击【Init】,再点击【DownFile】,点击【IsFileReady】;4.
修改ProductId=1000011;5.
点击【Init】,再点击【IsFileReady】.
","1.
步骤3初始化成功、下载文件成功、IsReady=105且FilesExist=105;2.
步骤5初始化成功、IsReady=100且FilesExist=100(FileNotExist=5).
","待自动化","P0","是",,"Puffer(新增配置参数RemoveOldWhenUpdate),RemoveOldWhenUpdate设置为False,关联Dolphin程序","RemoveOldWhenUpdate设置为False,关联Dolphin程序,初始化之后不删除MD5不匹配的文件","关联Dolphin程序","1.
ProductId=1000007,ForceDownload=false,RemoveOldWhenUpdate=false;2.
更新类型设置为Res4DolphinApp;3.
点击【Init】,再点击【DownFile】,点击【IsFileReady】;4.
修改ProductId=1000011;5.
点击【Init】,再点击【IsFileReady】.
","1.
步骤3初始化成功、下载文件成功、IsReady=105且FilesExist=105;2.
步骤5初始化成功、IsReady=100且FilesExist=105(FileNotExist=0).
","待自动化","P1","是",,"[201912新增用例]puffer支持获取审核资源","从Apollo19合入特性:puffer支持获取审核资源1.
在PufferConfig增加isAuditVersion成员,表明该资源是否是审核版本.
如果isAuditVersion为true,则只能拉取到审核资源;否则只能拉取到普通资源.
","链接:http://tapd.
oa.
com/20378512/prong/stories/view/1020378512856538231url_cache_key=83b321a0a8ae43081683388ae49488c8&action_entry_type=stories#","注意:仅Unity支持",,,,"测试说明",,"Puffer(获取审核资源—仅Unity支持),isAuditVersion=true时,只能拉取到审核资源","isAuditVersion=true时,只能拉取到审核资源,Puffer下载最新版审核资源","初始化成功","1.
在控制台创建普通版本1.
0.
0.
0、2.
0.
0.
0、3.
0.
0.
0和审核版本4.
0.
0.
0;2.
点击【Init】【GetFileID】【IsFileReady】【DownFile】【CheckFilesMD5】按钮;3.
下载文件是否成功,观察日志下载的是最新审核版本4.
0.
0.
0的资源.
","下载文件成功,下载的是最新审核版本4.
0.
0.
0的资源.
","待自动化","P0","是",,"[202007新增用例]需求单等内容记录","【【Puffer】提供GetBatchDirSizeCompressed接口】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512858815947","1.
"获取目录下全部文件大小"指的是控制台资源某个目录下的全部资源文件大小,是在ifs文件中的压缩大小,不是原始文件大小.

2.
支持最外层目录,根目录用".
/"表示.
3.
传入错误路径时,如GetBatchDirSizeCompressed("lalala",true),返回值是0",,,,,"测试说明",,"测试说明","资源类目ID(Productid):1000076资源结构示例:主要考虑是资源结构不能太单一,有层级,覆盖各种情况","目录test下仅包含目录A、子目录A包含子目录B、25个子文件和空目录F、子目录B仅包含子目录C、子目录C包含子目录D和35个子文件、子目录D包含45个子文件.
目录test下共有105个文件.
测试说明",,"Puffer(提供GetBatchDirSizeCompressed接口),传入根目录".
/",获取根目录下的全部文件大小(boolblSubDir:false)","传入根目录".
/",获取,获取到根目录下全部文件大小","1.
不包含子目录,boolblSubDir:false","1.
不勾选【hasSubDir】2.
Dir传入根目录".
/"3.
点击【Init】4.
点击【GetDirSize】","获取到根目录下的全部文件大小,nTotal有返回值(不包含根目录下子目录的所有文件大小)","待自动化","P0","是","是","Puffer(提供GetBatchDirSizeCompressed接口),dir传入根目录".
/",获取根目录下的全部文件大小(boolblSubDir:true)","dir传入根目录".
/",根目录下存在子目录、子文件,获取,获取到根目录下的全部文件大小","1.
包含子目录,boolblSubDir:true","1.
勾选【hasSubDir】2.
Dir传入目录路径".
/"3.
点击【Init】4.
点击【GetDirSize】","获取到根目录下的全部文件大小,nTotal有返回值","待自动化","P0","是","是","[202007新增用例]需求单等内容记录","【【Puffer】提供IsBatchDirReady接口】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512858815919","1.
nTotal当前文件夹下总文件数量=>是指资源目录下总文件数量,比如该资源目录下有100个文件,用户只指定下载了60个,那么nTotal返回的是1002.
nReady当前文件夹下Ready状态的文件数量3.
nNotReady当前文件夹下Not-Ready状态的文件数量=>指的是整个资源文件夹内所有NotReady的文件状态.
比如该资源目录下有100个文件,用户只指定下载了60个,其中40个已经都ready了,那么nNotReady返回的是60",,,,,"测试说明",,"测试说明","资源类目ID(Productid):1000076资源结构示例:主要考虑是资源结构不能太单一,有层级,覆盖各种情况","目录test下仅包含目录A、子目录A包含子目录B、25个子文件和空目录F、子目录B仅包含子目录C、子目录C包含子目录D和35个子文件、子目录D包含45个子文件.
目录test下共有105个文件.
","返回值:Uinty为返回日志里面"blReady"的值UE4为为返回日志里面"DirReadyRet"的值返回值为true时,对应Unity为True,UE4为1返回值为False时,对应Unity为False,UE4为0",,,,"测试说明",,"Puffer(提供IsBatchDirReady接口)未批量下载文件,初始化,判断A目录下所有文件是否可用","未批量下载文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:(1)不包含子目录,boolblSubDir:false(2)包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【IsDirReady】5.
勾选【hasSubDir】6.
Dir传入目录路径"test/A"7.
点击【Init】8.
点击【IsDirReady】","不包含子目录预期:返回值为False;nTotal返回25nReady返回0nNotReady返回25包含子目录预期:返回值为False;nTotal返回105nReady返回0nNotReady返回105","待自动化","P2","是",,"Puffer(提供IsBatchDirReady接口)指定A目录已批量下载全部文件,初始化,判断A目录下所有文件是否可用","指定A目录已批量下载全部文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:(1)不包含子目录,boolblSubDir:false(2)包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【DownloadDir】5.
点击【Init】6.
点击【IsDirReady】7.
勾选【hasSubDir】8.
重复2—6","不包含子目录预期:返回值为True;nTotal返回25nReady返回25nNotReady返回0包含子目录预期:返回值为True;nTotal返回105nReady返回105nNotReady返回0","待自动化","P2","是",,"Puffer(提供IsBatchDirReady接口)已经批量下载A目录下全部文件,删除已下好的5个文件,初始化,判断A目录下所有文件是否可用","已经批量下载A目录下全部文件,删除已下好的5个文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
不包含子目录,boolblSubDir:false2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【DownloadDir】5.
点击【IsDirReady】6.
删除已下好的5个文件7.
点击【Init】8.
点击【IsDirReady】","步骤5:返回值为True;_x000D_nTotal返回25_x000D_nReady返回25_x000D_nNotReady返回0步骤8:返回值为False;nTotal返回25nReady返回20nNotReady返回5","待自动化","P0","是",,"Puffer(提供IsBatchDirReady接口)未批量下载根目录下所有文件,初始化,直接判断根目录下所有文件是否可用","未批量下载根目录下所有文件,初始化,直接判断根目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:1.
不包含子目录,boolblSubDir:false2.
包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径".
/"3.
点击【Init】4.
反复点击【IsDirReady】5.
勾选【hasSubDir】6.
重复2—4","不包含子目录预期:返回值为true;nTotal返回0(可能返回为3,根目录下有目录列表等3个文件)nReady返回0nNotReady返回0包含子目录预期:返回值为False;nTotal返回105(可能返回为108,根目录下有目录列表等3个文件)nReady返回105nNotReady返回0","待自动化","P0","是",,"[202007新增用例]需求单等内容记录","【【Puffer】提供IsBatchDirReady接口】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512858815919","1.
nTotal当前文件夹下总文件数量=>是指资源目录下总文件数量,比如该资源目录下有100个文件,用户只指定下载了60个,那么nTotal返回的是1002.
nReady当前文件夹下Ready状态的文件数量3.
nNotReady当前文件夹下Not-Ready状态的文件数量=>指的是整个资源文件夹内所有NotReady的文件状态.
比如该资源目录下有100个文件,用户只指定下载了60个,其中40个已经都ready了,那么nNotReady返回的是60",,,,,"测试说明",,"测试说明","资源类目ID(Productid):1000076资源结构示例:主要考虑是资源结构不能太单一,有层级,覆盖各种情况","目录test下仅包含目录A、子目录A包含子目录B、25个子文件和空目录F、子目录B仅包含子目录C、子目录C包含子目录D和35个子文件、子目录D包含45个子文件.
目录test下共有105个文件.
","返回值:Uinty为返回日志里面"blReady"的值UE4为为返回日志里面"DirReadyRet"的值返回值为true时,对应Unity为True,UE4为1返回值为False时,对应Unity为False,UE4为0",,,,"测试说明",,"Puffer(提供IsBatchDirReady接口)未批量下载文件,初始化,判断A目录下所有文件是否可用","未批量下载文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:(1)不包含子目录,boolblSubDir:false(2)包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【IsDirReady】5.
勾选【hasSubDir】6.
Dir传入目录路径"test/A"7.
点击【Init】8.
点击【IsDirReady】","不包含子目录预期:返回值为False;nTotal返回25nReady返回0nNotReady返回25包含子目录预期:返回值为False;nTotal返回105nReady返回0nNotReady返回105","待自动化","P2","是",,"Puffer(提供IsBatchDirReady接口)指定A目录已批量下载全部文件,初始化,判断A目录下所有文件是否可用","指定A目录已批量下载全部文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:(1)不包含子目录,boolblSubDir:false(2)包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【DownloadDir】5.
点击【Init】6.
点击【IsDirReady】7.
勾选【hasSubDir】8.
重复2—6","不包含子目录预期:返回值为True;nTotal返回25nReady返回25nNotReady返回0包含子目录预期:返回值为True;nTotal返回105nReady返回105nNotReady返回0","待自动化","P2","是",,"Puffer(提供IsBatchDirReady接口)已经批量下载A目录下全部文件,删除已下好的5个文件,初始化,判断A目录下所有文件是否可用","已经批量下载A目录下全部文件,删除已下好的5个文件,初始化,判断A目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
不包含子目录,boolblSubDir:false2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径"test/A"3.
点击【Init】4.
点击【DownloadDir】5.
点击【IsDirReady】6.
删除已下好的5个文件7.
点击【Init】8.
点击【IsDirReady】","步骤5:返回值为True;_x000D_nTotal返回25_x000D_nReady返回25_x000D_nNotReady返回0步骤8:返回值为False;nTotal返回25nReady返回20nNotReady返回5","待自动化","P0","是",,"Puffer(提供IsBatchDirReady接口)未批量下载根目录下所有文件,初始化,直接判断根目录下所有文件是否可用","未批量下载根目录下所有文件,初始化,直接判断根目录下所有文件是否可用,正确返回blReady、nTotal、nReady、nNotReady的值","1.
需要分别测试"blSubDir"传入"true"和"false"的情况:1.
不包含子目录,boolblSubDir:false2.
包含子目录,boolblSubDir:true2.
资源类目ID(Productid):1000076","1.
不勾选【hasSubDir】2.
Dir传入目录路径".
/"3.
点击【Init】4.
反复点击【IsDirReady】5.
勾选【hasSubDir】6.
重复2—4","不包含子目录预期:返回值为true;nTotal返回0(可能返回为3,根目录下有目录列表等3个文件)nReady返回0nNotReady返回0包含子目录预期:返回值为False;nTotal返回105(可能返回为108,根目录下有目录列表等3个文件)nReady返回105nNotReady返回0","待自动化","P0","是",,"Puffer-获取文件列表+获取文件MD5等"用例集",,"[202008新增用例]需求单等内容记录","【【Puffer】新增接口获取指定文件md5信息】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859618881","【实现方法】1.
C#接口stringGetFileMd5(System.
UInt32fileId);2.
C++接口boolGetFileMd5(cu_uint32fileID,cu_uint32bufferSize,char*md5Buffer);",,"【测试要点】1.
Unity/UE4不同引擎下接口调用2.
确保接口返回md5值正确(写代码进行md计算并对比)3.
C++接口调用时,buffer应足够大小(>32)",,,"测试说明",,"Puffer(新增接口获取指定文件md5信息),初始化,下载完成,获取指定文件md5信息","初始化,下载完成,获取指定文件md5信息;返回获取结果,返回md5值正确","初始化成功","1.
点击Init2.
点击DownFile/DownloadDir/DownloadList3.
点击CopyFileNamesFromRes、4.
点击GetFileMD5Puffer/CheckMD5","返回获取结果,返回md5值正确.
(测试demo会返回正确的md5文件个数,不正确的返回文件名)比较三个MD5全部相等",,"P0","是",,"[202008新增用例]需求单等内容记录","【【Puffer】优化新建任务/删除任务过程中的线程同步问题】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859612227","【实现方法】GCloud内部实现时,做线程同步操作,可以修复此问题;(实现细节不赘述)另外,如CODM遇到的场景,当RemoveTask失败时,可以保存TaskID,并稍后再做RemoveTask操作,也可以解决这个问题.
",,"【测试要点】1.
模拟CODM应用场景,看是否可以重现该问题;2.
此需求应不影响原有逻辑,不影响正常应用;3.
此修改对Dolphin/Puffer均生效;(Dolphin不易出现,理论上不存在类似调用逻辑)",,,"测试说明",,"Puffer(移除任务),新建任务后立即删除任务,删除任务时不报错","新建任务后立即删除任务,删除任务时不报错","初始化成功","1.
点击Init2.
多次点击RemoveAfterDownload","1.
之前版本的Puffer报错2715811882.
优化线程同步问题之后不报错,移除任务成功",,"P0","是",,"[202008新增用例]需求单等内容记录","【【Puffer】初始化过程中,返回当前文件列表信息】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859502909","【实现方法】经过整体讨论,实现方案如下:1.
Puffer初始化过程中,通过回调函数通知app当前文件列表2.
只有全部回调通知结束后,puffer初始化才会返回【接口变动】1.
初始化新增showFileList字段(值为ShowCurrentFileListType)2.
增加回调函数OnPufferFileListItem(在OnInitReturn之前):本地已有的Puffer文件,一个回调对应一个文件(及文件状态PufferFileListStatus)",,"【测试要点】1.
应在gcloud控制台构造相应的puffer版本A,B,并且存在文件差异(新增,删除,修改,保持不变,四种类型的文件均存在)_x000D_2.
构造puffer版本场景,里面几千个文件,测试OnPufferFileListItem是否正常",,,"测试说明",,"测试说明","渠道号1:资源类目ID:1000081渠道号2:资源类目ID:1000082","渠道号11.
0.
0.
0:无关联:普通资源A2.
0.
0.
0:关联Dolphin程序:普通资源B3.
0.
0.
0:关联Dolphin资源:多文件版本A","渠道号21.
0.
0.
0:无关联:普通资源B2.
0.
0.
0:关联Dolphin程序:普通资源A3.
0.
0.
0:关联Dolphin资源:多文件版本B","版本B对于版本A的资源文件来说:新增200个文件,删除300个文件,修改150个文件,保持不变,四种类型的文件均存在(返回的回调文件个数存在细微差异可以不关注)",,,"测试说明",,"Puffer(初始化过程中返回文件列表信息),showFileList=Puffer_ShowCurrentFileList_DEL,sdcard上有puffer关联Dolphin程序资源版本A,更新到关联Dolphin资源版本B","showFileList=Puffer_ShowCurrentFileList_DEL,sdcard上有puffer关联Dolphin程序资源版本A,更新到关联Dolphin资源版本B,返回版本A存在但是版本B不存在的所有文件的OnPufferFileListItem回调,且文件状态为Puffer_FileListStatus_Delete,初始化成功","1.
本地没有Puffer资源A2.
版本B对于版本A的资源文件来说:新增,删除,修改,保持不变,四种类型的文件均存在3.
版本A上传控制台Dolphin程序关联,版本B上传控制台Dolphin资源关联","1.
下拉框ShowFileList选择Del,UpdateInitType选择无关联资源SeparateRes2.
点击Init3.
点击DownloadDir(.
/)4.
点击Uninit5.
UpdateInitType选择关联DolphinApp6.
点击Init","2.
初始化成功,无回调6.
返回版本A存在但是版本B不存在的所有文件的OnPufferFileListItem回调,且文件状态为Puffer_FileListStatus_Delete,初始化成功",,"P0","是",,"Puffer(初始化过程中返回文件列表信息),showFileList=Puffer_ShowCurrentFileList_ALL,sdcard上有puffer关联Dolphin程序资源版本A,更新到关联Dolphin资源版本B","showFileList=Puffer_ShowCurrentFileList_ALL,sdcard上有puffer关联Dolphin程序资源版本A,更新到关联Dolphin资源版本B,返回本地所有文件的OnPufferFileListItem回调,且文件状态为版本A和版本B相对应的状态,初始化成功","1.
本地没有Puffer资源A2.
版本B对于版本A的资源文件来说:新增,删除,修改,保持不变,四种类型的文件均存在3.
版本A上传控制台Dolphin程序关联,版本B上传控制台Dolphin资源关联3.
配置:渠道号1/Productid:10000811.
0.
0.
0:无关联:普通资源A2.
0.
0.
0:关联Dolphin程序:普通资源B渠道号2/Productid:10000821.
0.
0.
0:无关联:普通资源B2.
0.
0.
0:关联Dolphin程序:普通资源A","1.
下拉框ShowFileList选择ALL,UpdateInitType选择无关联资源SeparateRes2.
点击Init3.
点击DownloadDir(.
/)4.
点击Uninit5.
UpdateInitType选择关联DolphinApp6.
点击Init","2.
返回所有文件的OnPufferFileListItem回调,且文件状态为Puffer_FileListStatus_Normal,初始化成功6.
返回本地所有文件的OnPufferFileListItem回调,且文件状态为版本A和版本B相对应的状态,初始化成功",,"P0","是",,"Mapple-区服导航""Mapple-区服导航,正式发布环境和预发布环境,拉取目录树","拉取目录树,拉取到目录树信息,返回回调正常","1.
GCloud控制台已编辑区服信息并进行了预发布和正式发布2.
初始化可以成功","1.
输入正确的TreeID,如4(控制台已经发布的区服对应的TreeID)2.
点击【Init】3.
点击【QueryTree】(需要验证预发布花环境和正式环境)","1.
初始化成功日志initsucc2.
拉取到目录树信息,返回回调正常日志示例如下:QueryTreeresult:SuccessQueryTreeNode:id:2,pid:-1,name:domi,type:Category,tag:0Node:id:2,pid:-1,name:domi,.
.
.
.
.
.
.
.
name:建立新区,type:Category,tag:Hot","已自动化","P0","是","是","初始化成功后立刻点击【QueryTree】可能没反应,属于正常现象.
原因是此时还没与服务器连接成功.
可稍等一两秒,再点击按钮进行查询""Mapple-区服导航,拉取目录树回调中的TreeId校验","拉取目录树回调中的TreeId校验,简单校验回调中的TreeID与输入的TreeID一致","1.
GCloud控制台已编辑区服信息并进行了预发布和正式发布2.
初始化可以成功","1.
下拉框选择pre-dir.
.
.
.
的选项2.
点击【Init】;观察日志3.
输入正确的【TreeID】,如44.
点击【QueryTree】","1.
初始化成功日志initsucc2.
查询目录树日志示例如下:QueryTreeQueryTreeresult:Successtreeidis4(关注此行即可)QueryTreeNode:id:2,pid:-1,name:domi,type:Category,tag:0已自动化","P0","是","是","之前版本出现过这个错误此接口需要覆盖""Mapple-区服导航,正式发布环境和预发布环境,通过LeafID获取节点","通过LeafID获取节点,获取到节点信息,返回回调正常","1.
GCloud控制台已编辑区服信息并进行了预发布和正式发布2.
初始化可以成功","1.
下拉框选择pre-dir.
.
.
.
的选项2.
点击【Init】3.
输入正确的【TreeID】/【LeafID】4.
点击【QueryLeaf】","获取到节点信息,返回回调正常日志打印示例如下:QueryLeafQueryLeafresult:SuccessNode:id:4,pid:3,name:新增服,type:Leaf,flag:Unavailable","已自动化","P0","是","是","Mapple-区服导航,反复拉取目录树","反复拉取目录树,拉取成功,拉取一次就返回一次目录树信息回调","1.
GCloud控制台已编辑区服信息并进行了预发布和正式发布2.
初始化可以成功","1.
点击【Init】2.
反复点击【QueryTree】","拉取成功,拉取一次就返回一次目录树信息回调日志打印示例如下:GCloudTestDemo:InitGCloudTestDemo:QueryTreeGCloudTestDemo:GCloudTestDemo:QueryTreeresult:SuccessGCloudTestDemo:GCloudTestDemo:QueryTreeNode:id:2,pid:-1,name:domi,type:Category,tag:0GCloudTestDemo:QueryTreeNode:id:2,pid:-1,name:domi,type:Category,tag:0GCloudTestDemo:GCloudTestDemo:QueryTreeNode:id:3,pid:2,name:建立新区,type:Category,tag:HotGCloudTestDemo:QueryTreeNode:id:3,pid:2,name:建立新区,type:Category,tag:HotGCloudTestDemo:GCloudTestDemo:QueryTreeNode:id:4,pid:3,name:新增服,type:Leaf,tag:Hot,RecommendGCloudTestDemo:QueryTreeNode:id:4,pid:3,name:新增服,type:Leaf,tag:Hot,RecommendGCloudTestDemo:QueryLeafseq:1,treedId:2.
已自动化","P1","是","否","Mapple-区服导航,反复获取节点信息","指定LeafID反复获取指定节点信息,获取成功,获取一次就返回一次节点信息回调","1.
GCloud控制台已编辑区服信息并进行了预发布和正式发布2.
初始化可以成功","1.
点击【Init】2.
反复点击【QueryLeaf】","获取成功,获取一次就返回一次节点信息回调日志打印示例如下:GCloudTestDemo:QueryLeafGCloudTestDemo:GCloudTestDemo:QueryLeafresult:SuccessGCloudTestDemo:GCloudTestDemo:Node:id:4,pid:3,name:新增服,type:Leaf,flag:UnavailableGCloudTestDemo:Node:id:4,pid:3,name:新增服,type:Leaf,flag:Unavailable","已自动化","P1","是","否","Mapple-区服导航(空闲时间自动断开连接2),自动关闭连接后不进行初始化,拉取区服信息","自动关闭连接后不进行初始化,拉取区服信息拉取区服信息成功","1.
初始化可以成功2.
设置空闲时间>0s","1.
设置空闲时间(默认为3s),需要设置其它的时间看是否生效2.
点击【Init】3.
点击【QueryTree】/【QueryLeaf】4.
点击【IsConnected】,等待连接断开5.
再拉一次节点和目录信息","连接断开(即返回tdirIsconnected:False)后,不需要初始化,正常拉取到节点和目录信息结果","已自动化","P1","是","否","201904新增""Mapple-区服导航,多异常场景操作后,再次调用各接口功能","多异常场景操作后,多异常场景操作后,再次调用各接口功能,功能正常","初始化成功","1.
初始化成功2.
随意执行以下一种或几种操作:切换网络断网恢复锁屏恢复电话呼入接收信息回到主界面切换其他APP3.
点击【QueryTree】/【QueryLeaf】","正常拉取到目录树信息和获取节点信息","无法自动化","P1","是","否","LockStep-帧同步"用例集",,"[用例集]主流程-分场景"子用例集",,"LockStep-加入房间(单人)","加入房间(单人),初始化成功,加房成功","连接Staff-Wifi网络","1.
点击【Join】2.
若提示房间满了(joinroomfailed:roomisfull),可以退回到LockStep主界面重新进入,在RoomID下拉框切换一个RoomID,再点击【Join】","初始化成功加房成功返回RoomIDullRoomIDlog示例:InitializeSUCC,connectortodemosvr=true.
.
.
.
.
.
joinroomsucc,starttologin,dwGameSvrRoomID=11ullRoomID=171280821863322393LoginResult:Success,0,0PlayerID:4956Loginsucc","待自动化","P0","是",,"LockStep-发送就绪请求","发送就绪请求,返回加房日志,发送就绪请求成功","进房成功","1.
点击【Join】2.
点击【Ready】","1.
返回加房日志2.
发送就绪请求成功log示例:ReadyResult:Success,0,0,Readyforgamesucc","待自动化","P0","是",,"LockStep-收发数据","收发数据,收发数据成功","1.
进房成功2.
发送就绪请求成功","1.
点击【Join】2.
点击【Ready】3.
点击【Input】4.
点击【Pause/Resume】","1.
打印加房日志2.
打印发送就绪请求日志3.
收发数据成功不断打印log关注打印日志中有返回:InputSucc,.
.
.
.
.
recvrelaydata4.
点击Pause停止打印log","待自动化","P0","是",,"LockStep-发送广播消息","发送广播消息,发送广播消息成功","1.
进房成功2.
发送就绪请求成功","1.
点击【Join】2.
点击【Ready】3.
点击【Broadcast】","发送广播消息成功打印log中关注是否有返回SendBroadcastSucc,DataLenis100,Datais.
.
.
.
.
.
备注:DataLenis后可以是(0,100,1023,1024,1025,10000)中的任意值","待自动化","P0","是",,"LockStep-切换发送的帧率,发送数据","切换发送的帧率,发送数据,发送数据成功","连接Staff-Wifi网络","1.
InputFPS下拉框任意选择一个数据2.
点击【Join】3.
点击【Ready】4.
点击【Input】5.
点击【Pause/Resume】","如上所示1.
打印加房日志2.
打印发送就绪请求日志3.
返回收发数据日志","待自动化","P0","是",,"LockStep-切换接收的帧率,发送数据","切换接收的帧率,发送数据,发送数据成功","连接Staff-Wifi网络","1.
RecvFPS下拉框任意选择一个数据2.
点击【Join】3.
点击【Ready】4.
点击【Input】5.
点击【Pause/Resume】","如上所示1.
打印加房日志2.
打印发送就绪请求日志3.
返回收发数据日志","待自动化","P0","是",,"LockStep-IsrawUdp切换Udp协议/渠道","IsrawUdp切换Udp协议/渠道,返回收发数据日志","连接Staff-Wifi网络","1.
IsrawUdp下拉框选择【reliableUdp】2.
点击【Join】3.
点击【Ready】4.
点击【Input】5.
点击【Pause/Resume】","如上所示1.
打印加房日志2.
打印发送就绪请求日志3.
返回收发数据日志切换可靠Udp后关注打印日志中有返回:IsrawUdp:False","待自动化","P0","是",,"LockStep-logout登出房间","logout登出房间,登出房间成功","进房成功","1.
点击【Join】2.
点击【Logout】","返回加房日志登出房间成功关注打印日志中有返回:Logoutresult:Success,0,0","待自动化","P0","是",,"LockStep-Delete关闭房间","Delete关闭房间,关闭房间成功","数据数据收发成功","1.
点击【Join】2.
点击【Delete】","如上所示1.
打印加房日志2.
点击Delete后关注打印日志中有返回:closeroomsucc.
待自动化","P0","是",,"[用例集]主流程"子用例集",,"[用例集]支持IPv6-主流程"子用例集",,"[用例集]异常场景"子用例集",,"LockStep-网络断开","断开网络,返回正确的日志","1.
进房成功2.
发送就绪请求、数据成功","1.
点击【Join】2.
点击【Ready】3.
点击【Input】4.
点击【Pause/Resume】5.
设备断开网络","关注打印日志中有返回:Statechagned:Errorresult:NetowrkException,0,0,thenetworkis'treachable","无法自动化","P2","是",,"Queue"用例集",,"[202003新增用例]需求单等内容记录","【排队指定用户优先需求】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855687355","测试辅助:【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855825227","1.
可通过调整放行速度观察是否插队或者免排队成功.

2.
ZoneId1001、1002、10033.
白名单用户不受阈值和放行速度影响,白名单用户排队之后在线人数不会增加4.
在排队过程中通过杀进程或者断网模拟排队掉线",,,,"测试说明",,"修改放行速率会有延迟,在1分钟内生效""Queue(优先)管理端配置优先级标志位vip1、vip2,未携带标志位入队","管理端配置优先级标志位vip1、vip2,未携带标志位入队,正常排队、入队","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
有N人排队/无人排队3.
未达到在线阈值","1.
管理端配置优先级标志位vip1、vip22.
客户端输入【ZoneID】、【OpenID】、选择【QueueFlag】选择为空3.
点击【Initialize】,【JoinQueue】","正常排队、入队","无法自动化","P1","是",,"Queue(优先)管理端配置优先级标志位vip1、vip2,携带标志位vip1或者vip2入队","管理端配置优先级标志位vip1、vip2,携带标志位vip1或者vip2入队;插队成功,入队成功","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
有N人排队/无人排队3.
未达到在线阈值","1.
管理端配置优先级标志位vip1、vip22.
客户端输入【ZoneID】、【OpenID】、选择【QueueFlag】vip1或vip23.
点击【Initialize】,【JoinQueue】","插队成功,入队成功","无法自动化","P0","是",,"Queue(优先)携带标志位vip1或者vip2鉴权入队","携带标志位vip1或者vip2鉴权入队,插队成功,入队成功","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
管理端配置优先级标志位vip1、vip23.
有N人排队/无人排队4.
未达到在线阈值","1.
客户端点击【GuestLogin】、【GetLoginRet】2.
客户端输入【ZoneID】、【OpenID】、选择【QueueFlag】vip1或vip23.
点击【Initialize】,【JoinQueue】","插队成功,入队成功","无法自动化","P0","是",,"Queue(优先)携带标志位vip1或者vip2排队过程中掉线重新入队(joinkeep)","携带标志位vip1或者vip2排队过程中掉线重新入队(joinkeep),在joinkeep时间内,不重新入队;超过joinkeep,重新入队","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
管理端配置优先级标志位vip1、vip23.
已有M个vip1用户和N个vip2用户在排队","1.
客户端1和客户端2分别输入【ZoneID】、【OpenID】2.
客户端1先点击【Initialize】,【JoinQueue】、选择【QueueFlag】vip1(或vip2),GM工具插入15人,然后客户端2进行相同操作3.
客户端1杀进程或者断网,等待不超过joinkeep的时间4.
客户端1再次点击【JoinQueue】5.
客户端1杀进程或者断网,等待超过joinkeep的时间6.
客户端1再次点击【JoinQueue】","2.
排队中(客户端1排队位置在客户端2前面)4.
保持排队位置,不重新入队(客户端1仍然在客户端2前面)6.
重新入队,入队成功(客户端1不保持排队位置,客户端2先于客户端1入队,PassTime:客户端2﹤客户端1)","无法自动化","P1","否",,"Queue(优先)携带标志位vip1或者vip2排队成功掉线重新入队(gamekeep)","携带标志位vip1或者vip2排队成功掉线重新入队(gamekeep),在gamekeep时间内,不重新入队;超过gamekeep重新入队","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
管理端配置优先级标志位vip1、vip23.
已有M个vip1用户和N个vip2用户在排队","1.
客户端输入【ZoneID】、【OpenID】2.
点击【Initialize】,【JoinQueue】、选择【QueueFlag】vip1或vip23.
排队成功客户端不进行任何操作,等待不超过gamekeep的时间4.
再次点击【JoinQueue】5.
客户端不进行任何操作,等待超过gamekeep的时间6.
再次点击【JoinQueue】","2.
排队成功4.
排队成功(Token不变)6.
排队成功(Token改变)","无法自动化","P1","否",,"Queue(优先)携带标志位vip1或者vip2入队过程中取消排队,再重新入队","携带标志位vip1或者vip2入队过程中取消排队,再重新入队,取消排队成功,重新入队成功","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
管理端配置优先级标志位vip1、vip23.
已有M个vip1用户和M个vip2用户在排队","1.
客户端输入【ZoneID】、【OpenID】2.
点击【Initialize】,【JoinQueue】、选择【QueueFlag】vip1或vip23.
点击【ExitQueue】4.
点击【JoinQueue】","3.
取消排队成功4.
插队、入队成功","无法自动化","P1","否",,"Queue(优先)管理端未配置优先级标志位","管理端未配置优先级标志位,客户端携带标志位排队失败","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
管理端未配置优先级标志位","1.
客户端输入【ZoneID】、【OpenID】,选择【QueueFlag】vip1或者vip22.
点击【Initialize】,【JoinQueue】","携带标志位入队失败,UE4:errCode=12Unity:SystemError","无法自动化","P1","否",,"Queue(优先)管理端配置优先级标志位vip1、vip2,携带未配置标志位vip3入队","管理端配置优先级标志位vip1、vip2,携带未配置标志位vip3入队;插队失败,正常排队、入队","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
有N人排队/无人排队3.
未达到在线阈值4.
或者有可能其他appid配置了vip3标志位","1.
管理端配置优先级标志位vip1、vip22.
客户端输入【ZoneID】、【OpenID】、选择【QueueFlag】vip33.
点击【Initialize】,【JoinQueue】","携带未配置标志位入队失败,UE4:errCode=12;Unity:SystemError","无法自动化","P1","否",,"[202004_GCloud2.
0.
16新增用例]需求单等内容记录","【GCloudSDK排队Queue优化预估时间计算】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512857686285","测试辅助:【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855825227","按照tapd的链接内容进行操作,目前提供的接口都已记录在单中.

测试常用有:【设置在线】【批量加入一批队列】【设置放行条件】【业务开通/更新配置接口】",,,,"测试说明",,"[201911新增用例]Queue备注--基本概念","1、在线阈值:游戏服务器所能容纳的玩家人数上限2、当前在线数:游戏服务器目前的玩家人数3、当前排队数:还未连接上游戏服务器的玩家人数4、在线阈值和当前在线数决定排队系统是否放行:(1)当前在线人数=阈值时,排队系统不放行",,,,,,"测试说明",,"Queue备注--测试常用操作","【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855825227",,"按照tapd的链接内容进行操作,目前提供的接口都已记录在单中.
测试常用有:【设置在线】【批量加入一批队列】【设置放行条件】【业务开通/更新配置接口】",,,,"测试说明",,"Queue入队功能测试用例1--在线数小于阈值,排队人数==0","1、检测在线阈值功能是否生效.

当未达到在线阈值时,玩家可以排队进入游戏2、检测入队功能是否正常","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855825227","正常情况下:1、点击【Initialize】2、点击【JoinQueue】","1、有排队的回调日志显示2、有排队结束的回调日志","已自动化","P1","是",,"Queue入队功能测试用例2--在线数小于阈值,排队人数>0","1、检测在线阈值功能是否生效.

当未达到在线阈值时,玩家可以排队进入游戏2、检测入队功能是否正常","1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
排队人数>0【批量加入一批队列】","1、点击【Initialize】2、点击【JoinQueue】","1、有排队的回调日志显示2、有排队结束的回调日志","待自动化","P1","是",,"Queue退出队列功能测试用例1--排队中退出排队",,"1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
排队人数>0【批量加入一批队列】","1、点击【Initialize】2、点击【JoinQueue】3、在未完成排队的时候,点击【ExitQueue】","2、有排队的回调日志显示3、没有排队结束的回调日志","待自动化","P2","是",,"Queue退出队列功能测试用例2--连续调用入队退队","暂无手动测试操作","1.

测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/10203785128558252272.
排队人数>0【批量加入一批队列】","1、点击【Initialize】2、顺序调用【JoinQueue】、【ExitQueue】","无任何排队的回调日志","已自动化","P1","是",,"Queue退出队列功能测试用例3--入队后调用退出排队接口再入队",,"1.
测试辅助(管理端):【后台GM调试工具】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512855825227","1、点击【Initialize】2、点击【JoinQueue】3、入队结束回调出现后点击【ExitQueue】4、再次点击【JoinQueue】","2、第一次入队结束回调日志中有token14、第二次入队结束回调日志中有token2关键是token1跟token2相等","待自动化","P1","是",,"Queue鉴权模式用例1——鉴权排队",,,"1、点击【GuestLogin】2、点击【GetLoginRet】3、点击【InitQueue】4、点击【JoinQueue】","1、GetLoginRet后日志显示openid和token2、有排队的回调日志3、有排队通过的回调日志","已自动化","P1","是",,"Queue鉴权模式用例2——鉴权排队",,,"1、点击【GuestLogin】2、点击【GetLoginRet】3、修改openid为错误值4、下拉框设置为Guest和MSDKV5,点击【InitQueue】5、点击【JoinQueue】","1、GetLoginRet后日志显示openid和token2、有排队的回调日志显示失败3、有排队结束的回调日志,显示不通过,鉴权失败","已自动化","P1","是",,"Queue鉴权模式用例3——鉴权排队",,,"1、点击【GuestLogin】2、点击【GetLoginRet】3、修改【openid】为错误值4、下拉框设置为Guest和MSDKV5,点击【InitQueue】5、点击【JoinQueue】6、排队结束的回调显示之前点击【ExitQueue】","1、GetLoginRet后日志显示openid和token2、有排队的回调日志显示失败3、点击ExitQueue后不再显示回调日志","已自动化","P1","是",,"Queue异常场景用例1","测试上一次排队情况是否会影响本次,之前出现过第一次成功时,第二次在初始化失败情况下仍然用第一次成功的信息去排队",,"1、先选择无鉴权模式成功排队通过2、点击【GuestLogin】后快速点击【GetLoginRet】3、点击【InitQueue】4、点击【JoinQueue】5、点击【ExitQueue】","1、openid和token都为空2、初始化失败3、加入队伍失败4、调用退出队伍不崩溃","已自动化","P2","是",,"Queue排队操作过程中--多异常场景测试",,,"1、【批量加入一批队列】2、点击【Initialize】+点击【JoinQueue】3、在2过程中随意执行以下一种或几种操作:切换网络断网恢复锁屏恢复电话呼入接收信息回到主界面切换其他APP","1、不影响正常的排队操作和功能2、返回测试Demo若遇到超时的提醒,点击joinQueue应当可以保持队列位置继续排队","无法自动化","P2","是",,"【2020年7月22需求单记录】","【【Queue】排队组件优化需求】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512859112345",,,,,"PNull","测试说明",,"EnableManualUpdate——自动进行消息驱动",,,"1、不勾选【EnableManualUpdate】:初始化参数EnableManualUpdate默认设置为false2、进行基础功能回归","所有基础功能表现正常","已自动化","P0","是","是","EnableManualUpdate——手动进行消息驱动",,,"1、勾选【EnableManualUpdate】:初始化参数EnableManualUpdate默认设置为true2、进行基础功能回归","所有基础功能表现正常","已自动化","P0","是","是","IsServiceEnabled——获取排队功能是否可以用的云控配置值,开启排队服务",,,"1、在GCloud云控项目下配置QueueServiceEnabled的值为false2、启动测试Demo,查看日志中下发的配置3、调用排队sdk的基础功能接口","2、可查看到QueueServiceEnabled的配置3、所有基础功能表现正常","无法自动化","P1","是","否","GEM"用例集",,"Init","初始化","Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击Init按钮","Android侧:过滤日志看到[gsdk][Rsp]0_success_GSDKInitIOS侧:过滤"gsdk"关键字,日志看到"-[GSDKInitManagerresolver:didGetControlInfo:]_block_invoke***errCode===0,errmsg===success"",,,"否",,"SetEvent","登录流程未完成","点击Init按钮Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击SetInitEvent按钮,观察日志后再切后台.
","应用在前台运行时不上报,切后台后上报登录数据.

Android侧:切后台后,过滤到日志"isBack:1".
IOS侧:前台时:过滤"gsdk"关键字,日志看到"TheeventDictioaryis:",切后台后,日志看到:"Applicationdidenterbackground,reportthisloginmessage!
"",,,"否",,"SetEvent","登录流程埋点","点击Init按钮Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击SetInitEvent按钮","成功记录登录事件.
Android侧:过滤到日志"setEventtag:".
IOS侧:前台时:过滤"gsdk"关键字,日志看到"TheeventDictioaryis:"",,,"否",,"SetEvent","登录流程已完成","点击Init按钮Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击enter_success按钮,观察日志后再切后台.
","应用在前台运行时上报数据,切后台后不再次上报.

Android侧:前台时,过滤到日志"setEventtag:"和"isBack:0",切后台后,没有新的"isBack"日志出现.
IOS侧:前台时:过滤"gsdk"关键字,日志看到"TheeventDictioaryis:",切后台后,没有新的:"TheeventDictioaryis:"日志出现",,,"否",,"Start","启动数据采集","点击Init按钮Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击Start按钮","请求对局云控成功.
Android侧:过滤到日志""errno":0".
IOS侧:过滤"gsdk"关键字,日志看到"-[GSDKInGameSystemGSDKInnerStart:SceneID:RoomIP:]_block_invoke***errCode===0,errmsg===success"",,,"否",,"End","结束数据采集","点击Init和Start按钮Android通过adb设置日志输出等级:setproplog.
tag.
gsdkVERBOSE","点击End按钮","结束数据采集成功.
Android侧:过滤到日志"favg:".
IOS侧:过滤"gsdk"关键字,日志看到"[Info]GSDKEnd"",,,"否",,"正常场景+退后台,断网,锁屏等异常场景","运行测试程序->GEMTest->GEMTest",,""1.

先点击【Init】,再点击【Start】2.
然后遍历地点击【Init】、【start】、【End】"除外的其他21个按钮;3.
遍历按钮过程中进行退后台、断网、锁屏再恢复4.
最后点击【End】.
"","测试程序没有黑屏、崩溃、卡顿等现象",,,"是",,"GVoice""[用例集]TeamRoom-实时语音"子用例集",,"Init","初始化","无","1.
在OpenID输入框中输入openID2.
点击Init","初始化成功,显示"Init:gcloud.
chiji_cdn"+openID+""+url",,,"是",,"JoinTeamRoom","进入小房间","初始化成功","1.
输入RoomName,OpenID2.
点击Init2.
点击JoinRoom","加房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)",,,"是",,"JoinTeamRoom","多次进入小房间","初始化成功","1.
输入RoomName,OpenID2.
点击Init3.
多次点击JoinRoom","1.
第一次加入小房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)2.
第二次加入小房间失败",,,"是",,"QuitTeamRoom","退出小房间再加入小房间","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击QuitRoom5.
点击JoinRoom","1.
第一次加入小房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)2.
退出小房间成功,显示QuitTeamRoom3.
第二次加入小房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)",,,"是",,"QuitTeamRoom","点击一次QuitRoom","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击一次QuitRoom","1.
退房成功,显示QuitTeamRoom",,,"是",,"QuitTeamRoom","多次点击QuitRoom","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击多次QuitRoom","1.
第一次退房成功,显示QuitTeamRoom",,,"是",,"OpenMic","进房后仅开麦","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic","1.
开麦成功,说话对方能听到",,,"是",,"OpenMic","进房后多次开麦","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
多次点击OpenMic","1.
开麦成功,说话对方能听到",,,"是",,"OpenMic","仅关闭Mic后再打开Mic","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击CloseMic6.
点击OpenMic","1.
OpenMic可以听到声音2.
CloseMic听不到声音",,,"是",,"CloseMic","已进房关闭麦克风","进房成功,且未开启麦克风","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击CloseMic","1.
对方听不到声音",,,"是",,"CloseMic","已进房关闭麦克风","进房成功,已开启麦克风","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击CloseMic","1.
对方听不到声音",,,"是",,"CloseMic","已进房反复关闭麦克风","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
反复点击CloseMic","1.
对方听不到声音",,,"是",,"OpenSpeaker","进房后开启扬声器","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker","1.
可以听到对方的声音",,,"是",,"OpenSpeaker","进房后多次开启扬声器","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
多次点击OpenSpeaker","1.
可以听到对方的声音",,,"是",,"OpenSpeaker","仅关闭扬声器后再打开扬声器","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击CloseSpeakerer6.
点击OpenSpeaker","1.
OpenSpeaker可以听到声音2.
CloseSpeakerer听不到声音",,,"是",,"CloseSpeaker","实时语音中关闭扬声器","实时语音模式","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击CloseSpeakerer","1.
不能听到对方讲话",,,"是",,"CloseSpeaker","实时语音中反复关闭扬声器","实时语音模式","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
反复点击CloseSpeakerer","1.
不能听到对方讲话",,,"是",,"开麦开扬声器","进房后开麦开扬声器","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击OpenSpeaker","1.
讲话对方能听到2.
能听到对方讲话",,,"是",,"开麦开扬声器","进房后多次开麦开扬声器","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
多次点击OpenMic5.
多次点击OpenSpeaker","1.
点击次数为偶数次时,讲话对方不能听到,为奇数次时,讲话对方能听到2.
点击次数为偶数次时,不能听到对方讲话,为奇数次时,能听到对方讲话",,,"是",,"未进房","未进房多次点击OpenMic","未进房","1.
多次点击OpenMic","1.

开麦失败,返回值为8193(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"未进房","未进房多次点击OpenSpeaker","未进房","1.
多次点击OpenSpeaker","1.

开扬声器失败,返回值为8193(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"未进房","未进房多次点击QuitRoom","未进房","1.
多次点击QuitRoom","1.

返回值为8193(备注:返回值没有显示在显示屏上,log上存在)2.
显示"QuitTeamRoom"",,,"是",,"实时通话过程中","实时通话过程中,多次开Mic关Mic","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击OpenSpeaker6.
点击CloseMic7.
反复点击OpenMic8.
反复点击CloseMic","1.
当点击Mic次数为奇数次时,讲话对方能听到,否则对方听不到2.
能听到对方讲话",,,"是",,"实时通话过程中","实时通话过程中,多次开Speaker关Speaker","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker,点击OpenMic5.
点击CloseSpeakerer6.
多次点击OpenSpeaker7.
多次点击CloseSpeakerer","1.
当点击Speaker次数为奇数次时,能听到对方讲话,否则听不到2.
讲话对方能听到",,,"是",,"实时通话过程中","实时通话过程中多次退房再进房","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
点击QuitRoom7.
点击JoinRoom8.
反复6和7步动作","1.
退房打印日志:QuitTeamRoom再次进房打印日志:JoinTeamRoom",,,"是",,"连接蓝牙","连接蓝牙,进入实时语音",,"1.
连接蓝牙2.
输入RoomName,OpenID3.
点击Init4.
点击JoinRoom5.
点击OpenSpeaker6.
点击OpenMic","能成功进房,而且可以正常通话",,,"是",,"支持蓝牙耳机","初始连接蓝牙耳机","手机成功连接蓝牙耳机","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic","蓝牙耳机使用正常,可以正常通话",,,"是",,"支持蓝牙耳机","连接蓝牙耳机,再断开蓝牙耳机","连接蓝牙耳机","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
断开蓝牙耳机","未影响,可以正常通话",,,"是",,"语音voip模式","开麦","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic","1.
语音引擎voip模式2.
调节音量为通话音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式先进房,插入有线耳机","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
插入有线耳机","1.
语音引擎处于非voip模式2.
调节音量显示媒体音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式进房,连接蓝牙耳机","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
连接蓝牙耳机","1.
语音引擎处于非voip模式2.
调节音量显示媒体音量,说话对端听得见",,,"是",,"异常"是",,"房间名输入非合法值","房间名为非合法值",,"1.
输入RoomName为"对对对",OpenID2.
点击Init3.
点击JoinRoom","加房失败",,,"是",,"实时语音-长时间挂机","实时通话过程中长时间挂机",,"1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
长时间挂机","1.
可继续实时通话",,,"是",,"实时语音-断网","实时通话过程中断网再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
断开网络再恢复","1.
可继续实时语音",,,"是",,"实时语音-锁屏","实时通话过程中锁屏再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
锁屏再恢复","1.
可继续实时语音",,,"是",,"实时语音-退后台","实时通话过程中退后台再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退后台再恢复","1.
可继续实时语音",,,"是",,"实时语音-系统闹铃","实时通话过程中系统闹铃再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
系统闹铃取消之后再恢复","1.
可继续实时语音",,,"是",,"实时语音-启动第三方软件","实时通话过程中启动第三方软件再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
启动第三方软件再恢复","1.
可继续实时通话",,,"是",,"实时语音-接听电话","实时通话过程中接听来电再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接听来电再恢复","1.
可继续实时通话",,,"是",,"实时语音-接收短信","实时通话过程中接收短信再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接收短信再恢复","1.
可继续实时通话",,,"是",,"实时语音-打开第三方音乐播放","打开第三方音乐播放,开启实时通话过程中","实时通话过程中","1.
打开第三方音乐播放2.
输入RoomName,OpenID3.
点击Init4.
点击JoinRoom5.
点击OpenSpeaker6.
点击OpenMic","1.
第三方音乐被暂停2.
可继续实时通话",,,"是",,"实时语音-ios静音下插拔耳机","ios静音下插拔耳机","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
ios静音下插拔耳机","1.
可继续实时通话",,,"是",,"实时语音-接听QQ电话(微信电话)","实时通话过程中接听QQ电话(微信电话)再恢复","实时通话过程中","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接听QQ电话(微信电话)再恢复","1.
可继续实时通话",,,"是",,"支持蓝牙耳机-后台","连接蓝牙耳机进房成功退后台","1、进入房间成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
退后台","蓝牙耳机的听筒可以听到房间内其他人的声音,麦克风声音可以被听到,退后台,无法听到声音",,,"是",,"支持蓝牙耳机-接电话","连接蓝牙耳机进房成功接听电话","1、进入房间成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
接听来电","蓝牙耳机的听筒可以听到房间内其他人的声音,麦克风声音可以被听到,按home键之后,无法听到声音,可以正常接打电话",,,"是",,"支持蓝牙耳机-发消息","进房成功后连接蓝牙耳机发送QQ(微信)语音消息","1、进入房间成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
退后台,7.
打开微信,发送语音消息","蓝牙耳机的听筒可以听到房间内其他人的声音,麦克风声音可以被听到,退后台,无法听到声音,可以成功用微信发送语音消息",,,"是",,"支持蓝牙耳机-普通耳机","连接蓝牙耳机,再切换为普通耳机","1、进入房间成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
功能正常之后,关闭蓝牙耳机,切换为普通耳机","蓝牙耳机的听筒可以听到房间内其他人的声音,麦克风声音可以被听到普通耳机插入之后,功能正常",,,"是",,"禁言""forbid","同一team房间禁言",,"1.
点击jointeamroom2.
点击forbidmemvoice","1.
禁言成功,B讲话A听不到",,,"是",,"forbid","同一team房间进房后退房再进房再禁言",,"1.
点击jointeamroom2.
点击quitroom3.
点击jointeamroom4.
点击forbidmem","1.
禁言成功,B讲话A听不到",,,"是",,"forbid","同一team房间进房再禁言后退房再进房",,"1.
点击jointeamroom2.
点击forbidmem3.
点击quitroom4.
点击jointeamroom","1.
禁言失败,B讲话A听得到",,,"是",,"forbid","不同team房间禁言",,"1.
点击jointeamroom2.
点击forbidmem","1.
禁言失败,A和B不能互通",,,"是",,"forbid","不同team房间进房后退房再进房再禁言",,"1.
点击jointeamroom2.
点击quitroom3.
点击jointeamroom4.
点击forbidmem","1.
禁言失败,A和B不能互通",,,"是",,"forbid","不同team房间进房再禁言后退房再进房",,"1.
点击jointeamroom2.
点击forbidmem3.
点击quitroom4.
点击jointeamroom","1.
禁言失败,A和B不能互通",,,"是",,"支持蓝牙开关切换采集","默认采集源",,"1.
初始化引擎2.
进房,点击openmic3.
点击EnableBluetoothSCO","1.
日志打印为0,语音数据是从手机采集2.
通过手机说话,对端可以听到",,,"是",,"支持蓝牙开关切换采集","连接蓝牙耳机,采集源为蓝牙耳机",,"1.
初始化引擎2.
进房,点击openmic","1.
语音数据从蓝牙耳机采集2.
通过蓝牙耳机可以互通",,,"是",,"[用例集]NationalRoom-大房间"子用例集",,"Init","初始化","无","1.
在OpenID输入框中输入openID2.
点击Init","初始化成功,显示"Init:gcloud.
chiji_cdn"+openID+""+url",,,"是",,"JoinNationalRoom","主播正常加入大房间","角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom","1.
加房间成功,显示"JoinNationalRoom",默认是主播进房(注意:此处加房成功log不提示succ,可通过房间内其他成员说话或扬声器判断是否进房成功,log上会返回0)",,,"是",,"JoinNationalRoom","主播进入大房间多次点击JoinRoom","角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
多次点击JoinRoom","1.
第一次进入房间成功,返回0(备注:返回值没有显示在显示屏上,log上存在)2.
后续进房操作失败",,,"是",,"JoinNationalRoom","主播进入大房间退出大房间再加入","角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击QuitRoom5.
点击JoinRoom","1.
第一次加房间成功,返回值为0,可以设置播放背景音乐和麦克风说话2.
退出大房间成功3.
第二次加大房间成功,返回值为0,可以设置播放背景音乐和麦克风说话",,,"是",,"现在还没有设置背景音乐功能""JoinNationalRoom","听众正常加入大房间","角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom","1.
加房间成功,返回值为02.
可以正常听到背景音乐和主播的声音,不能说话",,,"是",,"JoinNationalRoom","听众进入大房间多次点击JoinRoom","角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
多次点击JoinRoom","1.
第一次进房成功,可以正常听到背景音乐和主播的声音,不能说话2.
后续进房操作失败",,,"是",,"JoinNationalRoom","听众进入大房间退出大房间再加入","角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击QuitRoom6.
点击JoinRoom","1.
第一次加房间成功,返回值为0,可以正常听到背景音乐和主播的声音,不能说话2.
退出大房间成功3.
第二次加大房间成功,返回值为0,可以正常听到背景音乐和主播的声音,不能说话",,,"是",,"QuitNationalRoom","主播正常退出大房间","角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom2.
点击QuitRoom","1.
退房成功2.
听众端听不到主播声音",,,"是",,"QuitNationalRoom","听众正常退出大房间","角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击QuitRoom","1.
退房成功2.
主播端直播不受影响",,,"是",,"OpenMic","主播仅开麦","进入大房间成功,角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic","1.
听众端可以正常听到主播的声音",,,"是",,"OpenSpeaker","主播仅开扬声器","进入大房间成功,角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker","1.
听不到声音",,,"是",,"开麦开扬声器","主播开麦开扬声器","进入大房间成功,角色是主播","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击OpenSpeaker","1.
主播端和听众端可以正常听到主播说话声音",,,"是",,"OpenMic","听众正常加入大房间,开麦","角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击JoinRoom6.
点击OpenMic","1.
加房间成功,返回值为0,可以正常听到背景音乐(背景音暂时没有),不能说话,返回8196(log上显示)",,,"是",,"OpenSpeaker","听众端开扬声器","进入大房间成功,角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击OpenSpeaker","1.
可以正常听到主播的声音",,,"是",,"CloseSpeaker","听众端关扬声器","进入大房间成功,角色是听众","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击CloseSpeaker","1.
不能听到任何声音",,,"是",,"主播切换成听众","大房间主播开麦时切换成听众","以主播身份进入大房间","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Anchor5.
点击OpenMic6.
点击OpenSpeaker7.
切换角色为Audience(去掉勾选的Anchor)8.
点击OpenMic9.
点击OpenSpeaker","能正常切换,能听到房间内其他主播说话,无麦克风说话权限,返回值为8196(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"主播切换成听众","大房间主播未开麦时切换成听众","以主播身份进入大房间","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Auchor5.
点击Speaker6.
切换角色为Audience(去掉勾选的Anchor)7.
点击OpenMic8.
点击OpenSpeaker","能正常切换,能听到房间内其他主播说话,无麦克风说话权限,返回值为8196(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"主播切换成听众","大房间主播切换成听众,退房,再次进房","成功进入国战语音房间","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Auchor5.
点击OpenMic6.
点击Speaker7.
切换角色为Audience(去掉勾选的Auchor)8.
点击OpenMic9.
点击OpenSpeaker10.
点击quit11.
切换角色为Auchor(勾选Auchor)12.
点击OpenMic13.
点击Speaker","重新进房后,以选择主播/听众模式进房,",,,"是",,"主播切换成听众","大房间主播切换成听众,离线语音,再次到大房间","成功进入国战语音房间","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Auchor5.
点击OpenMic6.
点击Speaker7.
切换角色为Audience(去掉勾选的Auchor)8.
点击OpenMic9.
点击OpenSpeaker10.
切换到离线语音再返回到大房间","回到大房间依然是听众,无麦克风权限",,,"是",,"听众切换成主播","大房间听众切换成主播","大房间听众切换成主播","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击openspeaker6.
切换角色为Auchor(勾选Auchor)7.
点击openmic","能正常切换,并获得麦克风说话权限",,,"是",,"连接蓝牙","连接蓝牙,进入大房间",,"1.
连接蓝牙,点击NationalRoom2.
输入RoomName,OpenID3.
点击Init4.
点击JoinRoom5.
点击OpenSpeaker6.
点击OpenMic","能成功进房,而且主播说话,听众端可以听到",,,"是",,"支持蓝牙耳机","初始连接蓝牙耳机","手机成功连接蓝牙耳机","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic","蓝牙耳机使用正常,可以正常通话",,,"是",,"支持蓝牙耳机","连接蓝牙耳机,再断开蓝牙耳机","连接蓝牙耳机","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
断开蓝牙耳机","未影响,可以正常通话",,,"是",,"语音voip模式","开麦","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic","1.
语音引擎voip模式2.
调节音量为通话音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式先进房,插入有线耳机","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
插入有线耳机","1.
语音引擎处于非voip模式2.
调节音量显示媒体音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式进房,连接蓝牙耳机","进房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
连接蓝牙耳机","1.
语音引擎处于非voip模式2.
调节音量显示通话音量,说话对端听得见",,,"是",,"异常"是",,"主播和听众多次切换","大房间主播和听众多次切换","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Auchor5.
点击OpenMic6.
点击Speaker7.
切换角色为Audience(去掉勾选的Auchor)8.
点击OpenMic9.
点击OpenSpeaker10.
切换角色为Anchor(勾选Auchor)11.
点击OpenMic12.
点击openspeak","能正常切换并获取麦克风权限",,,"是",,"主播切换成听众","断网时,大房间听众切换成主播","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
切换角色为Audience(去掉勾选的Auchor)5.
点击Speaker6.
断开网络7.
切换角色为Auchor(勾选Auchor)8.
点击OpenMic9.
点击OpenSpeaker","切换失败",,,"是",,"听众切换成主播","断网时,大房间听众切换成主播","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击openspeaker6.
断开网络7.
切换角色为Auchor(勾选Auchor)8.
点击openmic","切换失败",,,"是",,"长时间挂机","主播直播中长时间挂机","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
长时间挂机","主播可继续说话,听众端听得见",,,"是",,"锁屏","主播直播中锁屏再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
锁屏再恢复","主播可继续说话,听众端听得见",,,"是",,"退后台","主播直播中退后台再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退后台再恢复","主播可继续说话,听众端听得见",,,"是",,"系统闹铃","主播直播中系统闹铃再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
系统闹铃取消之后再恢复","主播可继续说话,听众端听得见",,,"是",,"启动第三方软件","主播直播中启动第三方软件再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
启动第三方软件再恢复","主播可继续说话,听众端听得见",,,"是",,"接听电话","主播直播中接听来电再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接听来电再恢复","主播可继续说话,听众端听得见",,,"是",,"接收短信","主播直播中接收短信再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接收短信再恢复","主播可继续说话,听众端听得见",,,"是",,"打开第三方音乐播放","主播打开第三方音乐播放,进入大房间","成功进入NationalRoom","1.
打开第三方音乐播放2.
输入RoomName,OpenID3.
点击Init4.
点击JoinRoom5.
点击OpenSpeaker6.
点击OpenMic","1.
第三方音乐被暂停2.
主播可继续说话,听众端听得见",,,"是",,"接听QQ电话(微信电话)","主播直播中接听电话(微信电话)再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
接听QQ电话(微信电话)再恢复","主播可继续说话,听众端听得见",,,"是",,"长时间挂机","听众听直播中长时间挂机","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击OpenSpeaker6.
长时间挂机","听众端能够正常听得见",,,"是",,"锁屏","听众听直播中锁屏再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击OpenSpeaker6.
锁屏再恢复","听众端能够正常听得见",,,"是",,"退后台","听众听直播中退后台再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
去掉勾选的Anchor4.
点击JoinRoom5.
点击OpenSpeaker6.
退后台再恢复","听众端能够正常听得见",,,"是",,"系统闹铃","听众听直播中系统闹铃再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
系统闹铃取消之后再恢复","听众端能够正常听得见",,,"是",,"启动第三方软件","听众听直播中启动第三方软件再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
启动第三方软件再恢复","听众端能够正常听得见",,,"是",,"接听电话","听众听直播中接听来电再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
接听来电再恢复","听众端能够正常听得见",,,"是",,"接收短信","听众听直播中接收短信再恢复","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
接收短信再恢复","听众端能够正常听得见",,,"是",,"打开第三方音乐播放","听众端打开第三方音乐播放,进入大房间","成功进入NationalRoom","1.
打开第三方音乐播放2.
输入RoomName,OpenID3.
点击Init4.
点击JoinRoom5.
点击OpenSpeaker","1.
第三方音乐被暂停2.
听众端能够正常听得见",,,"是",,"ios静音下插拔耳机","ios静音下插拔耳机","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
ios静音下插拔耳机","主播可继续说话,听众端听得见",,,"是",,"支持蓝牙耳机-后台","主播连接蓝牙耳机进房成功退后台","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
退后台","麦克风说话可以被听到,退后台,听众端无法听到声音",,,"是",,"支持蓝牙耳机-接电话","主播连接蓝牙耳机进房成功接听电话","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
接听来电","麦克风说话可以被听到,接听电话,听众端无法听到声音,可以正常接打电话",,,"是",,"支持蓝牙耳机-发消息","主播进房成功后连接蓝牙耳机发送QQ(微信)语音消息","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
退后台,7.
打开微信,发送语音消息","麦克风说话可以被听到,退后台,听众端无法听到声音,可以成功用微信发送语音消息",,,"是",,"支持蓝牙耳机-后台","听众连接蓝牙耳机进房成功退后台","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openspeaker5.
成功连接蓝牙耳机6.
退后台","听众端可以正常听到声音,退后台之后听不到声音",,,"是",,"支持蓝牙耳机-接电话","听众连接蓝牙耳机进房成功接听电话","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openspeaker5.
成功连接蓝牙耳机6.
接听来电","听众端可以正常听到声音,接听电话,听众端无法听到声音,可以正常接打电话",,,"是",,"支持蓝牙耳机-发消息","听众进房成功后连接蓝牙耳机发送QQ(微信)语音消息","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openspeaker5.
成功连接蓝牙耳机6.
退后台7.
打开微信,发送语音消息","听众端可以正常听到声音,退后台,听众端无法听到声音,可以成功用微信发送语音消息",,,"是",,"支持蓝牙耳机-普通耳机","连接蓝牙耳机,再切换为普通耳机","成功进入NationalRoom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击openmic,openspeaker,5.
成功连接蓝牙耳机6.
功能正常之后,关闭蓝牙耳机,切换为普通耳机","麦克风说话可以被听到,普通耳机插入之后,功能正常",,,"是",,"背景音乐""背景音乐","实时语音开启背景音乐","1、进入实时语音成功2、android下把test.
mp3放到sdcard目录下3、ios下把test.
mp3放到应用程序-》apollotestdemo-》documents文件夹里面","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom进房成功4.
点击startmusic,开启扬声器","1、本地扬声器可以听到背景音乐声音2、同房间的其他人也可以听到背景音乐声音",,,"是",,"[用例集]Message-离线语音""离线语音,初始化引擎","离线语音,初始化引擎","无","1.
离线语音2.
点击init","引擎初始化成功",,,"是",,"离线语音,正常录音","离线语音,正常录音","成功切换为离线语音模式","1.

离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord","1.
提示messageKeyappliedSucc1.
提示StartRecordsucc2.
正常录音录音",,,"是",,"离线语音,录音后再录音","离线语音,录音后再录音","成功切换为离线语音模式","1.

离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord后再次点击startRecord","1.
录音出错",,,"是",,"离线语音,已经开始录音,停止录音","离线语音,已经开始录音,停止录音","成功切换为离线语音模式","1.

离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord5.
stopRecord","1.
成功停止录音",,,"是",,"上传文件到服务器","离线语音,已经取得AuthKey,上传文件到服务器-成功UploadFile-上传文件到服务器","成功切换为离线语音模式","1.
离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile","1.
文件成功上传",,,"是",,"下载语音文件","离线语音,已经从服务器取得fileID,获取fileID从服务器下载语音文件--成功DownloadVoiceFile-下载语音文件","成功切换为离线语音模式","1.
离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download","1.
下载成功",,,"是",,"播放录音文件","离线语音,已经正常录音且停止录音,播放录音文件","成功切换为离线语音模式","1.

离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
startplay","1.
播放成功",,,"是",,"停止播放语音文件","离线语音,停止播放语音文件","成功切换为离线语音模式","1.

离线语音2.
已经初始化引擎3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
stopplay","1.
成功停止播放",,,"是",,"播放多段语音文件","离线语音,录制五段语音文件,播放多段语音文件-成功playAllFiles-播放多段语音文件","成功切换为离线语音模式","1.
离线语音2.
录制五段语音文件,播放多段语音文件-成功playAllFiles-播放多段语音文件","1.
播放成功,倒序播放录制的五段语音文件",,,"是",,"离线语音—锁屏","离线语音,锁屏解屏--录音录音时锁屏解屏","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
锁屏解屏5.
getAuthKey6.
startRecord说话锁屏解屏7.
stopRecord8.
点击uploadfile9.
点击download10.
startplay","1.
能正常播放录音及上传服务器及下载播放2.
提示stoprecordsuccplayrecordfilesucc",,,"是",,"离线语音—锁屏","离线语音,锁屏解屏--获取key获取key时锁屏解屏","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
锁屏解屏5.
点击getAuthKey后锁屏解屏6.
startRecord说话7.
stopRecord8.
点击uploadfile9.
点击download10.
startplay","1.
能获取到KEY2.
提示_resumesucc3.
log显示如:authkey=是",,"离线语音—锁屏","离线语音,锁屏解屏--上传语音文件上传语音文件到服务器时锁屏解屏","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
锁屏解屏5.
点击getAuthKey6.
startRecord说话7.
stopRecord8.
点击uploadfile后锁屏解屏9.
点击download10.
startplay","1.
能将语音文件上传到服务器2.
提示_resumesucc3.
提示sendrecfilesucc",,,"是",,"离线语音—锁屏","离线语音,锁屏解屏--下载语音文件下载语音文件时锁屏解屏","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
锁屏解屏5.
点击getAuthKey6.
startRecord说话7.
stopRecord8.
点击uploadfile9.
点击download后锁屏解屏10.
startplay","1.
能下载语音文件2.
提示_resumesucc3.
提示downloadvoicefilesucc",,,"是",,"离线语音—锁屏","离线语音,锁屏解屏--播放语音文件播放语音文件时锁屏解屏","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
锁屏解屏5.
点击getAuthKey6.
startRecord说话7.
stopRecord8.
点击uploadfile9.
点击download10.
点击startplay后锁屏解屏","1.
需要重新点击播放才能播放语音2.
提示_resumesucc3.
提示playdownfilesucc",,,"是",,"离线语音—后台","离线语音,后台--播放语音文件播放语音文件时后台","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
后台5.
点击getAuthKey6.
startRecord说话7.
stopRecord8.
点击uploadfile9.
点击download10.
点击startplay后台","1.
需要重新点击播放才能播放语音2.
提示_resumesucc3.
提示playdownfilesucc",,,"是",,"离线语音—断网","离线语音,获取key时断网再连网(断网再连网--获取key)","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey时断开网络在连网","1.
断开网络:获取不到key,log:error:networkexception2.
连接网络后:获取不到key3.
重新登入后:可以获取到key,log:recvgetauthkeyressucc",,,"是",,"离线语音—断网","离线语音,上传语音文件到服务器时断网再连网","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID5.
点击getAuthKey6.
startRecord说话7.
stopRecord8.
点击uploadfile时断网在连网","1.
提示networkexception2.
断开网络:第一次点击提示上传成功(实际是指调用接口成功,实际上传并未成功),第二次点击上传失败3.
连接网络后:点击失败4.
重新登入后:需要重新获取authkey才能上传",,,"是",,"离线语音—断网","离线语音,下载语音文件时断网再连网","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话6.
stopRecord7.
点击uploadfile8.
点击download时断开网络再连接","1.
断网后不能下载语音文件",,,"是",,"离线语音—断网","离线语音,播放语音文件时断网再连网","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay时断开网络再连接","1.
可以正常听到语音",,,"是",,"离线语音—来电","离线语音,录音时来电","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话,接听电话后挂断返回demo6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay","1.
能正常录音及播放文件",,,"是",,"离线语音—来电","离线语音,上传文件到服务器时来电","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话6.
stopRecord7.
点击uploadfile,接听电话后挂断返回demo8.
点击download9.
点击startplay","1.
能上传文件到服务器",,,"是",,"离线语音—来电","离线语音,获取authkey之前来电","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey时接听电话后挂断返回demo5.
startRecord说话6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay","1.
能获取到key2.
正常播放",,,"是",,"离线语音—来电","离线语音,下载语音文件前来电","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话6.
stopRecord7.
点击uploadfile8.
点击download前接听电话后挂断返回demo9.
点击startplay","1.
能下载语音文件2.
可以正常播放",,,"是",,"离线语音—来电","离线语音,播放语音过程中来电","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay后接听电话后挂断返回demo","1.
显示_resumesucc2.
需要重新点击playfile才能播放文件",,,"是",,"离线语音—第三方软件","离线语音,录音过程中运行第三方软件","成功切换为离线语音模式","1.

离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话时使用播放QQ音乐6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay","1.
能继续录音2.
录音正常播放",,,"是",,"离线语音—第三方软件","离线语音,运行手机自带软件--录音录音过程中运行手机自带软件","成功切换为离线语音模式","1.
离线语音2.
点击init3.
输入openID4.
点击getAuthKey5.
startRecord说话时使用自带软件录音6.
stopRecord7.
点击uploadfile8.
点击download9.
点击startplay","1.
能继续录音2.
正常播放",,,"是",,"离线语音—获取语音长度和时间","离线语音,录音结束后获取","成功切换为离线语音模式","1.

离线语音2.
获取语音时间及长度getfilemsg3.
录音结束后获取","1.
能正确获取录音时间和长度",,,"是",,"离线语音—设置录音时长","离线语音,输入时间为15*1000","成功切换为离线语音模式","1.

离线语音2.
离线语音设置时长(setmaxmsg)3.
输入时间为15*1000","1.
设置成功,日志如下:setmaxmsglentht=15000setmaxmsglenthtret=0录制语音时间为15秒,超过15秒后的不过不被录制上",,,"是",,"离线语音—长时间储存","离线语音,离线语音正常长期存储","成功切换为离线语音模式","1.

离线语音2.
离线语音长期储存3.
离线语音正常长期存储","1.
长期存储离线语音正常上传下载播放",,,"是",,"[用例集]Translate-翻译"子用例集",,"RSTT转文字—长时间录音(5分钟)","语音转文字,长时间录音(5分钟)","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord录音5分钟7.
stopRecord","1.
转文字成功",,,"是",,"RSTT转文字—短时间录音(30s)","语音转文字,短时间录音(30s)","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord录音30秒7.
stopRecord","1.
转文字成功",,,"是",,"RSTT转文字—语音转文字,多次翻译","语音转文字,多次翻译","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord7.
stopRecord8.
多次录制","1.
每次都能转文字成功",,,"是",,"RSTT转文字—语音转文字,第一次翻译失败,再次翻译","语音转文字,第一次翻译失败,再次翻译","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord7.
stopRecord翻译失败8.
再次翻译","1.
第二次成功翻译",,,"是",,"RSTT转文字—中切后台","流式转文字中切后台","成功切换为语音转文字模式","1.
点击StartRecord,说一段话,点击StopRecord,马上切后台2.
返回到demo","1-2.
正常翻译,无遗漏",,,"是",,"RSTT转文字—停止录制后不等待结果,马上开始新录制","流式转文字,停止录制后不等待结果,马上开始新录制","成功切换为语音转文字模式","1.
点击StartRecord,说一段话,点击StopRecord2.
马上重复第一个步骤","1.
会翻译最后一次录制的录音",,,"是",,"RSTT转文字—中未停止开始新录制","流式转文字中未停止开始新录制","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord7.
再次点击startRecord8.
点击stopRecord","1.
会翻译最后一次录制的录音",,,"是",,"RSTT转文字—来电","语音转文字,录音过程中接听来电再恢复","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
startRecord录音中接听电话再恢复7.
stopRecord","1.
转文字成功",,,"是",,"RSTT转文字—后台","语音转文字,录音过程中退后台再恢复","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
点击startRecord后后台再返回demo7.
stopRecord","1.
转文字成功",,,"是",,"RSTT转文字—断网再连网","语音转文字,转文字过程中断网再恢复","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
点击translate(RSTT)6.
点击startRecord后断网再恢复7.
stopRecord","1.
转文字成功",,,"是",,"STT转文字—长间录音","语音转文字,长时间录音(5分钟)","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord录音5分钟6.
stopRecord7.
点击Uploadfile8.
点击speech2Text","1.
转文字成功",,,"是",,"STT转文字—短时间录音","语音转文字,短时间录音(30s)","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord录音30秒6.
stopRecord7.
点击Uploadfile8.
点击speech2Text","1.
转文字成功",,,"是",,"STT转文字—锁屏","语音转文字,转文字过程锁屏","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord6.
stopRecord7.
点击Uploadfile后锁屏再恢复8.
点击speech2Text","1.
转文字成功",,,"是",,"STT转文字—断网再连","语音转文字,转文字过程断网再连","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord6.
stopRecord7.
点击Uploadfile断网再连接8.
点击speech2Text","1.
转文字成功",,,"是",,"STT转文字—退后台","语音转文字,转文字过程退后台","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord6.
stopRecord7.
点击Uploadfile退后台再返回demo8.
点击speech2Text","1.
转文字成功",,,"是",,"STT转文字—网络切换","语音转文字,转文字过程网络切换","成功切换为语音转文字模式","1.

语音转文字2.
点击init3.
输入openID4.
getAuthKey5.
startRecord6.
stopRecord7.
点击Uploadfile切换网络8.
点击speech2Text","1.
转文字成功",,,"是",,"语音转文字,录音结束后获取",,"成功切换为语音转文字模式","1.
语音转文字2.
获取语音时间及长度getfilemsg(RSTT和stt一样)3.
录音结束后获取","1.
能正确获取录音时间和长度",,,"是",,"[用例集]RangeRoom-多房间"子用例集",,"Init","初始化","无","1.
在OpenID输入框中输入openID2.
点击Init","初始化成功,显示"Init:gcloud.
chiji_cdn"+openID+""+url",,,"是",,"JoinRange","进入多房间","初始化成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange","加房间成功,显示JoinRoom[RoomName]:JoinRoomSuccwithmemmber:1(递增数值)",,,"是",,"JoinRange","多次进入多房间","初始化成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange","1.
第一次加入多房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)2.
第二次加入多房间失败",,,"是",,"QuitRange","退出多房间再加入多房间","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击QuitRange6.
点击JoinRange","1.
第一次加入多房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)2.
退出多房间成功,显示QuitTeamRoom3.
第二次加入多房间成功,显示JoinRoom[roomname]:JoinRoomSuccwithmemmber:1(递增数值)",,,"是",,"QuitRange","点击一次QuitRange","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击一次QuitRange","1.
退房成功,显示QuitRangeRoom",,,"是",,"QuitRange","多次点击QuitRange","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击多次QuitRange","1.
第一次退房成功,显示QuitRangeRoom",,,"是",,"OpenMic","进房后仅开麦","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic6.
默认是勾选了mic(确认可以点击两次未勾选和勾选)","1.
开麦成功,说话对方能听到",,,"是",,"CloseMic","已进房关闭麦克风","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击OpenMic6.
去掉勾选了的Mic(QuitRange后的)","1.
对方听不到声音",,,"是",,"OpenSpeaker","进房后开启扬声器","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenSpeaker6.
默认是勾选了spk(确认可以点击两次未勾选和勾选)","1.
可以听到对方的声音",,,"是",,"CloseSpeaker","进房后关闭扬声器","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123"),OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击OpenSpeaker6.
去掉勾选了的spk","1.
不能听到对方讲话",,,"是",,"开麦开扬声器","进房后开麦开扬声器","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总的OpenSpeaker6.
默认是勾选了mic和spk(确认可以点击两次未勾选和勾选)","1.
讲话对方能听到2.
能听到对方讲话",,,"是",,"开麦开扬声器","进房后多次开麦开扬声器","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
多次点击勾选框的mic和spk","1.
点击次数为偶数次时,讲话对方不能听到,为奇数次时,讲话对方能听到2.
点击次数为偶数次时,不能听到对方讲话,为奇数次时,能听到对方讲话",,,"是",,"未进房","未进房多次点击OpenMic","未进房","1.
多次点击OpenMic","1.

开麦失败,返回值为8193(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"未进房","未进房多次点击OpenSpeaker","未进房","1.
多次点击OpenSpeaker","1.

开扬声器失败,返回值为8193(备注:返回值没有显示在显示屏上,log上存在)",,,"是",,"未进房","未进房多次点击QuitRange","未进房","1.
多次点击QuitRange","1.

返回值为8193(备注:返回值没有显示在显示屏上,log上存在)2.
显示"QuitRangeRoom"",,,"是",,"实时通话过程中","实时通话过程中多次退房再进房","实时通话过程中","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk7.
点击QuitRange8.
点击JoinRange9.
反复7和8步动作","1.
退房打印日志:QuitRangeRoom再次进房打印日志:JoinRangeRoom",,,"是",,"连接蓝牙","连接蓝牙,进入实时语音",,"1.
连接蓝牙2.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID3.
点击Init4.
点击EnableMultiRoom5.
点击JoinRange6.
点击总OpenMic和总OpenSpeaker7.
确认已勾选的mic和spk","能成功进房,而且可以正常通话",,,"是",,"支持蓝牙耳机","初始连接蓝牙耳机","手机成功连接蓝牙耳机","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk","蓝牙耳机使用正常,可以正常通话",,,"是",,"支持蓝牙耳机","连接蓝牙耳机,再断开蓝牙耳机","连接蓝牙耳机","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk6.
断开蓝牙耳机","未影响,可以正常通话",,,"是",,"语音voip模式","开麦","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic","1.
语音引擎voip模式2.
调节音量为通话音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式先进房,插入有线耳机","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic7.
插入有线耳机","1.
语音引擎处于非voip模式2.
调节音量显示媒体音量,说话对端听得见",,,"是",,"语音voip模式","语音voip模式进房,连接蓝牙耳机","进房成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic7.
连接蓝牙耳机","1.
语音引擎处于voip模式2.
调节音量显示通话音量,说话对端听得见",,,"是",,"异常用例"是",,"长时间挂机","长时间挂机","加入吃鸡房间成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk7.
长时间挂机","均能互通,不影响通话",,,"是",,"异常用例","长时间位置不更新","加入吃鸡房间成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk7.
长时间位置不更新","均能互通,不影响通话",,,"是",,"异常用例","位置更新负数","加入吃鸡房间成功","1.
输入RoomName(两个RoomName都要输入,最好输入不同房间号,"111","123")OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange5.
点击总OpenMic和总OpenSpeaker6.
确认已勾选的mic和spk7.
A输入:-1#-2#-1#-55,B输入:-4#-5#-3#-20点击updatePos","1.
A和B能互通",,,"是",,"坐标下开麦开扬声器""仅team","进team房间,互通",,"1.
输入RoomNameA:吃鸡:123,team:111B:吃鸡:123,team:111,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
同一team,内部成员能互通",,,"是",,"同一个吃鸡房间,team不同","A在B半径范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,1B:吃鸡:123,team:222,2,2,2,4,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
team房间:不互通吃鸡房间:A听到B讲话",,,"是",,"同一个吃鸡房间,team不同","A和B都在对方半径范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,2B:吃鸡:123,team:222,2,2,2,4,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
team房间:不互通吃鸡房间:A,B能互通",,,"是",,"同一个吃鸡房间,team不同","A和B都不在对方半径范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,1B:吃鸡:123,team:222,2,2,2,1,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
A.
B不互通",,,"是",,"同一个吃鸡房间,team不同","A和B同team,C不同,C在A范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,1B:吃鸡:123,team:111,2,2,2,7C:吃鸡:123,team:222,6,6,6,7,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
team房间内:A听到B的声音B听到A的声音C听不到声音吃鸡房间内:A听到B的声音B听不到声音C听到B的声音",,,"是",,"同一个吃鸡房间,team不同","A和B同teamC和D同teamE单",,"1.
输入RoomNameA:吃鸡:123team:1111,1,1,1B:吃鸡:123team:1112,2,2,44C:吃鸡:123team:2224,4,4,1D:吃鸡:123team:2225,5,5,66E:吃鸡:123,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
吃鸡房间:A,听到B和D的声音B,听到D的声音C,听到B和D的声音D,听到B的声音E,听不到声音team房间:A和B互通C和D互通E听不到声音",,,"是",,"同一个吃鸡房间,team相同","B在A的半径范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,1B:吃鸡:123,team:111,2,2,2,4,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
team房间:A和B能互通吃鸡房间:A听到B的声音",,,"是",,"同一个吃鸡房间,team相同","A和B都不在对方半径范围内",,"1.
输入RoomNameA:吃鸡:123,team:111,1,1,1,1B:吃鸡:123,team:111,5,5,5,1,OpenID2.
点击Init3.
点击EnableMultiRoom4.
点击JoinRange,JoinRoom","1.
team房间:A和B能互通吃鸡房间:A和B互相听不到",,,"是",,"坐标检查""坐标检查","坐标一样,半径为0","加入吃鸡房间成功","1.
A和Bjoinchiji2.
A和Bopenmic,openspeaker3.
A输入:1110,B输入:1110点击updatePos","1.
不能互通",,,"是",,"坐标检查","坐标半径都为0","加入吃鸡房间成功","1.
A和Bjoinchiji2.
A和Bopenmic,openspeaker3.
A输入:0000,B输入:0000点击updatePos","1.
不能互通",,,"是",,"坐标检查","x,y,z,r传入负数,A和B都在半径范围内","加入吃鸡房间成功","1.
A和Bjoinchiji2.
A和Bopenmic,openspeaker3.
A输入:-1#-2#-1#-55,B输入:-4#-5#-3#-20点击updatePos","1.
A和B能互通",,,"是",,"坐标检查","x,y,z,r传入负数,A和B都在半径范围外","加入吃鸡房间成功","1.
A和Bjoinchiji2.
A和Bopenmic,openspeaker3.
A输入:-1#-2#-1#1,B输入:-4#-5#-3#1点击updatePos","1.
A和B不能互通",,,"是",,"坐标检查","x,y,z,r传入负数,A在B半径范围内","加入吃鸡房间成功","1.
A和Bjoinchiji2.
A和Bopenmic,openspeaker3.
A输入:-1#-2#-1#1,B输入:-4#-5#-3#66点击updatePos","1.
B说话A能听到",,,"是",,"坐标检查","坐标为非数字符","加入吃鸡房间成功","1.
joinchiji2.
openmic,openspeaker3.
输入非数字字符点击updatePos","1.
update失败",,,"是",,"坐标检查","坐标为0,半径为2的32次方","加入吃鸡房间成功","A:0#0#0#B:0#0#0#2的32次方",,,,"是",,"坐标检查","B在A半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,678)B传入(650,1892,2345,20)","1.
B能听到A说话,A听不到B说话",,,"是",,"坐标检查","A和B都在对方半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,678)B传入(650,1892,2345,820)","1.
A、B都可以听到对方讲话",,,"是",,"坐标检查","A和B都不在对方半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,67)B传入(650,1892,2345,20)","1.
A、B都听不到说话",,,"是",,"坐标检查","B在A和C半径范围内A在C半径范围内C在A半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,678)B传入(650,1892,2345,20)C传入(255,1892,2345,678)","1.
B能听到A、C说话C听到A讲话A听到c",,,"是",,"坐标检查","A,B,C都在对方半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,678)B传入(650,1892,2345,820)C传入(255,1892,2345,678)","1.
A、B、C均能互通",,,"是",,"坐标检查","B不在谁半径范围内C在A和B半径范围内A在C半径范围内","加入吃鸡房间成功","A传入(155,1892,2345,178)B传入(450,1892,2345,220)C传入(255,1892,2345,178)","1.
c能听到A和B说话B能听不到A听到C说话",,,"是",,"多房间禁言"是",,"fobid--单房间禁言","LBS房间禁言",,,,,,"是",,"fobid--单房间禁言","LBS房间禁言team房间",,,,,,"是",,"fobid--单房间禁言","Team房间禁言",,,,,,"是",,"fobid--单房间禁言","Team房间禁言lbs房间",,,,,,"是",,"fobid--多房间禁言","lbs房间进房后退小房间再进房",,,,,,"是",,"fobid--多房间禁言","lbs房间进房后退小房间再进房",,,,,,"是",,"[用例集]Gvoice-场景切换"子用例集",,"实时切离线(开麦开扬声器)","实时语音开麦开扬声器,切换到离线语音","加房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退房后切换到离线语音7.
进行离线语音","1.
离线语音正常",,,"是",,"实时切离线(关麦关扬声器)","实时语音关麦关扬声器,切换到离线语音","加房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
退房后切换到离线语音5.
进行离线语音","1.
离线语音正常",,,"是",,"离线切实时(关麦关扬声器)","离线语音切换到实时语音,实时语音,不开麦不开扬声器","离线语音播放成功,需要另一个手机直接进入实时语音开麦开扬声器","1.

离线语音2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
startplay9.
切换到实时语音,不开麦不开扬声器","1.
实时语音听不到对方说话,说话对方也听不到.
",,,"是",,"离线切实时(开麦开扬声器)","离线语音切换到实时语音,实时语音,开麦开扬声器","离线语音播放成功,需要另一个手机直接进入实时语音开麦开扬声器","1.

离线语音2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
startplay9.
切换到实时语音,开麦开扬声器","实时语音正常通话",,,"是",,"实时切转文字(开麦开扬声器)","实时语音开麦开扬声器,切换到转文字","加房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退房后切换到语音转文字7.
进行语音转文字","1.
可以正常语音转文字.
",,,"是",,"实时切转文字(关麦关扬声器)","实时语音关麦关扬声器,切换到转文字","加房成功","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
退房后切换到语音转文字5.
进行语音转文字","1.
可以正常语音转文字.
",,,"是",,"转文字切实时(关麦关扬声器)","转文字切换到实时语音,实时语音,不开麦不开扬声器","转文字成功,需要另一个手机直接进入实时语音开麦开扬声器","1.

语音转文字2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击Uploadfile8.
点击speech2Text9.
切换到实时语音,不开麦不开扬声器","1.
语音不互通",,,"是",,"转文字切实时(开麦开扬声器)","转文字切换到实时语音,实时语音,开麦开扬声器","转文字成功,需要另一个手机直接进入实时语音开麦开扬声器","1.

语音转文字2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击Uploadfile8.
点击speech2Text9.
切换到实时语音,开麦开扬声器","1.
语音互通",,,"是",,"转文字切离线","语音转文字切换到离线语音","转文字,离线语音正常","1.
语音转文字2.
切换到离线语音3.
进行离线语音","1.
可以正常离线语音",,,"是",,"离线切转文字","离线语音切换到语音转文字","转文字,离线语音正常","1.
语音转文字进行离线语音2.
切换到语音转文字3.
进行语音转文字","1.
可以正常翻译",,,"是",,"国战切离线(开麦开扬声器)","国战语音开麦开扬声器,切换到离线语音","进入主播模式","1.
点击Nationalroom,输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退房后切换到离线语音7.
进行离线语音","1.
离线语音正常",,,"是",,"国战切离线(关麦关扬声器)","国战语音关麦关扬声器,切换到离线语音","进入主播模式","1.
点击Nationalroom,输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
退房后切换到离线语音5.
进行离线语音","1.
离线语音正常",,,"是",,"离线切国战(关麦关扬声器)","离线语音切换到国战语音,实时语音,不开麦不开扬声器","离线语音播放成功,需要另一个手机直接进入国战语音开麦开扬声器","1.

离线语音2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
startplay9.
切换到国战语音,不开麦不开扬声器","1.
语音不能互通.
",,,"是",,"离线切国战(开麦开扬声器)","离线语音切换到国战语音,实时语音,开麦开扬声器","离线语音播放成功,需要另一个手机直接进入国战语音开麦开扬声器","1.

离线语音2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击download8.
startplay9.
切换到国战语音,开麦开扬声器","1.
语音正常通话",,,"是",,"国战切转文字(开麦开扬声器)","国战语音开麦开扬声器,切换到转文字","进入主播模式","1.
点击Nationalroom,输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenSpeaker5.
点击OpenMic6.
退房后切换到语音转文字7.
进行语音转文字","1.
可以正常语音转文字.
",,,"是",,"国战切转文字(关麦关扬声器)","国战语音关麦关扬声器,切换到转文字","进入主播模式","1.
点击Nationalroom,输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
退房后切换到语音转文字5.
进行语音转文字","1.
可以正常语音转文字.
",,,"是",,"转文字切国战(关麦关扬声器)","转文字切换到国战语音,国战语音,不开麦不开扬声器","转文字成功,需要另一个手机直接进入国战语音开麦开扬声器","1.

语音转文字2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击Uploadfile8.
点击speech2Text9.
切换到实时语音,不开麦不开扬声器","1.
语音不互通",,,"是",,"转文字切国战(开麦开扬声器)","转文字切换到国战语音,国战语音,开麦开扬声器","转文字成功,需要另一个手机直接进入国战语音开麦开扬声器","1.

语音转文字2.
输入openID,点击init3.
getAuthKey4.
startRecord5.
stopRecord6.
点击uploadfile7.
点击Uploadfile8.
点击speech2Text9.
切换到实时语音,开麦开扬声器","1.
语音互通",,,"是",,"[用例集]Gvoice-举报功能"子用例集",,"实时语音举报-teamroom","在teamroom进行举报","加入teamroom","1.
输入RoomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击OpenSpeaker6.
在ReportOpenidLIist中输入该房间其他openid,用英文,分开7.
ReportmemberIDLIist输入该房间其他memberID,用英文,分开8.
点击SetReportInfo9.
ReportOpenid中输入要举报的openid10.
Reportinfo随意输入数字11.
点击Report","1.
加房成功2.
点击Report后抓取日志可以看到CDNResponse-id:xxxxx==",,,"是",,"实时语音举报-rangeroom","在rangeroom进行举报","加入rangeroom","1.
输入rangeroomName,OpenID2.
点击Init3.
点击JoinRoom4.
点击OpenMic5.
点击OpenSpeaker6.
在ReportOpenidLIist中输入该房间其他openid,用英文,分开7.
ReportmemberIDLIist输入该房间其他memberID,用英文,分开8.
点击SetReportInfo9.
ReportOpenid中输入要举报的openid10.
Reportinfo随意输入数字11.
点击Report","1.
加房成功2.
点击Report后抓取日志可以看到CDNResponse-id:xxxxx==",,,"是",,"HttpDNS"用例集",,"Init","初始化","初始化成功","点击InitHttpDns按钮","初始化成功.
UI上看到"#HttpDnsinitfinished!
"",,,"是","是","Resolve","域名解析","点击InitHttpDns按钮,已初始化成功","输入框输入"www.
qq.
com",点击Resolve按钮","域名解析成功.
UI上显示域名解析结果.
",,,"是","是","Resolve","域名解析(错误域名)","点击InitHttpDns按钮,已初始化成功","输入框输入"1.
com",点击Resolve按钮","域名解析失败.

UI上显示的域名解析结果为空(或0;0),即"ResolveResultis:"/"ResolveResultis:0;0".
",,,"是","否","Resolve","断网解析","点击InitHttpDns按钮,已初始化成功","输入框输入"www.
qq.
com",断开网络点击Resolve按钮","域名解析失败.

UI上显示的域名解析结果为空(或0;0),即"ResolveResultis:"/"ResolveResultis:0;0".
",,,"是","是","Resolve","退后台再解析","点击InitHttpDns按钮,已初始化成功","1.
输入框输入"www.
qq.
com",点击Resolve按钮2.
退后台再恢复点击Resolve按钮","域名解析成功.
UI上显示域名解析结果.
",,,"是","是","Resolve","锁屏再解析","点击InitHttpDns按钮,已初始化成功","1.
输入框输入"www.
qq.
com",断开网络点击Resolve按钮2.
锁屏再恢复点击Resolve按钮","域名解析成功.
UI上显示域名解析结果.
",,,"是","是","TGPA"用例集",,"点击StartTGPA","点击StartTGPA","MainFunc进入成功,页面正常","1.
demoUI点击TGPATest2.
点击MainFunc3.
点击StartTGPA","打印相关日志,demo不崩溃,无闪退等",,,"是",,"反复点击StartTGPA","反复点击StartTGPA","MainFunc进入成功,页面正常","1.
demoUI点击TGPATest2.
点击MainFunc3.
反复点击StartTGPA","打印相关日志,demo不崩溃,无闪退等",,,"是",,"更新游戏数据","点击UpdateGameInfo","MainFunc进入成功,页面正常","1.
demoUI点击TGPATest2.
点击MainFunc3.
点击UpdateGameInfo","打印相关日志,demo不崩溃,无闪退等",,,"是",,"反复更新游戏数据","反复点击UpdateGameInfo","MainFunc进入成功,页面正常","1.
demoUI点击TGPATest2.
点击MainFunc3.
反复点击UpdateGameInfo","打印相关日志,demo不崩溃,无闪退等",,,"是",,"TSS"用例集",,"Android平台上执行自动化用例","自动化用例覆盖了tss的基本功能,执行自动化用例,观察结果.
如果有失败的用例,需与tss团队的人确认.
",,"1.

运行demo,进入:TssTest-->TssTest12.
点击InitTPTest-->StartTPTest;稍等至少10秒,点击CheckTPTest.
然后观察左侧日志面板输出的结果.
","期望步骤2中日志面板中输出的结果都应该为"suc",如果出现"failed",需与tss团队开发确认清楚.
",,,"是","是","IOS平台上执行自动化用例",,,"1.
运行demo,进入:TssTest-->TssTest12.
点击InitTPTest,观察左侧日志面板输出结果","左侧出现日志:initAndStartTPTest_I.
initAndStartTPTest_Ifinished.
",,,"是","是","APM"用例集",,"InitContext","初始化",,"点击InitContext按钮","初始化成功Android侧:过滤日志看到InitSuccessed及"ccfilefetchtimeis:XX",IOS侧:[APM]initContext",,,"是","否","debug模式""InitContext","初始化(断开网络)","测试机器断开网络","点击InitContext按钮,退出,再启动进入,点击InitContext按钮","获取策略失败,APM关闭Android侧:过滤日志看到"TApmEndInitret:-1"IOS侧:[APM]initContext",,,"是","否","debug模式""MarkLevelLoad","场景标记开始","点击InitContext按钮","点击InitContext按钮","场景标记开始Android侧:过滤到日志"MarkLevelLoad,Level:XXX".
IOS侧:[APM][TApmApiSingleInstancemarkLoadlevel:]",,,"是","否","android关键字是xclient,ios是[APM]""MarkLevelLoadCompleted","场景加载结束标记","点击InitContext按钮,点击MarkLevelLoad按钮","点击MarkLevelLoadCompleted按钮,观察日志","场景加载结束标记Android侧:过滤到日志enterlevelcommand,XXXIOS侧:[APM][TApmApiSingleInstancemarkLoadlevelCompleted]",,,"是","否","MarkLevelFin","场景完成标记","点击InitContext按钮,点击MarkLevelLoad按钮","点击MarlLevelFin按钮,观察日志","场景标记结束,数据上传Android侧:过滤到日志"MarkLeveFin,Level:XXX","FileSendsuccessfully".
IOS侧:[APM][TApmApiSingleInstancemarkLevelFin]",,,"是","否","PostStreamEvent","上传流式事件","点击InitContext按钮","点击PostStreamEvent按钮","上传流式事件Android侧:过滤到日志BeginSendStepEventbyTDMIOS侧:[APM]ReportBinaryByTDM",,,"是","否","UE_IOS:ReportBinaryByTDM""GetDeviceClass","获取云控机型分档","点击InitContext按钮","点击GetDeviceClass按钮","获取云控机型分档Android侧:过滤到日志"GetDeviceClass:Domain:XXX,result:XXX"IOS侧:[APM]currentdevicelevelis:XXX,configLevel:XXX",,,"是","否","UE4没有GetDeviceClass按钮""Tag","标签","点击InitContext按钮,点击MarkLevelLoad按钮","点击Tag按钮","Android侧:过滤到日志"BeginTag:XXXinLevelXXX".
IOS侧:[APM][TApmApiSingleInstancebeginTag:]",,,"是","否","MSDK"用例集",,"[用例集]登录模块"子用例集",,"Login-登陆,QQ登陆","QQ登陆,正常拉起QQ授权页,登陆成功","正常QQ同账号登陆","1.
左下拉框选择"QQ"2.
点击"Login"按钮","1.
正常拉起QQ授权页2.
登陆成功,返回结果ret:返回码0:正确,其他:失败msg:返回结果详细说明openid:统一openiduid:账号平台的用户ID,指定渠道有返回token:tokentoken_expire_time:token过期时间戳first:是否首次,1:是,2:否reg_channel_dis:首次注册的分发渠道user_name:用户昵称gender:性别,0:未定义;1:男;2:女birthdate:出生日期,格式"YYYY-MM-DD"picture_url:头像URL地址pf:pfpf_key:pf_keyneed_name_auth:是否需要进行实名认证channel_info:额外渠道信息",,,"是","是","Login-登陆,QQ获取登陆态","QQ获取登陆态,登录态获取正常","QQ登陆成功","1.
QQ登陆2.
点击"GetLoginRet"按钮","登陆态获取正常"retCode":0,"retMsg":"Success","portrait":"","channelUserInfo":{"access_token":"D470E409FAD3A097884979584C30CD74","user_nick_name":"","access_token_expire_time":0,"platform_info":""openID":"4047A71FDCB875A24F04441AE290FDB3"",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,查询个人信息","查询个人信息,成功获取个人信息","QQ登陆成功","1.
左下拉框选择"QQ"2.
点击"QueryUserInfo"按钮","成功获取个人信息",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,登出","登出,登出成功,无登录态","测试demo,QQ账号登陆正常","1.
QQ登陆之后2.
点击"Logout"登出3.
此时点击GetLoginRet"按钮","无登陆态",,,"是","是","Login-登陆,WeChat登陆","WeChat登陆,登陆成功","WeCaht账号成功","1.
左下拉框选择WeChat2.
点击Login","登陆成功,登陆态正常打印日志参照QQ登陆",,,"是","是","Login-登陆,WeChat登出","WeChat登出,登出成功,无登录态","测试demo,WeChat账号登陆正常","1.

点击【Login】,微信登陆成功后2.
点击【Logout】","无登陆态",,,"是","是","Login-登陆,游客登陆(ios)","游客登陆,登陆成功,登录态正常",,"1.
下拉框选择"Guest"2.
点击"Login"按钮","登陆成功,登陆态正常",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,Fackbook登陆","Fackbook登陆,登陆成功,登录态正常",,"1.
下拉框选择"Fackbook"2.
点击"Login"按钮)","登陆成功,登陆态正常",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,google登陆-Android","google登陆,登陆成功,登录态正常","手机支持google登陆功能","1.
下拉框选择"Google"2.
然后点击"Login"按钮","登陆成功,登陆态正常",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,iOS游戏中心登陆","iOS游戏中心登陆,登陆成功,登录态正常",,"1.
下拉框选"GameCenter"2.
点击"Login"按钮","登陆成功,登陆态正常",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,Twitter登陆","Twitter登陆,登陆成功,登录态正常","安装客户端","1.
启动demo2.
选择海外渠道3.
左下拉栏选择Twitter渠道4.
登陆","1.
登陆成功返回参数回调openid、access_token、pay_token信息(必填)返回参数ret为0:正确,其他:失败msg返回结果详细说明",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,Twitter登出","Twitter登出,登出成功,无登录态","测试demo,Twitter登陆正常","1.
Twitter登陆后,点击登出","登出成功无登陆态",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Login-登陆,QQ授权过程中取消授权","QQ授权过程中取消授权,登陆回调正常","拉起qq授权页","1.
拉起QQ授权页2.
取消授权,返回demo","登陆回调正常",,,"是","否","Login-登陆,WeChat授权过程中取消授权","WeChat授权过程中取消授权,登陆回调正常","拉起WX授权页","1.
拉起WX授权页2.
取消授权,返回demo","登陆回调正常",,,"是","否","Login-登陆,Facebook授权过程中取消授权","Facebook授权过程中取消授权,登陆回调正常","拉起facebook授权界面","1.
拉起facebook授权页2.
取消授权,返回demo","登陆回调正常",,,"是","否","Login-登陆,Google登陆自动刷新token","Google登陆自动刷新token,定时告诉后台刷新token并返回回调正常","Google登陆","1.
下拉框选择"Google"2.
点击"Login"按钮","1.
正常拉起Google授权页面2.
登陆成功3.
定时告诉后台刷新token并返回刷新token后返回{"ret":0,"msg":"userisloggedin.
","token":"ed14fa98607f0b2683cb8daf7f0d950cd6a25a53","channel_info":{"code":"4/uQDU27Om_JVCD9MMoOz3XGjpMRdO6NHVGorOH9oZNOwooVrLtYr3XBIYP2HB2AoIWmBEr99WUB64Ocwbv4aoFn8"}}",,,"是","否","1.
测试过程中,记得调整任务队列的心跳时间(ITOPTaskManager.
cpp文件的"TASK_PERIOD"字段)、刷新token任务执行间隔时间(ITOPRefreshTokenTask.
h文件的"REFRESH_TOKEN_INTERVAL"字段)和配置token剩余过期时间(ITOPConfig.
ini文件的"ITOP_REFRESH_TIMELINE"字段),以便测试""Login-登陆,LoginUI手机登陆、注册、修改密码","LoginUI支持手机登陆、注册、修改密码,能够注册、发验证码、登陆操作","目前手机邮箱登陆部署在海外服务","1.

点击注册按钮注册手机(如果没有账号)2.
填写手机3.
填写密码4.
发送验证码,按钮有倒计时5.
输入验证码6.
回到登陆页面7.
输入注册了的手机和密码登陆","1.
能够注册、发验证码、登陆操作;2.
有登陆提示,有回调,登陆成功登陆页自动关闭,不成功则保持在当前登陆页",,,"是","否","201912新增用例""[用例集]实名制"子用例集",,"身份证号链接:http://sfz.
ckd.
cc/"实名制,拉起认证页面","拉起认证页面,未实名认证的账号成功拉起,已认证的账号登陆不会拉起实名认证界面","未进行实名认证","1、左下拉框选择"QQ"2、点击"Login"按钮","1.
拉起实名认证页面,页面显示正常2.
已认证的账号登录不会拉起实名认证界面",,,"是","是","QQ和微信任选一个平台测试""[用例集]扫码登录"子用例集",,"Login-扫码登陆(仅支持WeChat),取消登陆","取消登陆,取消成功,WeChat未登陆",,"1、启动demo2、点击微信扫码登录3、点击取消","1、demo未登录",,,"是","否","Login-扫码登陆(仅支持WeChat),正常扫码登陆","正常扫码登陆,跳转至微信操作页面,WeChat登陆成功",,"1、启动demo2、点击微信扫码登录3、使用另一台手机微信扫描二维码4、在授权页面点击确认登录","1、demo登录成功跳转至微信操作页面2、查看个人信息,为扫码的微信账号信息",,,"是","是","Login-扫码登陆(仅支持WeChat),自动登陆","自动登陆,WeChat自动登陆成功",,"1、使用微信扫码成功登录2、结束demo进程3、启动demo","1、demo自动登录成功2、查看个人信息为扫码的微信账号信息",,,"是","否","Login-扫码登陆(仅支持WeChat),扫码登陆—登出","扫码登陆—登出,WeChat登出成功","微信扫码登录","1、扫描二维码登录2、点击登出","1、登出成功",,,"是","否","[用例集]快速登录及异账号"子用例集",,"快速登录-Q1","本地帐号票据有效,拉起帐号票据有效","1、以QQ帐号登录Sample,向好友A发送一条结构化消息2、手Q切换到A帐号","1、以QQ帐号B登录Sample2、打开手Q(A帐号),点击一条结构化消息,拉起Sample","1、Sample弹出异帐号提示框:你当前拉起的帐号与你本地的帐号不一致,请选择使用哪个帐号登陆:本地帐号、拉起帐号2、若选择本地帐号进行登录,则点击获取个人信息时,获取到的是QQ帐号B的个人信息;分享时提示与本地帐号不一致,是否继续,点击取消则取消分享,点击继续则以A帐号向好友发送分享消息(好友收到的分享是来自A,而不是来自B)3、若选择拉起帐号进行登录,则Sample切换以QQ帐号A登录,点击获取个人信息时,获取到的是QQ帐号A的个人信息,分享时无异帐号提示",,,"是","否","手Q异账号分享,且拉起demo,登入信息为登入demo信息,""快速登录-W1","本地帐号票据有效,拉起帐号票据有效","1、以QQ帐号登录Sample,向好友A发送一条结构化消息2、手Q切换到A帐号","1、以微信帐号B登录Sample2、打开手Q(A帐号),点击一条结构化消息,拉起Sample","1、Sample弹出异帐号提示框:你当前拉起的帐号与你本地的帐号不一致,请选择使用哪个帐号登陆:本地帐号、拉起帐号2、若选择本地帐号进行登录,则点击获取个人信息时,获取到的是微信帐号B的个人信息;分享时拉起微信分享页3、若选择拉起帐号进行登录,则Sample切换至手QA登录,点击获取个人信息时,获取到的是帐号手QA的个人信息,分享时无异帐号提示",,,"是","否","微信异账号分享拉起demo""快速登录-Q2","本地帐号票据有效,拉起帐号票据无效","1、以微信帐号登录Sample,向好友A发送一条结构化消息2、微信切换到A帐号登录","1、以QQ帐号B登录Sample2、打开微信(A帐号),点击一条结构化消息,拉起Sample","1、Sample弹出异帐号提示框:你当前拉起的帐号与你本地的帐号不一致,请选择使用哪个帐号登陆:本地帐号、拉起帐号2、若选择本地帐号进行登录,则点击获取个人信息时,获取到的是QQ帐号B的个人信息;分享时拉起手Q分享页3、若选择拉起帐号进行登录,则Sample返回登录页",,,"是","否","微信异账号分享在高版本微信中不支持""快速登录-W2","本地帐号票据有效,拉起帐号票据无效","1、以微信帐号登录Sample,向好友A发送一条结构化消息2、微信切换到A帐号登录","1、以微信帐号B登录Sample2、打开微信(A帐号),点击一条结构化消息,拉起Sample","1、Sample弹出异帐号提示框:你当前拉起的帐号与你本地的帐号不一致,请选择使用哪个帐号登陆:本地帐号、拉起帐号2、若选择本地帐号进行登录,则点击获取个人信息时,获取到的是微信帐号B的个人信息;分享时提示登录游戏的微信帐号与当前微信帐号不一致,是否继续,点击取消则取消分享返回Sample,点击确定则以A帐号向好友发送分享消息(好友收到的分享是来自A,而不是来自B)3、若选择拉起帐号进行登录,则Sample返回登录页",,,"是","否","微信异账号分享在高版本微信中不支持""快速登录-Q3","本地帐号票据有效,拉起帐号不带openid","1、以QQ帐号登录Sample,向好友A发送一条结构化消息2、手Q切换到A帐号","1、以QQ帐号B登录Sample2、打开手Q(A帐号),点击一条分享后面的小尾巴,拉起Sample","1、Sample不弹出异帐号提示,直接以QQ帐号B登录Sample2、点击获取个人信息,获取到的是QQ帐号B的个人信息;分享时提示与本地帐号不一致,是否继续,点击取消则取消分享,点击继续则以A帐号向好友发送分享消息(好友收到的分享是来自A,而不是来自B)",,,"是","否","快速登录-W3","本地帐号票据有效,拉起帐号不带openid","1、以QQ帐号登录Sample,向好友A发送一条结构化消息2、手Q切换到A帐号","1、以微信帐号B登录Sample2、打开手Q(A帐号),点击一条分享后面的小尾巴,拉起Sample","1、Sample不弹出异帐号提示,直接以微信帐号B登录Sample2、点击获取个人信息,获取到的是微信帐号B的个人信息;分享时拉起微信分享页",,,"是","否","qq异账号分享拉起demo""WeChat文字分享到朋友圈","微信相关测试","微信异帐号","1、选择"Friend_REQ_TEXT",然后点击"Share"按钮,2、异帐号提示窗口选择继续3、在拉起的WX界面中输入分享信息,点击发送4、发表成功跳回demo(当前版本)","跳转到分享结果界面",,,"是","否","微信异账号分享在高版本微信中不支持""微信异账号","同一渠道不同账号测试",,"1.
微信A登陆游戏2.
选择"Friend_REQ_INVITE",给微信好友B发送应用邀请3.
微信APP切换到B账号登陆4.
点击接收到的应用邀请","拉起应用,弹出异账号提醒选择框",,,"是","否","QQ和微信任选一个平台测试""Guest、微信异账号","微信拉起游客登陆的游戏","微信账号收到过应用邀请","1.

游客登陆游戏2.
进入微信客户端,点击之前接收到的应用邀请","拉起应用,弹出异账号提醒选择框",,,"是","否","Google、微信异账号","微信拉起Google登陆的游戏","微信账号收到过应用邀请","1.

Google账号登陆游戏2.
进入微信客户端,点击之前接收到的应用邀请","拉起应用,弹出异账号提醒选择框",,,"是","否","Facebook、微信异账号","微信拉起Facebook登陆的游戏",,"1.
Facebook账号登陆游戏2.
进入微信客户端,点击之前接收到的应用邀请","拉起应用,弹出异账号提醒选择框",,,"是","否","[用例集]分享模块"子用例集",,"Friend-分享,QQ文字分享到空间","QQ文字分享到空间,分享成功,空间分享内容显示正常","QQ登陆成功","1.
左下拉框选择"QQ"2.
右下拉框选择"Friend_REQ_TEXT"3.
然后点击"Share"按钮","1.
分享成功2.
空间分享内容显示正常",,,"是","是","微信低于6.
5.
8版本不支持视频分享,设计如此""Friend—分享,QQ链接分享到会话","QQ链接分享到会话,分享成功,会话内容分享内容显示正常","QQ登陆成功","1.
左下拉框选择"QQ"2.
右下拉框选择"Friend_REQ_LINK"3.
然后点击"Send"按钮","1.
分享成功2.
会话内容分享内容显示正常",,,"是","是","Friend—分享,WeChat图片分享到朋友圈","WeChat图片分享到朋友圈,分享成功,朋友圈分享内容显示正常","WX登陆成功","1.
左下拉框选择"WeChat"2.
右下拉框选择"Friend_REQ_IMG"3.
然后点击"Share"按钮","1.
分享成功2.
朋友圈分享内容显示正常",,,"是","是","Friend—分享,WeChat音乐分享到会话","WeChat音乐分享到会话,分享成功,会话分享内容显示正常","WX登陆成功","1.
左下拉框选择"WeChat"2.
右下拉框选择"Friend_REQ_MUSIC"3.
然后点击"Send"按钮","1.
分享成功2.
会话分享内容显示正常",,,"是","是","Friend—分享,WeChat小程序分享到会话","WeChat小程序分享到会话,分享成功,会话分享内容显示正常","WX登陆成功","1.
左下拉框选择"WeChat"2.
右下拉框选择"Friend_REQ_MINI_APP"3.
然后点击"Send"按钮","1.
分享成功2.
会话分享内容显示正常",,,"是","否","Friend—分享,Facebook链接,图片分享","Facebook链接(Friend_REQ_LINK),图片分享(Friend_REQ_IMG),分享成功","Facebook登陆","1.
登陆Facebook2.
Fridend模块-链接,图片分享","分享成功",,,"是","否","Friend—分享,Facebook链接,邀请发送到会话","Facebook链接(Friend_REQ_LINK),图片发送(Friend_REQ_INVITE),1.
发送成功2.
会话分享内容显示正常","Facebook登陆",""1.
登陆Facebook2.
Fridend模块-链接,邀请发送到好友,点击"send""","1.
发送成功2.
会话分享内容显示正常",,,"是","否","201912新增集成用例""Friend—分享,Android24以上Twitter文本,链接,图片分享","Android24以上Twitter文本(Friend_REQ_TEXT),链接(Friend_REQ_LINK),图片(Friend_REQ_IMG)分享成功","1、Android24以上机型,安装Twitter并能登陆成功","1、进入到海外模式,点击Friend2、Channe下拉框选择选择Twitter,ShareType下拉框分别选择Friend_REQ_TEXT、Friend_REQ_LINK、Friend_REQ_IMG进行分享","分享成功",,,"是","否","Friend—分享,添加QQ好友","QQ登陆,添加QQ好友拉起qq添加好友界面","对方不是好友","1.
左下拉框选择"QQ"2.
然后点击"AddFriend"按钮3.
输入好友的openid,点击确定","拉起qq添加好友界面",,,"是","否","Andriod拉起加好友界面,无论加好友成功,失败或取消,回调的是成功的日志这个问题设计如此""[用例集]浏览器模块"子用例集",,"WebView-浏览器,打开内置浏览器","打开内置浏览器,成功打开浏览器且显示正常",,"打开浏览器(点击openUrl)","1.
成功打开浏览器;2.
网页内容显示正常",,,"是","是","WebView-浏览器,js-关闭浏览器","js方法关闭内置浏览器,关闭浏览器成功","打开浏览器","1.
打开js浏览器2.
点击关闭Itop内置浏览器","1.
关闭浏览器成功;2.
无crash等现象",,,"是","是","WebView-浏览器,js-发生js数据到游戏","发生js数据到游戏,页面弹出jstestsuccess提示,测试demo返回回调","打开浏览器","1.
点击JS数据到Native","页面弹出jstestsuccess提示,测试demo返回回调",,,"是","否","WebView-浏览器,内置浏览器分享-5","右上角弹框分享,分享成功","facebook登陆","1.
打开浏览器2.
点击右上角facebook分享","1.
成功拉起facebook;2.
分享成功;3.
分享内容显示正常",,,"是","否","WebView-浏览器,QQ应用邀请发送到会话","浏览器Javascript接口,发送成功","QQ登陆","1、打开JS浏览器2、点击Friend_REQ_INVITE3、拉起分享页面点击分享","1.
提示发送成功;2.
好友收到分享的邀请消息",,,"是","否","WebView-浏览器,QQ视频分享到空间","浏览器Javascript接口,分享成功","QQ登陆","1、打开JS浏览器2、点击Friend_REQ_VIDEO3、拉起分享页面点击分享","1、打开空间可以看到分享的视频消息",,,"是","否","QQ视频分享到空间ios不支持""WebView-浏览器,WeChat链接分享到会话","浏览器Javascript接口,分享成功","WX登陆","1、打开JS浏览器2、点击Friend_REQ_LINK3、拉起分享页面点击分享","1、打开会话可以看到分享的链接消息",,,"是","否","WebView-浏览器,WeChat图片分享到朋友圈","浏览器Javascript接口,分享成功","WX登陆","1、打开JS浏览器2、点击Friend_REQ_IMG3、拉起分享页面点击分享","1、打开朋友圈可以看到分享的图片消息",,,"是","否","WebView-浏览器,网页内打开第三方App—打开WeChat","网页内打开第三方App—打开WeChat,打开WeChat成功","设备已安装微信(需要登陆)","1.
到DemoApp中Webview模块;2.
点击openUrljscall进入网页;3.
点击打开Wechat链接;","打开WeChat成功",,,"是","否","WebView-浏览器,长按保存图片","2.
内置浏览器中长按web页上的图片弹出保存图片弹窗,点击保存图片将图片保存至iOS系统相册、2.
Android自定义相册,允许权限保存成功,禁止权限保存失败","打开内置浏览器,web页带有图片内容","1.
内置浏览器打开image.
baidu.
com2.
长按页面中的某一张图片","1.
允许使用相册权限,图片可保存成功2.
禁止使用相册权限,图片保存失败",,,"是","否","WebView-浏览器,分享按钮的配置检查","分享按钮的配置检查—通过修改配置,显示和隐藏分享按钮显示和隐藏功能正常",,"1.
打开Webview场景,点击setShareEnable按钮,在弹窗中输入分享渠道2.
在WebView中打开浏览器","如果分享渠道设置为为NONE的时候,不显示分享按钮.

如果分享渠道名的时候设置为WeChat,QQ,Facebook,显示分享按钮,点击分享按钮后显示该渠道的图标.
渠道名以逗号分开",,,"是","否","[用例集]群组模块"子用例集",,"重要重要重要!
!
!
手q群测试用例执行需要使用绑定的会长账号登陆,加入qq群使用会员账号测试UnionID、UnionName、ZoneID是特定的"是",,"Group-群组(QQ),创建并绑定qq群","创建并绑定qq群,建群、绑群成功","会长QQ登陆","1.
下拉框选择"QQ"2.
然后点击"CreateGroup"按钮3.
unionid输入数字(该union为要绑定的工会id,如果该id已被其他人绑定,会提示绑定失败,此时需要更换其他数字)4.
zoneid随意输入数字("1"即可)5.
选择要绑定的qq群(需要为该qq号已创建的qq群)","建群、绑群成功",,,"是","否","会长账号:3258557976会员账号:3452712689zoneID:1;uniondID:999911;unionName:GCloud【如果提示221001(工会已有绑定群),可更改ZoneID测试】创建成功后日志回调有groupID字段,需要记一下,后面的用例执行需要用到""Group-群组(QQ),QQ加群接口","QQ加群接口,跳转加群页面,加群成功","1.
已建群2.
玩家/会员QQ登陆","1.
下拉框选择"QQ"2.
然后点击"JoinGroup"按钮","跳转加群页面,加群成功",,,"是","否","Group-群组(QQ),绑定已存在的qq群,qq群未被绑定","绑定已存在的qq群,qq群未被绑定,绑定qq群成功,返回回调正确","1.
QQ登陆2.
qq群未被绑定","1.
点击bindGroup2.
正确的输入下列参数(已存在qq群的参数)groupId:guildId:groupName:zoneId:roleId:3.
确定绑定","1.
绑定qq群成功;2.
返回回调正确",,,"是","否","Group-群组(QQ),获取群状态","获取群状态,测试demo回调正确","1.
已建群2.
QQ登陆","1.
下拉框选择"QQ"2.
然后点击"getGroupState"按钮3.
输入群guildId、zone、会长的openid4.
点击确认","测试demo回调正确,Status:返回实际群状态的返回码返回码中:0表示未绑定群组,1表示工会已绑定群组",,,"是","否","Group-群组(QQ),获取创建的QQ群列表","获取创建的QQ群列表,获取成功","1.
已建群2.
QQ登陆","1.
下拉框选择"QQ"2.
然后点击"getGroupList"按钮","获取成功",,,"是","否","Group-群组(QQ),游戏内查询用户与群关系接口(群主和普通成员)","游戏内查询用户与群关系接口(群主和普通成员),返回relation关系正确","1.
已建群2.
QQ登陆","1.
下拉框选择"QQ"2.
然后点击"getGroupRelation"按钮(切换账号尽量验证多种群身份)输入框参数是输入"GroupID"","返回relation关系正确relation的返回码对应如下:1:群主,2:管理员,3:普通成员,4:非成员.
",,,"是","否","Group-群组(QQ),发送消息到QQ群","发送消息到QQ群,QQ群收到发送的信息回调正常","1.
已建群2.
QQ登陆","1.
QQ创建并绑定群成功2.
点击sendGroupMessage输入正确的参数","QQ群收到发送的信息回调正常",,,"是","否","201912新增集成用例""Group-群组(QQ),发送消息提醒会长绑群","发送消息提醒会长绑群,QQ收到"qq手游公众号"发送的绑群提醒(后端消息),测试demo返回回调正确","1.
已建群,群未绑定2.
成员登陆QQ","1.
下拉框选择"QQ"2.
然后点击"RemindTobindGroup"按钮3.
输入群guildId、zone、会长的openid4.
点击确认","1.
QQ收到"qq手游公众号"发送的绑群提醒(后端消息)2.
测试demo返回回调正确",,,"是","否","Group-群组(QQ),解绑qq群","解绑qq群提示解绑群success","1.
群主登陆QQ2.
已绑定QQ群","1.
下拉框选择"QQ"2.
然后点击"UnbindGroup"按钮3.
按顺序输入guidld,guildName,zoneid4.
确认","提示解绑群success",,,"是","否","Group-群组(WeChat),建群","建群,建群成功","会长WeChat登陆","1.
下拉框选择"Wechat"2.
然后点击"CreateGroup"按钮3.
unionid随意输入数字(该union为要绑定的工会id,如果该id已被其他人绑定,会提示绑定失败,此时需要更换其他数字)","建群成功",,,"是","否","Group-群组(WeChat),加群接口","Wechat加群接口,跳转加群页面,加群成功","1.
已建群2.
玩家/会员WeChat登陆","1.
下拉框选择"Wechat"2.
然后点击"JoinGroup"按钮","跳转加群页面,加群成功",,,"是","否","Group-群组(WeChat),获取群状态","获取群状态,测试demo回调正确","1.
已建群2.
WeChat登陆","1.
下拉框选择"WeChat"2.
然后点击"getGroupState"按钮3.
输入群guildId、zone、会长的openid4.
点击确认","测试demo回调正确,Status:返回实际群状态的返回码返回码中:0表示未绑定群组,1表示工会已绑定群组",,,"是","否","Group-群组(WeChat),游戏内查询用户与群关系接口","游戏内查询用户与群关系接口,返回relation关系正确","1.
已建群2.
QQ登陆","1.
下拉框选择"Wechat"2.
然后点击"getGroupRelation"按钮","返回relation关系正确relation的返回码对应如下:1:群主,2:管理员,3:普通成员,4:非成员.
",,,"是","否","Group-群组(WeChat),发送消息到微信群","发送消息到微信群,微信群收到发送的信息回调正常","1.
已建群2.
QQ登陆","1、微信创建并绑定群成功2、点击sendGroupMessage输入正确的参数","微信群收到发送的信息回调正常",,,"是","否","Group-群组(WeChat),解绑群","解绑群,提示解绑群success","1.
群主登陆QQ2.
已绑定QQ群","1.
下拉框选择"Wechat"2.
然后点击"UnbindGroup"按钮3、按顺序输入guidld,guildName,zoneid4、确认","提示解绑群success",,,"是","否","1个微信帐号在一款游戏下每天最多只能创建1个微信工会群,必须等24小时之后才能创建新的微信群;1个微信帐号在一款游戏下只能创建20个微信工会群,并且创建的微信工会群不能被删除.
因此调试时如果创建了多余20个该游戏的群,就需要换1个帐号创建工会群.
","1个微信帐号在一款游戏下每天最多只能加入2个微信工会群;1个微信帐号在一款游戏下最多只能加入50个微信工会群.
","1个qq帐号每天最多只能创建8次qq工会群(不区分游戏,即使解散了该群,也会计算1次建群);1个qq帐号最多只能创建100个qq工会群.
"[用例集]推送模块"是",,"Push-推送,信鸽平台注册推送","信鸽平台注册推送,返回错误码0,提示注册成功","调用Register()接口","调用Register()接口查看输出点击Register","返回错误码0,提示注册成功",,,"是","否","Push-推送,信鸽平台推送,已经注册,再次注册","信鸽平台推送,已经注册,再次注册,返回错误码0,提示注册成功","已经调用Register()","再次调用Register()接口,查看输出点击Register","返回错误码0,提示注册成功",,,"是","否","Push-推送,信鸽平台推送反注册","信鸽平台反注册,返回错误码0,提示注册成功","demo没有调用Register()接口","调用UnRegister()接口查看输出点击UnRegister","返回错误码0,提示反注册成功",,,"是","否","Push-推送,信鸽平台推送,已经反注册,再次反注册","信鸽平台推送,已经反注册,再次反注册,返回错误码0,提示反注册成功","已经调用Register()","调用UnRegister()接口查看输出点击UnRegister","返回错误码0,提示反注册成功",,,"是","否","Push-推送,信鸽平台推送设定标签","设定标签,返回错误码0,提示设定用户标签成功",,"调用用户标签SetTag()操作标签为单个点击SetTag","返回错误码0,提示设定用户标签成功",,,"是","否","Push-推送,信鸽平台推送删除标签","删除标签,返回错误码0,提示删除用户标签成功",,"调用删除标签DelTag()操作标签为单个点击DeleteTag","返回错误码0,提示删除用户标签成功",,,"是","否","Push-推送,信鸽平台推送-本地推送","信鸽本地推送,返回消息通知回调",,"选择"XG"点击"AddLocalNotify"","返回消息通知回调",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""[用例集]异常(Crash)上报模块"子用例集",,"Others(Crash上报),Crash上报","Crash上报,Crash信息上报到bugly网站并且上报信息正确","触发Crash","1、登录demo2、点击Other3、点击Crash按钮","1、触发Crash;2、Crash信息上报到bugly网站;3、上报信息正确",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""Others(Crash上报),Crash上报_QQ登陆","Crash上报_QQ登陆,Crash信息上报到bugly网站并且上报信息正确(!
!
bugly上报的用户ID为当前登陆账号的Openid)","QQ登录","1、QQ登录demo2、点击Other->触发Crash按钮","1、触发Crash;2、Crash信息上报到bugly网站;3、上报信息正确(!
!
bugly上报的用户ID为当前登录账号的Openid)",,,"是","是","内部需要关注下兼容性,没有划到top100&300兼容""[用例集]位置模块"子用例集",,"LBS-玩家位置功能,获取当前位置,附近好友,清除位置设定,查询当前IP所处国家","玩家可以获取当前位置,获取附近好友,清除位置设定,查询当前IP所处国家,获取正常,返回对应回调","先进行登录即先执行QQ登录或WX登录需要允许测试App应用获取位置权限并打开GPS","1.
左下拉框选择【QQ】2.
点击【Login】按钮3.
登录成功点击右下角【Back】4.
点击【LBS】5.
遍历点击【GetLocation】--【GetNearBY】--【ClearLBSInfo】--【GetIPInfo】(每点击一个按钮返回日志后再点击下一个按钮)","1.
测试程序无崩溃闪退等现象2.
遍历点击各按钮:关注是否返回日志:RetMsg:success获取玩家位置:从Log的回调来看,返回经纬度数获取玩家好友信息、获取获取IP对应国家Log返回相符","待自动化",,"是","是","较高优先级,集成测试补充用例""[用例集]公告模块"子用例集",,"Others(公告),获取公告","获取公告,获取到公告数据","1.
后台下发公告2.
测试demo切换到海外","1.
启动demo2.
在Others中点击LoadNotice3.
点击ok","获取到相关公告数据ret返回码0:正确,其他:失败msg返回结果详细说明notice_list公告信息列表last_time此次拉取公告的服务器时间(客户端应该把这个时间暂存,下次拉取公告时候用这个值填充请求中的last_time)invalid_notice_id_list失效公告ID列表,是int的数组",,,"是","否","201912新增集成用例""Others(公告),按照版本号下发公告","按照版本号下发公告,只有过滤的版本可以正常收到公告","测试demo切换到海外","1.
打开公告管理端2.
添加公告3.
公告下发时使用版本过滤字段versionName、versionCode","只有过滤的版本可以正常收到公告,其它版本收不到",,,"是","否","201912新增集成用例""[用例集]工具模块"子用例集",,"微信deeplink跳转功能",,"1.
进入测试demo,MSDKMain界面,先拉起微信登录2.
点击Others"201912新增用例""Others(Deeplink-INDEX),跳转微信游戏中心首页","跳转微信游戏中心首页,正常跳转",,"1、GCloudDemo进入MSDK2、进入Others3、点击OpenIndexDeepLink","跳转微信游戏中心首页",,,"是","否","Others(Deeplink-DETAIL),跳转微信游戏中心详情页","跳转微信游戏中心详情页,正常跳转",,"1、GCloudDemo进入MSDK2、进入Others3、点击OpenDetailDeepLink","跳转微信游戏中心详情页",,,"是","否","Others(Deeplink-LIBRARY),跳转微信游戏中心游戏库","跳转微信游戏中心游戏库,正常跳转",,"1、GCloudDemo进入MSDK2、进入Others3、点击OpenLibraryDeepLink","跳转微信游戏中心游戏库",,,"是","否","Others,具体跳转的url(需要在微信侧先配置好此url)","具体跳转的url(需要在微信侧先配置好此url),正常跳转",,"1、GCloudDemo进入MSDK2、进入Others3、点击OpenUrlDeepLink","正常跳转",,,"是","否","GRobot"用例集",,"[用例集]工具"子用例集",,"自助工具组件","打开进入小悦","1、提问【自助工具】触发;2、点击【自助工具】按钮触发;","1、触发正常,自助工具组件展示正常,交互正常2、流水显示正确(只查询当前角色),title展示无换行3、多个不同字段数的自助工具,滑动切换,无异常4、当流水信息为空时,显示无流水话术内容无错误5、点击查看更多详细流水()可打开流水详情页面6、横竖屏切换,自助工具组件样式无异常",,,,"是",,"自助工具详情页","点击自助工具组件的按钮(查看更多或箭头)打开自助工具详情页","打开自助工具详情页,查看更多流水信息","1、流水与字段对应,显示无错位;2、流水标题显示正确,与当前信息相符;3、可以选择查询范围查询1/3/7/30天的数据(后续取消30天流水信息查询,接口响应时间过长);4、流水超过10条显示下拉查看更多流水按钮,下拉后拉取后10条流水;5、流水按照时间倒序显示,最新的流水显示在最上侧;6、横竖屏切换,自助工具详情页样式展示无异常;7、点击关闭按钮可关闭流水详情页,返回小悦主页面,主页面样式无异常",,,,"是",,"钻石流水数据检查","角色有银币流水","打开自助工具中的钻石流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:时间、钻石变化、剩余量、原因;字段与数据对应显示无误;",,,,"是",,"已修正""金币流水数据检查","角色有金币流水","打开自助工具中的金币流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:时间、金币变化、剩余量、原因;字段与数据对应显示无误;",,,,"是",,"点券流水数据检查","角色有彩玉流水","打开自助工具中的点券流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:时间、点券变化、剩余量、原因;字段与数据对应显示无误;",,,,"是",,"已修正""排位流水数据检查","角色有元宝流水","打开自助工具中的排位流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:时间、排位变化、剩余量、原因;字段与数据对应显示无误;",,,,"是",,"已修正""道具流水数据检查","角色有道具流水","打开自助工具中的道具流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:时间、道具、变化量、原因;字段与数据对应显示无误;",,,,"是",,"登录流水数据检查","角色有登录流水","打开自助工具中的登录流水,检查数据","1、流水数据为当前角色数据;2、切换至其他角色或其他小区时,流水查询结果无误;3、流水查询字段为:登入时间、登出时间、时长(分钟);字段与数据对应显示无误;",,,,"是",,"无内容显示""礼包组件触发","打开进入小悦","通过文字输入,语音输入,浮框等方式提问触发礼包组件","1、礼包组件显示正常(礼包图片为后台上传,检查是否与整体风格相符);2、礼包领取按钮默认亮起,点击后即可领取礼包(一般无限制条件,礼包可见即可领取;特殊运营活动另)",,,,"是",,"领取礼包","打开进入小悦","点击领取按钮","按钮置灰,显示已领取",,,,"是",,"demo包角色非真实角色,无需领取礼包,只需检查礼包组件样式正常.
领取按钮可点击即可(必定提示已领取或领取失败稍后再试.
)""[用例集]问答"子用例集",,"首问横向列表触发","打开进入小悦","点击横向列表中的卡片","1、触发管理端配置的卡片内容,返回正确的话术,卡片,攻略,视频,浮框等.

2、检查卡片缩略图,标题,描述显示是否有异常(标题与描述有字数限制,超过后按照产品要求显示为不定样式,默认以.
.
.
展示)3、检查容器中背景,外框等颜色UI是否搭配",,,,"是",,"浮框触发","打开进入小悦","触发浮框提问","1、点击浮框自动发送提问浮框内容,小悦返回答案能够正常展示,内容与配置的相符2、推荐浮框逻辑另行确认",,,,"是",,"历史记录-无历史记录提示","无历史记录,或历史记录已拉到最顶端","再次在主页面下拉","1、页面上方会提示,无历史记录话术;2、下拉后不会拉取更多的历史记录信息",,,,"是",,"历史记录-自助工具显示","历史记录中之前触发自助工具组件","历史记录中查看流水显示、点击查看更多数据按钮","1、自助工具应显示当时时间点的流水内容2、点击查看更多按钮查询当时时间点的流水信息",,,,"是",,"历史记录-礼包组件显示","历史记录中之前触发礼包组件","历史记录中查看礼包组件显示,点击领取礼包按钮","1、礼包组件显示正常;2、点击领取后,若未领取过礼包,提示领取成功,并能正常到账;3、若已领取过礼包,则提示已经领取,不能重复领取礼包",,,,"是",,"历史记录-图片、视频、攻略组件显示","历史记录中之前触发图片、视频、攻略组件","历史记录中查看图片、视频、攻略组件显示,点击打开图片、视频、攻略组件","1、组件显示正常,话术与卡片的顺序展示正常;2、图片可点击打开大图并可下载,攻略可打开查看内容,视频点击可播放",,,,"是",,"有的历史记录中的视频无法点击播放部分视频可能后台被删除,无法再打开.
""历史记录-对话显示","历史记录中之前触发与小悦的对话(包括语音输入与文字输入)","历史记录中查看对话显示","1、对话时间流显示正常,不乱序.
显示对话的时间点;2、显示内容包括首问语(热点板块),用户文字输入内容,用户语音输入内容",,,,"是",,"敏感词过滤","打开进入小悦","使用语音输入或者文字输入敏感词","输入敏感词并发送后,敏感词不会成功发送,并提示发送内容包含敏感词",,,,"是",,"文本触发","打开进入小悦","提问触发","1、触发正常,展示文案正常,文本框左侧与所有的卡片左侧对齐2、注意文本中小悦相关的字眼,确认是否应出现",,,,"是",,"不支持横屏模式,sdk不支持转屏,无需测试横竖屏样式.
""图片组件触发","打开进入小悦","1、提问【地狱哮天】触发单图答案;2、提问【飞车小精灵】触发多图答案;","1、问法触发正常,图片展示正常,宽度在一屏以内显示2、规范单图显示的大小,以统一规格显示",,,,"是",,"有文本应答,没有展示单图已更换问法""图片样式检查","触发带有图片的答案","点击图片","1、点击图片可放大查看大图;2、大图中的文字清晰可辨认,3、再次点击屏幕可关闭大图(这里存在两种方式:点击图片内或点击图片外侧)4、关闭大图后,回到小悦主页面,页面布局无异常,原小图显示无异常",,,,"是",,"图片下载功能","触发带有图片的答案,点击图片打开大图","点击下载按钮","1、首次下载,会询问获取相册权限,确认后,即可下载图片,下载成功弹窗提示,之后可至相册查看图片;2、不提供相册权限,继续多次点击图片下载按钮,检查是否crash;3、图片未加载完成时,点击下载按钮,弹窗提示下载失败",,,,"是",,"首次询问之后仍然禁止权限,之后每次点击仍然弹出询问是否合理不同机型不完全一样,体验正常即可.
""攻略组件触发","打开进入小悦","提问【新版本内容】触发","1、触发正常,展示文案正常;2、攻略标题拉取正确,缩略图显示无异常;3、点击攻略卡片可打开查看攻略详细内容",,,,"是",,"攻略内容","点击攻略卡片打开攻略","查看攻略中的标题,文字,图片,背景等","1、攻略卡片点击后打开攻略窗口2、检查内容文字图片样式展示正常,清晰可辨认,标题显示正确,背景与文字颜色有明显区分3、检查攻略标题是否与卡片标题一致4、检查攻略正文字体是否与外部字体大小一致5、横竖屏切换后,攻略内容样式显示无异常6、关闭攻略后,返回小悦主页面,页面样式无异常",,,,"是",,"视频组件触发","打开进入小悦","提问【s联赛】触发","1、触发正常,展示文案正常;2、视频卡片封面缩略图显示正常;3、视频卡片上行的标题拉取正确;4、点击卡片可打开视频;5、横竖屏切换后,视频卡片样式显示无异常",,,,"是",,"没有卡片视频可以触发已修改问法""视频播放","点击攻略卡片打开视频","点击视频播放器中的暂停,播放,全屏等按钮","1、视频前无广告,视频清晰度在1080p分辨下手机不模糊;2、正常窗口下播放可暂停重新播放,声音清晰;3、点击按钮切换全屏后可暂停播放,声音清晰.
4、播放中时切换横竖屏,样式无异常,可正常继续播放5、关闭视频后,返回小悦主页面,页面样式无异常",,,,"是",,"部分安卓机型打开视频不能播放,暂不关注""链接组件触发","打开进入小悦","提问【自助工具】触发,带下划线的文字为调查问卷链接","1、答案触发正常,展示文案正常2、链接文字与普通文字有颜色区分和下划线标识(链接颜色应规范,且与普通文字区分度较大,一般普通文本为白色,链接为黄色)",,,,"是",,"链接跳转","触发带有链接答案","点击链接","1、链接点击后,打开新窗口,跳转到正确的目标地址,打开的页面正确(管理端中配置)2、注意链接跳转的效率,是否影响性能,是否有卡顿长时间白屏等问题3、关闭链接窗口后,返回小悦主页面,页面样式无异常;4、图片链接功能关闭,点击配置了链接的图片不再会跳转链接,而会正常打开图片了",,,,"是",,"sdk特殊跳转链接","小悦中的特殊链接例如NPC或商店","点击链接","1、点击链接后,跳出小悦返回游戏页面,游戏角色寻路至链接位置,或打开对应商店2、若因为等级或地图关系无法抵达,游戏内会有相关提示,并且不影响角色后续行动",,,,"是",,"横向列表组件触发","打开进入小悦","提问【s联赛】触发","1、触发正常,展示文案正常2、点击可触发横向列表中卡片内容,超过一屏显示时,可以左右滑动;3、列表在滑动时,检查卡片样式是否显示异常4、混合排列的横向列表(一个横向列表中包括了图片,问法,攻略,视频等)中的每一个卡片都可以正常点击触发(H5中暂不支持)",,,,"是",,"有文本应答,没有展示卡片内容可以触发已修改问法""热点推荐组件","打开进入小悦","首问语(进入小悦页面即是,娱乐天地,进阶板块等位置)触发","1、触发正常,展示正常;2、热点推荐内容点击后可触发对应问法;3、文字与背景颜色有明显区分,文字显示不超过背景外框4、每个热点推荐框内,最多配置三个问法,当配置1个或两个问法时,热点框的样式展示也应无异常",,,,"是",,"有文本应答,没有展示卡片内容可以触发已更换问法""[用例集]基础功能"子用例集",,"首次进入新手页面展示","新手首次进入小悦","打开小悦","展示新手页面,新手介绍页中内容无错误,信息,按钮等均正确;横竖屏显示位置均正常",,,,"是",,"整体指引""再次进入不展示新手页面","非新手再次进入小悦","打开小悦","不展示新手页面",,,,"是",,"整体指引""首问语内容","打开进入小悦","查看首问语内容","1、默认显示管理端配置首问语(无推送消息时)2、有推送消息时,显示推送内容,不显示首问语3、有多条推送时,所有推送消息都显示,按照推送的顺序,后推送显示在最下侧,进入小悦时页面焦点在最下侧,并在右上角显示几条消息4、推送时会同步推送红点(可选),若推送红点,则在小悦入口(包括小悦上层入口)会显示红点",,,,"是",,"整体指引""小悦页面显示","打开进入小悦","查看首问语,容器,小悦头像,用户头像,快捷浮框显示","1、首问语显示正常(默认显示首问语内容为管理端配置内容);2、横向列表显示正常,触发正常,多余一屏卡片可通过点击按钮左右滑动显示;3、小悦与用户的头像拉取正常;快捷浮框内容显示正常,触发正常.
",,,,"是",,"带提问唤醒小悦","进入装备系统(自由幻想)","从装备系统(强化,镶嵌,熔炼,觉醒)入口打开小悦(自由幻想)","1、用户从装备系统入口进入小悦后,根据用户的画像和入口具体位置的不同(强化,镶嵌,熔炼,觉醒),显示不同的首问语(使用带问法进入sdk功能,但不展示问法);2、首问语内容展示正常,点击后均可打开展示对应内容.
",,,,"是",,"断网条件下,功能检查","断开手机的网络(流量,wifi)","发送消息,发送语音,点击之前的图片,攻略,视屏等组件","1、发送文字消息有loading效果,有重试按钮,点击后打开重新发送窗口;2、发送语音不能用;3、已打开的图片,点击后打开打开.
未打开过的图片,点击后展示放大缩略图;4、下拉,打开历史记录,检查提示",,,,"是",,"发送文字没有重试按钮,会提示"请求超时,请换个网络试试"当前sdk版本不支持,无需关注""横竖屏切换","打开进入小悦","切换横屏与竖屏状态","1、横屏与竖屏下,内容与样式的展示都正常无错位,切换后样式变化正常(容器,卡片中的图片文字位置无错位;2、文本框显示不超过一横屏,对话流显示无错位;3、sdk一般不支持横竖屏切换",,,,"是",,"弱网测试","弱网环境下(fiddler模拟或IPhone自带模拟)","弱网下发送消息,接收消息,点击卡片查看图片,视频,攻略内容","1、弱网下,消息发送和接收缓慢,且存在发送超时情况,点击消息左侧按钮可重新发送消息;2、弱网下可打开卡片,视频,攻略,优先加载背景框,内容稍后缓慢加载;3、在消息或卡片内容加载中,关闭小悦可能引起crash现象,需要多注意",,,,"是",,"机型适配",,,"测试手中现有机型:IPhone:5s,5c,6p,7p,x先期测试中,应尽量覆盖机型已及早检查出兼容性问题.
上线前若时间充足应联系专门兼容适配测试组进行100台机器适配",,,,"是",,"小悦名字检查","打开进入小悦","检查小悦头像,答案,title等","默认以小悦为自称,当替换为其他名字时,不应出现小悦相关称呼",,,,"是",,"以"小橘子"自称以"小橘子"自称""GCloudCore"用例集",,"GCloudCore-Network"子用例集",,"GCloudCore(Network-网络服务),注册网络状态切换回调","注册网络切换回调,注册成功",,"1.
.
点击SetCallback","log回调:NetworkChangedEventisregistered","已自动化","P0","是","是","PC端暂时没有好的检测接口,一直以来就是这样设计的,暂时不用关注这块""GCloudCore(Network-网络服务),获取当前网络状态","获取当前网络状态,能正确获取到当前网络状态",,"1.
点击GetNetworkState","正确获取到当前网络状态1.
当前网络为wifi状态提示GetNetworkStatestate:ReachableViaWIFI2.
当前无网络连接提示GetNetworkStatestate:NotReachable3.
当前为手机网络连接提示GetNetworkStatestate:ReachableViaWWAN","已自动化","P0","是","是","2G3G4G网络状态为ReachableViaWWAN;wifi状态为ReachableViaWiFi;无网络时状态为NotReachable""GCloudCore(Network-网络服务),网络状态切换—检查回调通知","网络状态切换—检查回调通知,回调返回正常,自动跳转状态通知","已设置网络的回调","1.
当前网络为4G网络--点击GetNetworkState;2.
.
将网络设置成wifi连接;3.
断开网络;4.
将网络设置成wifi连接;5.
断开网络;6.
将网络设置成4g网络连接;","自动跳转通知示例:1.
GetNetworkStatestate:ReachableViaWWAN2.
自动跳转出NetworkStateChangedstate:NotReachable3.
自动跳转出NetworkStateChangedstate:ReachableViaWiFi4.
自动跳转出NetworkStateChangedstate:NotReachable5.
自动跳转出NetworkStateChangedstate:ReachableViaWiFi6.
自动跳转出NetworkStateChangedstate:NotReachable7.
自动跳转出NetworkStateChangedstate:ReachableViaWWAN","无法自动化","P0","是","是","2G3G4G网络状态为ReachableViaWWAN,wifi状态为ReachableViaWiFi无网络时状态为NotReachable""GCloudCore(Network-网络服务),拔出sim卡或禁用网络,检查回调通知,获取当前网络状态","拔出sim卡或禁用网络,检查回调通知,获取当前网络状态,无网络状态获取成功,自动跳转通知","1.
已设置网络的回调2.
网络处于移动连接状态","1.
当前网络为4G网络,且关闭wifi连接2.
点击GetNetworkState;观察日志3.
拔出当前sim卡;观察日志,等待网络状态变化回调","1.
显示NetworkStateChangedstate:ReachableViaWWAN2.
显示NetworkStateChangedstate:NotReachable3.
显示GetNetworkStatestate:NotReachable","无法自动化","P1","是","否","GCloudCore-GTrace",,,,,,"PNull","子用例集",,"[202003新增用例]需求单等内容记录","【GCloudCore】全链路新增面向游戏侧接口http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512856649207url_cache_key=fc90e1d2ad60253b62016a6beda040b9&action_entry_type=stories",,"目前项目组也有需求对自身逻辑做监控,需对外导出Trace服务接口,监控私有链路【处理流程】1.
在GCloudCore中新增GTraceService,内部调用TraceService,提供Context的创建、销毁、刷新等必要接口,参考GTraceClient.
h2.
ITraceService中的部分接口是由于插件之间需相互访问而存在的,不必暴露给游戏侧,如IsEnable,IsTargetHit等3.
提供C++和C#接口,游戏缺省上报私有链路","游戏侧链路上报,默认pubType=0,(用户不可见)当priType!
=0时上报,=0时丢弃.
","无法自动化","PNull","测试说明",,"GCloudCore(全链路上报游戏侧私有链路)在测试程序中正常顺序调用接口新增私有链路并上报","在测试程序中正常顺序调用接口新增私有链路并上报,在全链路控制台观察到私有链路的上报","1.
上报私有链路已开启(如果是白名单方式开启,白名单中需要有0)2.
privateType!
=0","1.
点击【StartGtraceTest】,2.
顺序点击【CreateContext】、【SpanStart】、【SpanFlush】、【SpanFinish】","两种方式都可在全链路控制台观察到私有链路的上报(两个Span)","无法自动化","P0","是",,"GCloudCore(全链路上报游戏侧私有链路)上报具有上下文关系(子Span)的私有链路",,"1.
上报私有链路已开启(如果是白名单方式开启,白名单中需要有0)2.
privateType!
=0","1.
勾选【IsSubSpan】,输入执行次数【ExcuteTimes】2.
点击【StartGtraceTest】","可在全链路控制台观察到具有上下文关系的私有链路的上报(并且执行次数就是层数)","无法自动化","P0","是",,"GCloudCore(全链路上报游戏侧私有链路)GetGTraceId接口","GetGTraceId接口,正常返回TraceId",,"1.
点击【GetGtraceID】","正常返回TraceId,上报链路后可在全链路控制台查询,一次启动一个TrcaeID","无法自动化","P1","是",,"GCloudCore(全链路上报游戏侧私有链路)在测试程序中随机顺序调用接口程序不崩溃","在测试程序中随机顺序调用接口,程序不崩溃",,"随机点击界面已有按钮","程序不崩溃","无法自动化","P1","是",,"[201912新增用例]GTraceClient支持部分上报模式","已接入的模块PublicType定义#definePUBTYPE_GCLOUDCORE0"#definePUBTYPE_CONNECTOR"1"#definePUBTYPE_DOLPHIN2"#definePUBTYPE_PUFFER"3"#definePUBTYPE_MAPLE"4"新增4中目标模式:全量上报、关闭、白名单开启、黑名单屏蔽GTraceTargetMode配置配置参数说明:GTrace目标模式,以PublicType为粒度参数说明0:全部关闭1:全部开启2:白名单开启3:黑名单屏蔽;缺省为1,全部开启GTraceWhiteList配置配置参数说明:GTrace目标白名单,以PublicType为粒度,当GTraceTargetMode为2时有效.
以|为分隔符,如1|2|3|4GTraceBlackList配置配置参数说明:GTrace目标黑名单,以PublicType为粒度,当GTraceTargetMode为3时有效.
以|为分隔符,如1|2|3|4,默认值-1不做屏蔽GCLOUDCORE启动上报全部的插件版本号","【GTraceClient支持部分上报模式】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512856408395","备注:目前不确定Puffer组件的接入情况,用例中Puffer的部分先跳过.
","上报数据:GCloudCore:各SDKVersion.
Connector:创建连接的过程.
Dolphin:Version、ApkUpdate、FirstExtrace、FilelistCheck、SourceUpdate.
Puffer:Maple:QueryAll,QueryTree,QueryLeaf.
","无法自动化","PNull","测试说明",,"GCloudCore(GTraceClient),全部开启——GTraceClient默认配置,查看数据上报情况","全部开启——GTraceClient默认配置,查看数据上报情况;GTraceTargetMode默认为1,即GCloudCore、Connector、Dolphin、Puffer、Maple默认开启数据上报",,"1.
启动app;2.
Connector组件点击"init"和"Connect"按钮;3.
Dolphin组件点击"Update"按钮;4.
Puffer组件点击"";5.
Maple组件点击"Init"、"QueryTree"、"QueryLeaf".
","GCloud控制台可查询到当前操作GCloudCore、Connector、Dolphin、Puffer、Maple的相关上报数据.
(可过滤日志GTraceClient查看TargetMode=1,GTraceEnable=1)","无法自动化","P1","是",,"GCloudCore-Xlog_GCloudLog",,,,,,"PNull","子用例集",,"[202003新增用例]需求单等内容记录","【【GCloudCore】日志修改符合组件要求】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512856677569",,"1UE4测试Demo(Unity测试Demo暂不测试)2点击【GCloudCore】3点击【XLog】进入测试界面4点击【Init】进行首次日志默认配置初始化",,,"PNull","测试说明",,"日志路径:1、Android/sdcard/Android/data/{package_name}/cache/GCloudSDK/{sdk_name}/如果没有sdcard则在内置沙箱目录/data/data/{package_name}/cache/GCloudSDK/{sdk_name}/2、iOS/Library/Caches/GCloudSDK/{sdk_name}/""操作步骤部分说明","1【查看日志信息】:-说明:可以查看日志的体积大小跟日志修改时间.
-详细操作:下面任选一种(1)点击【CheckLogDir】跟【CheckLogContent】查看所有日志文件修改时间(2)【左下角输入框】输入要查看的日志文件名,点击【GetLogContent】查看日志文件的修改时间","2【查看日志内容】:-说明:查看输出日志的内容和格式-详细操作:下面任选一种(1)PC端连接手机查看输出日志(2)左下角输入框输入要查看的日志文件名,点击【GetLogContent】查看日志文件的部分内容;目前只显示日志文件中最新的内容,不超过10KB.
","3【左下角输入框】说明:(1)以"/"、"\"结尾表示目录,否则表示文件.
(2)路径前面默认自动添加设备的缓存目录路径.
举例:GCloudSDKLog/表示目录,在Android下为/sdcard/Android/data/{package_name}/cache/GCloudSDK/,在iOS下为/Library/Caches/GCloudSDK/3【删除目录或文件】-详细操作:点击【Delete】删除【左下角输入框】的指定内容4【新增目录或文件】-详细操作:点击【Create】新增【左下角输入框】的指定内容",,,"PNull","测试说明",,"需求单等内容记录","【【GCloudCore】新增详细日志模块接口】http://tapd.
oa.
com/GcloudSDK/prong/stories/view/1020378512856635869",,"在ALog模块新增智能验收需要的数据维度新增维度列表:插件名(String):PluginName模块名(String):Module会话标识(String):Session阶段(Enum):Stage:Start/Processing/Finish/.
.
.
状态(Enum):Status:Success/Fail/Error/Unknown/.
.
.
一级错误码(Int64):ErrCode二级错误码(Int64):ErrCode2错误信息(String):ErrorMsg调用者透传数据(String):UserInfo,k-vpair预留字段(String):Resv",,,"PNull","测试说明",,"GCloudCore新增详细日志模块接口","新增详细日志模块接口",,"观察Xlog、Alog日志是否有需求中所列字段.
","Xlog、Alog日志有需求中所列字段",,"PNull","测试说明",,"预埋接口,开发自测""修改云控上GCloud的日志配置LogConsoleOutput,切换配置后,客户端表现正常","针对验收标准1.
控制台可以正常打印日志.
需要覆盖Editor",,"1、修改云控上的日志配置LogConsoleOutput=02、客户端调用组件的测试代码,组件内部会打日志3、修改云控上的日志配置LogConsoleOutput=14、客户端重启后调用组件的测试代码,组件内部会打日志","步骤2执行时,无法从控制台看到组件日志步骤4执行时,控制台可以看到组件日志",,"P1","是",,"修改云控上GCloud的日志配置LogMode=0,客户端表现正常","针对验收标准2.
相关日志目录有日志文件生成,如果使用压缩加密,可以正常解密文件需要覆盖Editor",,"1、修改云控上的日志配置LogMode=02、启动客户端调用组件的测试代码,组件内部会打日志","检查点:(1)生成日志文件类型为.
log,(2)检查日志文件内容正常显示,无乱码(iOS集成测试Demo的日志查看方法:-可用云控打捞-可用GVoice添加的测试功能,将日志目录复制到文稿目录,通过iTunes导出)",,"P1","是",,"GCloudCore-CloudContrlSystem",,,,,,"PNull","子用例集",,"日志打捞/各个SDK区分版本号","Android检查各个SDK版本号",,"下发打捞日志的规则,file_path填写"GCLOUD_LOG_DIR",file_pattern填写".
*",过滤deviceid,在"用户侧文件采集"页面下载对应规则日志","日志打捞成功,检查日志中的sdk版本号",,"P0","是",,"等之后onesdk版本再检查,现在GEM不正确""日志打捞/各个SDK区分版本号","IOS检查各个SDK版本号",,"下发打捞日志的规则,file_path填写"GCLOUD_LOG_DIR",file_pattern填写".
*",过滤deviceid,在"用户侧文件采集"页面下载对应规则日志","日志打捞成功,检查日志中的sdk版本号",,"P0","是",,"等之后onesdk版本再检查""Midas"用例集",,"[用例集]安卓测试用例"子用例集",,"QB购买游戏币(商城页)","QB购买游戏币(商城页),QQ登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas2、点击"购买游戏币"/"BuyDiamond",进入商城页.
3、点击某一档位,进入支付渠道页列表.
4、选择qb渠道支付.
","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、支付成功,返回值retcode为0",,,"是","是","QQ支付购买游戏币(商城页)--取消支付","QQ支付购买游戏币(商城页)--取消支付,进入QQ支付渠道,取消支付后回到demo","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas2、点击"购买游戏币"/"BuyDiamond",进入商城页.
3、点击某一档位,进入支付渠道页列表.
4、选择qq支付渠道支付,然后取消支付","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、进入qq支付渠道,取消支付后回到demo",,,"是","是","QB购买道具(定额可改)","QB购买道具(定额可改),QQ登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"道具直购"/"BuyGoods",进入数量输入页.
4、点击价格,进入支付渠道页列表.
5、选择qb对应渠道支付.
","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、支付成功,返回值retcode为0",,,"否","否","QQ钱包购买道具","QQ钱包购买道具,QQ登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"道具直购"/"BuyGoods",进入数量输入页.
4、点击价格,进入支付渠道页列表.
5、选择qq钱包对应渠道支付.
","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、进入qq支付渠道,取消支付后回到demo",,,"是","否","QB购买订阅(定额不可改)","QB购买订阅(定额不可改),QQ登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"订阅"/"Subscribe",直接进入支付渠道页.
3、选择对应渠道支付.
","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、支付成功,返回值retcode为0",,,"是","是","QQ钱包购买订阅(定额不可改)","QQ钱包购买订阅(定额不可改)Q登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"订阅"/"Subscribe",直接进入支付渠道页.
3、选择qq支付渠道支付,然后取消支付","1、正常拉起QQ授权页登录成功返回测试App后关注打印的后面四行日志:RetCode:0,RetMsg:Success,ThirdCode:0,ThirdMsg:success,ExtraJson:""2、日志返回"初始化执行完毕",最后有RetMsg:Success3、进入qq支付渠道,取消支付后回到demo",,,"是","是","QB购买月卡(定额不可改)","QB购买月卡(定额不可改),Q登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"月卡/Month",直接进入支付渠道页.
3、选择qb渠道支付.
","支付成功,返回值retcode为0",,,"是","是","QQ钱包购买月卡(定额不可改)","QQ钱包购买月卡(定额不可改),Q登陆成功,初始化成功,支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击QQLogin,登陆测试账户2、点击InitMidas3、点击"月卡/Month",直接进入支付渠道页.
3、选择qq钱包渠道支付.
","进入qq支付渠道,取消支付后回到demo",,,"是","是","WX登录,qb购买游戏币(商城页)","WX登录,qb购买游戏币(商城页),拉起QQ二次登录,通过QB支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击WXLogin,登陆测试账户2、点击InitMidas2、点击"购买游戏币"/"BuyDiamond",进入商城页.
3、点击某一档位,进入支付渠道页列表.
4、选择qb渠道支付.
","拉起QQ二次登录,通过QB支付成功",,,"是","否","WX登录,qb购买游戏币(商城页)","WX登录,qb购买游戏币(商城页),进入支付页面,取消后返回demo","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击WXLogin,登陆测试账户2、点击InitMidas2、点击"购买游戏币"/"BuyDiamond",进入商城页.
3、点击某一档位,进入支付渠道页列表.
4、选择wx支付渠道支付.
","进入支付页面,取消后返回demo",,,"是","是","WX登录,qb购买道具(定额可改)","WX登录,qb购买道具(定额可改),拉起QQ二次登录,通过QB支付成功","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击WXLogin,登陆测试账户2、点击InitMidas3、点击"道具直购"/"BuyGoods",进入数量输入页.
4、点击价格,进入支付渠道页列表.
5、选择qb对应渠道支付.
","拉起QQ二次登录,通过qb支付成功",,,"是","否","WX登录,wx支付购买道具(定额可改)","WX登录,wx支付购买道具(定额可改),进入支付页面,取消后返回demo","1.
QQ测试账号为3112257792,密码为7894561230.
2.
WX测试账号:wxid_hxzi4w9r3lwl12,密码7894561230.
3.
若测试账户余额不足,可进入midas.
qq.
com任意应用,为测试账号在沙箱环境充值","1、点击WXLogin,登陆测试账户2、点击InitMidas3、点击"道具直购"/"BuyGoods",进入数量输入页.
4、点击价格,进入支付渠道页列表.
5、选择wx支付对应渠道支付.
","进入支付页面,取消后返回demo",,,"是","否","[用例集]midas海外测试"子用例集",,"Android/iOS游戏币支付","Android/iOS游戏币支付,支付成功","使用midas海外构建流水线的包","1、点击InitMidas2、点击【BuyDiamond】3.
弹出支付页面",,,,"是","是","GPM"用例集",,"基础性能采集兼容性","基础性能采集","进入TRITest主界面","1.
点击InitContext2.
点击MarkLevelLoad3.
等待5s左右,依次点击SetQuality、MarkLevelLoadFin、SetOpenId、SetVersion按钮;4.
多次切换前后台;5.
等待30s,点击MarkLevelFin;","logcat过滤日志,logcat|grep'tri_sdk'1.
步骤1输出GPMinitfinished;2.
步骤5输出filesendsuccessfully;3.
无闪退、黑屏等异常;",,,"是","是","兼容性测试时可以不关注logcat过滤日志的结果~麻烦查看其他结果""事件兼容性","测试自定义事件,包括APM、GEM、TGPA自定义事件的兼容性问题以及网络探测的兼容性","进入TRITest主界面","1.
点击InitContext2.
点击MarkLevelLoad3.
点击Event;4.
点击StreamEvent;","logcat过滤日志,logcat|grep'tri_sdk'1.
无任何错误输出2.
无闪退、黑屏等异常;",,,"是","是","兼容性测试时可以不关注logcat过滤日志的结果~麻烦查看其他结果iOS日志有问题不关注""机型分档测试","动态机型分档测试(iOS不支持)","进入TRITest主界面","1.
点击InitContext2.
点击GetDeviceClass","logcat过滤日志,logcat|grep'tri_sdk'1.
Qccjudgevalue:level6XX2.
无闪退、黑屏等异常;",,,"是","是","兼容性测试时可以不关注logcat过滤日志的结果~麻烦查看其他结果""Leap"用例集",,"Leap-半自动测试用例""安卓自动化","执行leap自动化,覆盖leap自动化用例",,"1.
运行demo,进入到leap界面,点击leapautotest2.
中途需点击QQ或微信授权","运行自动化结果,全部通过",,,,,"iOS自动化","执行leap自动化,覆盖leap自动化用例",,"1.
运行demo,进入到leap界面,点击leapautotest2.
中途需点击QQ或微信授权","运行自动化结果,全部通过",,,,,"原始用例""login",,,,"SigningIn登录中SignedIn登录成功SignedOut已登出NetworkException网络错误Error其他错误",,,,,"Leap(Login),QQ登录","QQ登录,正常拉起QQ登录授权界面","QQ账号已登录","1.
点击QQ登录","1.
正常拉起QQ授权页2.
登陆成功,返回结果:SignedIn.
.
.
3.
左侧按钮由置灰状态变亮",,,,,"Leap(Login),QQ登录,反复登录","QQ登录,正常拉起QQ登录授权界面","QQ账号已登录","1.
点击QQ登录,登录成功后再次点击登录.
","1.
正常拉起QQ授权界面,授权返回正常.

2.
无崩溃.
",,,,,"Leap(Login),QQ登录,取消授权登录","QQ登录,正常拉起QQ登录授权界面","QQ账号已登录","1.
点击QQ登录2.
拉起授权界面后点击右上角取消","1.
正常拉起QQ授权界面2.
取消后自动返回demo,返回msdkloginfailed,ret:2",,,,,"Leap(Login),QQ登出","QQ登出,退出登录,logout","已授权登录","1.
点击logout","1.
登出成功,提示sigendout",,,,,"Leap(Login),微信登录","微信登录,正常拉起微信登录授权界面","微信账号已登录","1.
点击微信登录","1.
正常拉起微信授权页2.
登陆成功,返回结果:StateChangeCallBackstateis:SigningIn",,,,,"Leap(Login),微信登录,反复登录","微信登录,正常拉起微信登录授权界面","微信账号已登录","1.
点击微信登录,登录成功后再次点击登录.
","1.
不会再次拉起授权界面,直接提示成功.

2.
无崩溃.
",,,,,"Leap(Login),微信登录,取消授权登录","微信登录,正常拉起微信登录授权界面","微信账号已登录","1.
点击微信登录2.
拉起授权界面后点击右上角取消","1.
正常拉起微信授权界面2.
取消后自动返回demo,返回msdkloginfailed,ret:2",,,,,"Leap(Login),微信登出","微信登出,退出登录,logout","已授权登录","1,点击logout","1.
登出成功,提示sigendout",,,,,"Leap(Login),断网登录","断开网络,登录QQ或微信","断开网络","1.
点击微信或QQ登录","1.
提示登录失败,demo不崩溃卡死",,,,,"Leap(Login),登录成功之后断网","登录成功后,断开网络","QQ/微信登录成功","1.
登录成功后直接断开网络","1.
demo无崩溃,卡死",,,,,"支付pay""Leap(Pay),获取道具列表(GetProps)","获取道具项目列表,各道具详情.
","已授权登录QQ或微信,默认配置","1.
点击GetProps","右侧显示日志:OnGetProp:Getprop0:ProductID:normal_testProductDesc:normal_testPrice:1LimitCount:10MaxCount:1000Getprop1:ProductID:overweight_test_itemProductDesc:overweight_test_itemPrice:1LimitCount:9999MaxCount:1000Getprop2:ProductID:free_item_testProductDesc:free_item_testPrice:1LimitCount:5MaxCount:1000Getprop3:ProductID:price_testProductDesc:price_testPrice:199LimitCount:5MaxCount:1000",,,,,"Leap(Pay),道具直购","购买游戏道具,拉起支付界面","已授权登录QQ或微信,默认配置","1.
点击道具直购2.
使用Q币购买","弹窗提示支付成功.
",,,,,"Leap(Pay),道具直购取消购买","购买游戏道具,拉起支付界面后取消购买.
","已授权登录QQ或微信,默认配置","1.
点击道具直购2.
拉起支付界面后关闭支付.
","1.
关闭成功,返回demo2.
返回支付失败日志.
3.
无崩溃",,,,,"Leap(Pay),取消购买,再次购买","购买游戏道具,拉起支付界面后取消购买,再次点击购买.
","已授权登录QQ或微信,默认配置","1.
点击道具直购2.
拉起支付界面后关闭支付.
3.
再次点击购买","1.
关闭成功,返回demo2.
返回支付失败日志.
3.
再次购买成功",,,,,"Leap(Pay),多次重复购买","多次购买游戏道具","已授权登录QQ或微信,默认配置","1.
点击道具直购2.
支付成功3.
多次购买道具.
","1.
支付成功2.
可以多次购买,无崩溃",,,,,"Leap(Pay),GoodsId、GoodsName等参数传入为空或传入错误","GoodsId、GoodsName等参数传入为空或传入错误,购买道具","已授权登录QQ或微信,默认配置","1.
点击道具直购2.
使用Q币购买","1.
不发生闪退、崩溃和卡死等2.
返回错误信息或回调",,,,,"Bag(背包)","暂未添加用例""Leap(bag),查看背包信息","购买物品前后分别查看背包信息",,"1.
Bag页面点击SyncBag查看背包中的道具信息2.
进入Pay页面点击道具直购3.
返回Bag页面查看点击SyncBag查看背包中的道具信息","购买前后查看到的道具信息和实际一致",,,,,"云配置""Leap(Config),写入配置(WriteConfig)","写入正确云配置","已授权登录QQ或微信,默认配置","1.
点击WriteConfig","日志提示:onWriteConfigBtnClick…Writeconfig:{time:"Monday,03August2020"},toremote.
无崩溃",,,,,"Leap(Config),反复写入云配置","重复写入正确云配置","已授权登录QQ或微信,默认配置","1.
多次重复点击WriteConfig","日志无变化,返回如下:onWriteConfigBtnClick…Writeconfig:{time:"Monday,03August2020"},toremote.
Writeconfigsuccess无崩溃",,,,,"Leap(Config),读取云配置(ReadConfig)","读取已写入的云配置","云配置已写入","1.
已写入云配置2.
点击ReadConfing","1.
读入云配置成功2.
返回日志如下:onReadConfigBtnClick…ReadConfingsuccess,content:{time:"Monday,03August2020"}",,,,,"Leap(Config),配置超64K","写入超过64k大小的配置","已授权登录QQ或微信","1.
content中写入超过64K大小的配置2.
点击WriteConfig","1.
写入不成功",,,,,"防沉迷""Leap(Hope),实名制,拉起认证界面","拉起认证页面,未实名认证的账号成功拉起,已认证的账号登陆不会拉起实名认证界面","未进行实名认证","1.
点击QQ登录或者微信登录.

2.
授权登录后未实名会弹出实名认证界面","1.
拉起实名认证页面,页面显示正常2.
已认证的账号登录不会拉起实名认证界面",,,,,"Leap(Hope),judgeTimingTest","判断时机测试","未进行实名认证","1.
点击judgeTimingTest","日志提示如下:StartSignOutSignOutSuccesssignInSuccesshopemsg:successTraceld:XxXxXx",,,,,"Leap(Hope),Reporttest","防沉迷指令结果上报",,"点击ReportTest","日志提示:success",,,,,"Leap(Hope),累计在线时长提示","在线时长提示","已长时间登录","1.
中控管理端配置提醒规则.

2.
达到时长后弹出提示.
","1.
达到时长后弹出提示",,,,,"Leap(Hope),累计在线时长禁玩","在线时长过长强制下线","已长时间登录","1.
中控管理端配置禁玩规则.

2.
达到时长后弹出提示.
","2.
达到时长后,弹出提示强制下线.
",,,,,"云存档cos""Leap(COS),上传文件uploadFile","上传文件","默认配置","1.
点击上传文件uploadFile","1.
有弹出上传成功提示",,,,,"Leap(COS),下载文件DownloadFile","下载文件","默认配置","1.
点击上传文件uploadFile2.
点击下载文件DownloadFile","1.
有下载成功提示2.
/sdcard/Android/data/com.
tencent.
itop.
example/files文件中有下载成功,和上传的内容一致.
",,,,,"Leap(COS),获取文件列表GetFileList","获取总上传文件列表","默认配置","1.
点击上传文件uploadFile2.
点击下载文件DownloadFile3.
点击GetFileList","获取下载列表成功",,,,,"Leap(COS),上传过大文件","云存档无上传文件大小限制","已有超大文件","1.
点击上传该文件","1.
有弹出上传成功提示",,,,,"问卷""Leap(Vote),投票vote","用户第一次投票","默认配置","1.
点击vote","1.
日志返回:onvoteBtnclick…onvotesuccessvoteid:0,set_id:0,data:ThislsunityDemo",,,,,"Leap(Vote),再次投票给同一人","用户再次投票","默认配置非第一次投票","1.
点击vote",,,,,,"Leap(Vote),再次投票给不同人""Leap(Vote),获取投票结果GetVoteResult","获取各投票结果票数","已投票","1.
点击GetVoteResult","1.
日志返回:onGetVoteResultBtnClickonGetVoteResultsuccesssetld:0voteid:0,count:1voteid:1,count:1voteid:2,count:1",,,,,"Leap(Vote),多人投票,票数递增","多个用户投票给相同选项","用户正常登录","1.
所有用户投票选项voteld设为02.
点击vote3.
点击GetVoteResult","1.
日志返回:onGetVoteResultBtnClickonGetVoteResultsuccesssetld:0voteid:0,count:1(总票数=投票人数)voteid:1,count:1voteid:2,count:1",,,,,兼容性测试数据"IOS兼容性""机型","系统版本","适配结果","适配BUG","修复情况","备注""iPadAir(A1474)","11.
2.
1","完全无适配BUG""iPhoneSE2","14","完全无适配BUG""iPadPro3(A1980)","13.
4.
1","完全无适配BUG""iPhone11Pro","13.
1.
3","完全无适配BUG""iPad8(18A373)","14","完全无适配BUG""Iphone12pro","14.
1","完全无适配BUG""iPhoneSE","11.
0.
3","完全无适配BUG""iPhone8","12.
2","完全无适配BUG""iPhoneXR","12.
1.
4","完全无适配BUG""iPhone11ProMax","13.
3","完全无适配BUG""iPadAir3(A2152)","12.
2","完全无适配BUG""iPadPro4(12.
9-inch)(A2229)","13.
4.
1","最高存在一般性","浏览器界面关闭嵌入式浏览器失败","已修复""iPadPro(9.
7)(A1673)","11.
4","完全无适配BUG""Iphone12","14.
1","完全无适配BUG""iPhone7Plus","11.
4.
1","完全无适配BUG""iPhone7","11.
0.
3","完全无适配BUG""ipadpro12.
9","13.
3.
1","最高存在一般性","浏览器界面关闭嵌入式浏览器失败","已修复""iPhone11","14","完全无适配BUG""iPhoneXsmax","12.
4.
1","完全无适配BUG""iPhoneXs","12.
3","完全无适配BUG""ipadmini4","13.
6","完全无适配BUG""iPhoneX","12.
0.
1","完全无适配BUG""iphone8Plus","12.
1.
4","完全无适配BUG""ipadPro3(12.
9-inch)(A1876)","12.
3.
1","完全无适配BUG""ipadPro2(10.
5)(A1852)","11.
4.
1","完全无适配BUG""iphone5s","12.
1","完全无适配BUG""Ipadair4代10.
9英寸","14","最高存在一般性","浏览器界面关闭嵌入式浏览器失败","已修复""Android兼容性""机型","系统版本","适配结果","适配BUG","修复情况","备注""HLK-AL00","9","完全无适配BUG""YAL-AL00","9","完全无适配BUG""JSN-AL00","9","完全无适配BUG""HUAWEIMLA-AL10","6.
0","完全无适配BUG""BLA-AL00","9","完全无适配BUG""BND-AL00","8.
0.
0","完全无适配BUG""ALP-AL00","10","完全无适配BUG""VKY-AL00","7.
0","完全无适配BUG""OPPOA83","7.
1.
1","完全无适配BUG""OPPOR9sPlus","6.
0.
1","完全无适配BUG""OPPOA77","7.
1.
1","完全无适配BUG""OPPOR11t","7.
1.
1","完全无适配BUG""OPPOA79k","7.
1.
1","完全无适配BUG""PBAM00","8.
1.
0","完全无适配BUG""OPPOR7s","4.
4.
4","完全无适配BUG""PCAM00","10","完全无适配BUG""SM-G9500","9","完全无适配BUG""V1838A","9","完全无适配BUG""vivoY51","5.
1.
1","最高存在致命性""vivoY75A","7.
1.
1","完全无适配BUG""vivoX7Plus","5.
1.
1","完全无适配BUG""vivoX9L","7.
1.
2","完全无适配BUG""vivoY55","6.
0.
1","完全无适配BUG""vivoX9sPlus","8.
1.
0","完全无适配BUG""vivoX9PlusL","7.
1.
2","完全无适配BUG""vivoX9Plus","7.
1.
2","完全无适配BUG""vivoY67","6.
0","完全无适配BUG""Redmi6A","9","完全无适配BUG""RedmiNote4X","6.
0","完全无适配BUG""RedmiK20Pro","9","完全无适配BUG""MIX2S","8.
0.
0","完全无适配BUG""RedmiNote7","9","完全无适配BUG""RedmiNote4X","6.
0","完全无适配BUG""BLN-AL40","8.
0.
0","最高存在严重性""LDN-AL00","8.
0.
0","完全无适配BUG""BKL-AL00","8.
0.
0","完全无适配BUG""BND-AL10","7.
0","完全无适配BUG""STF-AL10","9","完全无适配BUG""LIO-AN00","10","完全无适配BUG""BKL-AL00","9","完全无适配BUG""TRT-AL00","7.
0","完全无适配BUG""DLI-AL10","7.
0","完全无适配BUG""HUAWEINXT-AL10","7.
0","完全无适配BUG""OPPOA83t","7.
1.
1","完全无适配BUG""OPPOR11t","7.
1.
1","完全无适配BUG""OPPOR11sPlus","7.
1.
1","完全无适配BUG""OPPOA37m","5.
1","最高存在致命性""OPPOA73","7.
1.
1","完全无适配BUG""OPPOR9sk","6.
0.
1","完全无适配BUG""OPPOR11Plusk","8.
1.
0","完全无适配BUG""SM-G9300","8.
0.
0","完全无适配BUG""SM-G9350","8.
0.
0","完全无适配BUG""vivoX21UD","9","完全无适配BUG""vivoY66","6.
0.
1","完全无适配BUG""vivoX21UDA","9","完全无适配BUG""vivoX7","5.
1.
1","完全无适配BUG""MI8Lite","9","完全无适配BUG""Redmi4A","6.
0.
1","最高存在致命性""RedmiNote7","9","完全无适配BUG""MI6","9","完全无适配BUG""MI9SE","9","完全无适配BUG""Redmi8","9","完全无适配BUG""MI5","6.
0.
1","完全无适配BUG""MI5sPlus","8.
0.
0","完全无适配BUG""RedmiNote8","9","完全无适配BUG""SM-G9650","9","完全无适配BUG""EML-AL00","9","完全无适配BUG""DUK-AL20","9","完全无适配BUG""VTR-AL00","7.
0","完全无适配BUG""BLN-AL20","8.
0.
0","完全无适配BUG""BKK-AL00","8.
1.
0","完全无适配BUG""AUM-AL20","8.
0.
0","完全无适配BUG""ELE-AL00","9","完全无适配BUG""ONEPLUSA6000","8.
1.
0","完全无适配BUG""ONEPLUSA5010","8.
1.
0","完全无适配BUG""OPPOR11Plus","7.
1.
1","完全无适配BUG""OPPOR9PlusmA","5.
1.
1","完全无适配BUG""OPPOA33","5.
1.
1","完全无适配BUG""OPPOA57","6.
0.
1","完全无适配BUG""OPPOA59s","5.
1","最高存在致命性""PACM00","9","完全无适配BUG""OPPOR11st","8.
1.
0","完全无适配BUG""OPPOR11s","7.
1.
1","完全无适配BUG""PBCM10","8.
1.
0","完全无适配BUG""vivoX9s","7.
1.
2","完全无适配BUG""vivoY85","8.
1.
0","完全无适配BUG""vivoY67L","6.
0","完全无适配BUG""vivoX9","7.
1.
2","完全无适配BUG""vivoX9i","7.
1.
2","完全无适配BUG""vivoX20PlusA","8.
1.
0","完全无适配BUG""MI5X","8.
1.
0","完全无适配BUG""MIPLAY","8.
1.
0","完全无适配BUG""Redmi5Plus","7.
1.
2","完全无适配BUG""MIX2","8.
0.
0","完全无适配BUG""MIMAX2","7.
1.
1","完全无适配BUG""RedmiNote8Pro","9","完全无适配BUG""RedmiNote5","8.
1.
0","完全无适配BUG""MI8","9","完全无适配BUG""MIMAX3","8.
1.
0","完全无适配BUG""V1831A","9","完全无适配BUG"性能测试数据"Android性能数据",,,,,"iOS性能数据""测试结论:1.
对GCloudSDK2.
1.
0版本Android库方法数进行了统计,各个SDK详细数据如下2.
数据获取来源:Unity2018.
2.
6的集成整包、编译方式采用IL2CPP、Release、Architectures:ARMv7_x86_ARM643.
每项数据都取GCloudSDK单个组件进行统计,如APM一项即为官网下载APM单组件,此时GCloudSDK中包含GCloudCore/TDM/APM.
",,,,,"测试结论:1.
对GCloudSDK2.
1.
0版本iOSArm64二进制代码段在Xcode10下进行了统计,各个SDK详细数据如下(单位K)2.
数据获取来源:Unity2018.
2.
6的集成整包、编译方式采用IL2CPP、Release、Architectures:Universal、LinkMap-arm643.
每项数据都取GCloudSDK单个组件进行统计,如APM一项即为官网下载APM单组件,此时GCloudSDK中包含GCloudCore/TDM/APM.

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?

香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...

特网云(198元/月),高质量云虚拟主机低至0.16元/天,裸金属服务器仅需10.5元/天

特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。官方网站:https://www.56dr.com/ 10年老品牌 值得信赖 有需要的请联系======================特网云推出多IP云主机...

易探云月付18元起,香港/美国/深圳/北京VPS,CN2、BGP等多线路

易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。易探云服务器均选择当下热门线路,比如CN2 GIA、BGP线路、CN2线路等,所有云主机支持月付,并且首月优惠,年付优惠,优惠后香港沙田云服务器/独立ip/香港CN2线路,每月仅18元,188元/年。点击进入:易探云官方网站地址1、香港...

云挂机为你推荐
在线代理网站求有效的代理服务器地址?今日热点怎么删除youku今日热点怎么卸载网店推广网站可以介绍几个可以做店铺推广的网站吗?保护气球抖音里面看的,这是什么游戏xp系统停止服务XP系统停止服务后怎么办?云挂机云挂机每天2+元你提了吗?网站优化方案网站优化方法有哪些声母是什么声母是什么?单韵母是什么网站地图制作网站地图怎么做qq等级表QQ等级天数表
虚拟主机mysql 韩国服务器租用 香港主机租用 域名服务dns的主要功能为 域名备案流程 过期域名抢注 cdn服务器 香港主机 抢票工具 win8.1企业版升级win10 建站代码 网通代理服务器 169邮箱 免费智能解析 银盘服务是什么 cloudlink 跟踪路由命令 789 服务器防火墙 阿里云手机官网 更多