腾讯WeTest 发表于 2020-11-10 14:11:34

从零开始玩转 PerfDogService Demo解析篇

1.Demo文件夹当下载好PerfDogService后文件夹是这个样子的。https://p1-tt-ipv6.byteimg.com/img/pgc-image/8f6ac8aa4e46434e9597b23b9aec5b8a~tplv-tt-shrink:640:0.image


文件说明:PerfDogService.exe: Service启动文件,一般不用手工启动,自动化脚本会自动启动此程序。
perfdog.proto: grpc接口和protobuf结构体的定义文件
demo/python: python3的demo,依赖库grpcio和protobuf
demo/java: java的demo,依赖库grpc-netty-shaded, grpc-protobuf, grpc-stub
PerfDogService.jar: 服务所依赖的jar包我们先不管其他,只专注于demo文件夹;
展开后是Java和Python两种语言的Demo,我们本次只分析改造Python的https://p26-tt.byteimg.com/img/pgc-image/a2639b668aec43daa345e26c1b77de84~tplv-tt-shrink:640:0.image


Python的Demo只有三个文件https://p1-tt-ipv6.byteimg.com/img/pgc-image/ad2de698a9b34fa889a1062fc3a4eda9~tplv-tt-shrink:640:0.image


Demo.py: 我们程序的执行入口,同时我们主要操作的也是这个文件;
perfdog_pb2.py: 此文件是由协议缓冲区编译器生成,也就是由perfdog.proto这个文件生成的。我们不要修改它。
perfdog_pb2_grpc.py: 此文件是gRPC Python协议编译器插件生成,也不要修改它
这里简单介绍下==协议缓冲区==
协议缓冲区是是一种与语言无关,平台无关的数据序列化结构化机制;
只需要一次构造数据,然后就可以使用生成的特殊源代码轻松地使用各种语言在各种数据流中写入和读取结构化数据;https://p26-tt.byteimg.com/img/pgc-image/4c9bf26932ca404588d2728101a6ea78~tplv-tt-shrink:640:0.image


你用python语言,你辛辛苦苦用python定义好了一堆字典啦或者Class啦或者其他什么数据,你想给隔壁老李用,然而老李用java啊,这时候隔壁小王也需要用,然而小王用C++啊,各种语言不能直接调用。这个时候通过协议缓冲区这种机制,先把你的数据编译生成一种特殊的源代码,老李和小王就可以调用这份源代码了。2.Demo.py文件解析https://p3-tt-ipv6.byteimg.com/img/pgc-image/ef809b11f2f148f4a23783f2f7e0b5b7~tplv-tt-shrink:640:0.image

其实全篇只有一个Run函数,而且官方写的注释也比较清晰了,我们就来简单看下吧https://p26-tt.byteimg.com/img/pgc-image/2dd522d98c7a4138af0cc06abde54571~tplv-tt-shrink:640:0.image


0到3其实没什么好说的了,就是唤起PerfDogService服务,通过令牌和服务器建立了一个连接,其中stub除了建立连接还有好多其他的方法https://p6-tt-ipv6.byteimg.com/img/pgc-image/a794383fa43945eabfe6acdf4d798791~tplv-tt-shrink:640:0.image


接下来看看第四步https://p6-tt-ipv6.byteimg.com/img/pgc-image/30437947d7e042099daed112e407f825~tplv-tt-shrink:640:0.image

deviceEventIterator这里是一个可迭代对象,存放着当前所有的连接设备,例如Android啦,Ios,模拟器啦等等;https://p6-tt-ipv6.byteimg.com/img/pgc-image/19bf1238e9a3402c867d0def8e358223~tplv-tt-shrink:640:0.image


我们最常用的应该是device,这里保存着被测机型的uid,名字等。这里的uid就是当前连接设备的唯一标识,如果你安装了ADB,可以在控制台输入ADB devices查看你当期连接的设备信息,例如这样:https://p1-tt-ipv6.byteimg.com/img/pgc-image/b581474446084997b2bed80de01c8692~tplv-tt-shrink:640:0.image


5其实就是开始初始化设备
6是开始获取当前被测设备的所有安装的应用,应用保存在apps这个对象里,这也是一个可迭代对象,
迭代apps可以获取到每个app,以及每个app的名字,包名,版本,Icon,是不是系统App,subVersion等等。https://p9-tt-ipv6.byteimg.com/img/pgc-image/d38139304acf4862abe187439fb25352~tplv-tt-shrink:640:0.image

第7步这里实际上是获取了当前被测设备的硬件信息,例如像CPU,型号,安卓版本之类的等等https://p26-tt.byteimg.com/img/pgc-image/2c5de61cb1034a2ab5e49d5d1f06c8ce~tplv-tt-shrink:640:0.image


第8步这里开始选择要搜集的性能数据指标都有哪些,我这里多加了一个CPU Core的使用率
第9步就开始搜集性能数据了https://p6-tt-ipv6.byteimg.com/img/pgc-image/b48f020b3d4f47a995ac710049962fad~tplv-tt-shrink:640:0.image


采集性能数据信息实际上通过多线程的方式进行的,所以Sleep(20)就是采集20s的数据https://p6-tt-ipv6.byteimg.com/img/pgc-image/8ac190d009f84b02bdf96fc8fd615fa1~tplv-tt-shrink:640:0.image


10和11就是添加不同时间段的注释https://p26-tt.byteimg.com/img/pgc-image/1ec70a193b3147b2b577a2c6308979d5~tplv-tt-shrink:640:0.image


第12步是两个操作
1.上传整个数据到云端
2.导出第5秒到20秒的数据到本地,其中导出路径可以自己更改(outputDirectory)https://p26-tt.byteimg.com/img/pgc-image/2119f71e10f04002be7038da223ab363~tplv-tt-shrink:640:0.image


13最后停止测试,不过其实进程没停止,如果此时你启动Perfdog客户端,可能会显示这个错误。https://p26-tt.byteimg.com/img/pgc-image/0de7e8b1fcfb470aa492f0919590233b~tplv-tt-shrink:640:0.image


此时去Kill掉这个java进城就可以了。https://p26-tt.byteimg.com/img/pgc-image/13bad68e5c3b41b591a7afb9802c560c~tplv-tt-shrink:640:0.image

3.Demo简单修改由于我个人的需求1是不想每次配置都挨行代码修改,2是为后续搭建自定义的云性能测试平台做铺垫,所以简单修改了下代码:源代码未删,仅是注释掉了,方便做对比;
1.提取常用配置
2.需要提前配置好需要测试的对应设备
3.需要提前配置好要测试的APP(配置APP的名字)
4.只上传一份数据到云端,
5.保存到本地的数据不会从中间截取某段时间了。
页: [1]
查看完整版本: 从零开始玩转 PerfDogService Demo解析篇