forked from liyinchigithub/monkeyGUI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
581 lines (544 loc) · 27.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- <title>Excel转XML工具</title> -->
<title>MonkeyGUI工具
</title>
<!-- 引入组件库 -->
<script src="https://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
<script src="other/jquery-pretty-radio-checkbox/js/jquery-1.8.3.min.js"></script>
<script src="other/jquery-pretty-radio-checkbox/js/jquery-labelauty.js"></script>
<!-- 引入样式:外联 -->
<link href="other/css/css1.css" rel="stylesheet" type="text/css" />
<link href="other/css/buttons.css" rel="stylesheet" type="text/css" />
<link href="https://unpkg.com/element-ui/lib/theme-chalk/index.css" rel="stylesheet" type="text/css">
<link href="other/jquery-pretty-radio-checkbox/css/jquery-labelauty.css" rel="stylesheet" type="text/css">
<!-- 引入样式:内联-->
<style>
ul { list-style-type: none;}
li { display: inline-block;}
li { margin: 10px 0;}
input.labelauty + label { font: 12px "Microsoft Yahei";}
</style>
<style>
#header {
background-color:black;
color:white;
text-align:center;
padding:5px;
}
#nav {
line-height:30px;
background-color:#eeeeee;
height:2730px;
width:50px;
float:left;
padding:5px;
}
#section {
width:650px;
float:left;
padding:10px;
}
#footer {
background-color:black;
color:white;
clear:both;
text-align:center;
padding:5px;
}
</style>
</head>
<body>
<div id="header">
<h1>
<span>Monkey</span>GUI<span>工具V2.0</span>
</h1>
</div>
<div id="nav">
高效<br>
进取<br>
正直<br>
专业<br>
</div>
<div id="section">
<div id="footer">
神州优车厦门应用一组测试技术组制作 [email protected] QQ群:206548938
</div>
<div id="attention">【注意事项】<p>
(1)选择USB连接方式为设备文件管理;<p>
(2)设置->开启开发者选项->勾选‘USB调试’(真机和模拟器上皆需进行)<p>
</div>
<hr>
<h3 align="center">【运行环境】</h3>
<ul align="center" class="dowebok">
<li><input id="radio1" type="radio" name="platform" value="Windows" checked data-labelauty="Windows"></li>
<li><input id="radio2" type="radio" name="platform" value="Mac" data-labelauty="MacBook"></li>
</ul>
<hr>
<div align="left">
<table border="0" width="600" height="300">
<tr>
<td width="18%">
<h3>【获取应用包名】</h3>
<textarea id="getPackageName_textarea" placeholder="获取包名信息显示"></textarea>
<button id="getPackageName" class="button button-3d button-action button-pill"><b>获取当前界面应用的包名</b></button>
<h3>【指定应用包名】</h3>
<p>
<textarea id="package_name" placeholder="包名粘贴此处,例如:com.ucarinc.cmt"></textarea>
</td>
<td width="18%">
<h3>【获取设备信息】</h3>
<textarea id="getDeviceInfo_textarea" placeholder="获取设备号信息显示"></textarea>
<button id="getDevices" class="button button-3d button-action button-pill"><b>获取当前已连接设备号信息</b></button>
<h3>【指定设备信息】</h3>
<p>
<textarea id="getDeviceInfo" placeholder="设备号粘贴此处,例如:2f1c68127cf4"></textarea>
</td>
</tr>
</table>
<hr>
<h3>【基础配置】</h3>
<label>事件次数:</label>
<input id="event_count" value="3000"></input>
<p>
<label>Seed的值:</label>
<input id="seed" value="1"></input>
<p>
<label>延迟时间:</label>
<input id="delay_time" value="2000"></input>
<p>
<hr>
<h3>【事件比例】</h3>
<label>①触摸</label>
<input id="touch" value="30"></input>
<p>
<label>②动作</label>
<input id="motion" value="10"></input>
<p>
<label>③轨迹</label>
<input id="trackball" value="10"></input>
<p>
<label>④基本导航</label>
<input id="base_nav" value="10"></input>
<p>
<label>⑤主导航</label>
<input id="major_nav" value="10"></input>
<p>
<label>⑥系统按键</label>
<input id="syskeys" value="10"></input>
<p>
<label>⑦与其他应用交互</label>
<input id="appswitch" value="10"></input>
<p>
<label>⑧其他类型事件</label>
<input id="other_event" value="10"></input>
<p>
<hr>
<h3>【日志保存位置】</h3>
<label>输出位置:</label>
<input id="save_path" value="1> c:\monkey.log 2> c:\error.log"></input>
<p>
<h6>例如日志保存位置Android:1> /sdcard/monkey.txt 2>
/sdcard/error.txt</h6>
<p>
<h6>例如日志保存位置Windows:1> c:\monkey.log 2> c:\error.log</h6>
<p>
<h6>例如日志保存位置Macbook:1> /Users/liyinchi/monkey.log
2> /Users/liyinchi/error.log</h6>
<p>
<textarea rows="10" cols="100" id="loginfo"
placeholder="如果设置了日志保存位置,则此处不显示日志信息"></textarea>
</div>
<hr>
<h3>【运行参数】</h3>
<ul class="dowebok">
<li><input type="checkbox" name="checkbox" value=“--ignore-crashes” checked data-labelauty="当出现Crash继续"></li>
<li><input type="checkbox" name="checkbox" value=“--ignore-timeouts“ checked data-labelauty="当出现ANR继续"></li>
<li><input type="checkbox" name="checkbox" value=“--ignore-security-exceptions” checked data-labelauty="当出现许可错误继续"></li>
<li><input type="checkbox" name="checkbox" value=“--ignore-timeouts” checked data-labelauty="当出现任何逾时错误继续"></li>
</ul>
<hr>
</div>
<div>
<center>
<button id="start" class="button button-3d button-action button-pill"><b>开始</b></i></button>
<span><span><span></span>
<button id="stop" class="button button-3d button-action button-pill"><b>中止</b></i></button>
</center>
<p>
<hr>
<h3>【导出ANR traces.txt】</h3>
<div id="tips">Tips:当ANR发生时除过logcat可以看见的log以外,我们还可以在系统指定目录下找到traces文件进行分析,获取ANR trace文件</div>
<p>
<label>导出位置:</label>
<input id="pull_traces_path" value="c:\"></input>
<button id="pull_traces" class="button button-3d button-action button-pill"><b>导出</b></i></button>
<p>
<hr>
</div>
<div>
<h3>【手机LOG】</h3>
<p></p>
<label>抓取所有LOG命令:</label>
<input id="pull_all_log" value="c:\log.txt"></input>
<button id="output_pull_all_log" class="button-3d button-action button-pill">导 出</button>(导出过程中需要等待一会儿)
<p>
<label>抓取应用层LOG:</label>
<input id="pull_app_log" value="c:\main.txt"></input>
<button id="output_pull_app_log" class="button-3d button-action button-pill">导 出</button>(导出过程中需要等待一会儿)
<p>
<label>抓取死机、重启LOG:</label>
<input id="pull_crash_reboot_log" value="c:\dump.txt"></input>
<button id="output_crash_reboot_log" class="button-3d button-action button-pill">导
出</button>(导出过程中需要等待一会儿)
<p>
<label>抓取过滤级别LOG:</label>
<select id="fiddler_log">
<option value="V" selected>Verbose</option>
<option value="D">Debug</option>
<option value="I">Info</option>
<option value="W">Warn</option>
<option value="E">Error</option>
<option value="F">Fatal</option>
<option value="S">Silent</option>
</select>
<input id="pull_fiddler_log" value="c:\level_log.txt"></input>
<button id="output_fiddler_log" class="button-3d button-action button-pill">导
出</button>(导出过程中需要等待一会儿)
<p>
<label>清除缓存log数据:</label>
<button id="clean_cache_log" class="button-3d button-action button-pill">清
除</button>(建议复现步骤抓取日志之前先清除缓存的log数据)
<p>
<hr>
<h3>【信息】</h3>
<label>获取应用版本号:</label>
<input id="app_version_name" placeholder="请输入包名" value="com.maimaiche.dms"></input>
<button id="get_app_version" class="button-3d button-action button-pill">测试</button>
<p></p>
<label>获取应用内存消耗、数据库信息、应用总结:</label>
<input id="test_app_memory_consumption_package_name" placeholder="包名:com.maimaiche.dms"
value="com.maimaiche.dms"></input>
<button id="get_test_app_memory_consumption" class="button-3d button-action button-pill">测试</button>
<p>
<label>生成bugreport:</label>
<input id="bugreport" placeholder="请设置bugreport保存位置" value="c:\bugreport.txt"></input>
<button id="get_bugreport" class="button-3d button-action button-pill">生成</button>(生成过程中需要等待几秒)
<p>
<textarea style='color: brown' rows="10" cols="100" id="adb_info" placeholder="信息结果展示在这边"></textarea>
<hr>
<h3>【保存界面所有参数】</h3>
<center>
<button id="save_parameter" class="button button-3d button-action button-pill"><b>保存当前界面参数配置</b></i></button>
<button id="restore_parameter" class="button button-3d button-action button-pill"><b>恢复上一次保存参数配置</b></i></button>
</center>
<hr>
</div>
<div id="footer">
Copyright 神州优车厦门应用一组测试技术组制作 [email protected] QQ群:206548938
</div>
<!---底部分-->
<script>
$(function () {
$(':input').labelauty();
});
//读写other/parameter_save.json 保存界面信息是通过fs模块读写json文件来实现。
var fs = require('fs');
//保存参数按钮事件处理
$('#save_parameter').click(function () {
//定义一个对象,因为写入parameter_save.json内容是对象格式
var obj = {};
//将界面的参数添加到parameter_save.json中
obj['getPackageName_textarea'] = $('#getPackageName_textarea').val();
obj['package_name'] = $('#package_name').val();
obj['getDeviceInfo_textarea'] = $('#getDeviceInfo_textarea').val();
obj['getDeviceInfo'] = $('#getDeviceInfo').val();
obj['event_count'] = $('#event_count').val();
obj['seed'] = $('#seed').val();
obj['delay_time'] = $('#delay_time').val();
obj['touch'] = $('#touch').val();
obj['motion'] = $('#motion').val();
obj['trackball'] = $('#trackball').val();
obj['base_nav'] = $('#base_nav').val();
obj['major_nav'] = $('#major_nav').val();
obj['syskeys'] = $('#syskeys').val();
obj['appswitch'] = $('#appswitch').val();
obj['other_event'] = $('#other_event').val();
obj['loginfo'] = $('#loginfo').val();
obj['pull_all_log'] = $('#pull_all_log').val();
obj['pull_app_log'] = $('#pull_app_log').val();
obj['pull_crash_reboot_log'] = $('#pull_crash_reboot_log').val();
obj['pull_fiddler_log'] = $('#pull_fiddler_log').val();
obj['app_version_name'] = $('#app_version_name').val();
obj['test_app_memory_consumption_package_name'] = $('#test_app_memory_consumption_package_name').val();
obj['bugreport'] = $('#bugreport').val();
obj['adb_info'] = $('#adb_info').val();
fs.writeFile(__dirname + "/other/parameter_save.json", JSON.stringify(obj), { flag: "w" }, function (err) {
if (err) {
return console.log(err);
} else {
alert("保存成功");
}
})
})
//恢复参数按钮处理
$('#restore_parameter').click(function () {
//读取文件内容
fs.readFile(__dirname + "/other/parameter_save.json", function (err, data) {
if (err) {
return console.log(err);
} else {
//将内容转成对象
var obj = JSON.parse(data);
//将对象的属性值写入界面控件中的value
$('#getPackageName_textarea').val(obj['getPackageName_textarea']);
$('#package_name').val(obj['package_name']);
$('#getDeviceInfo_textarea').val(obj['getDeviceInfo_textarea']);
$('#getDeviceInfo').val(obj['getDeviceInfo']);
$('#event_count').val(obj['event_count']);
$('#seed').val(obj['seed']);
$('#delay_time').val(obj['delay_time']);
$('#touch').val(obj['touch']);
$('#motion').val(obj['motion']);
$('#trackball').val(obj['trackball']);
$('#base_nav').val(obj['base_nav']);
$('#major_nav').val(obj['major_nav']);
$('#syskeys').val(obj['syskeys']);
$('#appswitch').val(obj['appswitch']);
$('#other_event').val(obj['other_event']);
$('#loginfo').val(obj['loginfo']);
$('#pull_all_log').val(obj['pull_all_log']);
$('#pull_app_log').val(obj['pull_app_log']);
$('#pull_crash_reboot_log').val(obj['pull_crash_reboot_log']);
$('#pull_fiddler_log').val(obj['pull_fiddler_log']);
$('#app_version_name').val(obj['app_version_name']);
$('#test_app_memory_consumption_package_name').val(obj['test_app_memory_consumption_package_name']);
$('#bugreport').val(obj['bugreport']);
$('#adb_info').val(obj['adb_info']);
alert("恢复成功");
}
})
})
//执行adb monkey命令
var cmd = require('node-cmd');
//当点击执行按钮时,执行
$("#start").click(function () {
//获取单选按钮组合,当前被选中的单选按钮的值
var platform_name = $('input[name="platform"]:checked').val();
//判断是哪个平台
if (platform_name === "Windows") {
//Windows
console.log("您当前选中的平台是:" + platform_name);
var text = '';
//判断设备是否连接
cmd.get('adb devices',
function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
}
console.log('the current dir contains these files :\n\n', data.split(" List of devices attached"))
//检查设备是否连接
// if ((data.indexOf("device")!=-1)) {
console.log("adb devices返回的内容:" + data);
// console.log("设备已连接");
$.each($('input:checkbox:checked'), function () {
//调试输出 弹窗
//window.alert("你选了:"+$('input[type=checkbox]:checked').length+"个,其中有:"+$(this).val());
text = text + $(this).val() + ' ';
});
console.log("text" + text);
//执行monkey命令
//$('input:checkbox:checked') 等同于 $('input[type=checkbox]:checked')
//意思是选择被选中的checkbox
//input1 设备名 input2 次数 input包名
cmd.get('adb -s ' + $('#getDeviceInfo').val() + ' shell monkey' + ' -p ' + $('#package_name').val() + ' -v -v -v ' + $('#event_count').val() + " --throttle " + $('#delay_time').val() + " -s " + $('#seed').val() + " --pct-touch " + $('#touch').val() + " --pct-motion " + $('#motion').val() + " --pct-trackball " + $('#trackball').val() + " --pct-nav " + $('#base_nav').val() + " --pct-majornav " + $('#major_nav').val() + " --pct-syskeys " + $('#syskeys').val() + " --pct-appswitch " + $('#appswitch').val() + " --pct-anyevent " + $('#other_event').val() + ' ' + text + ' ' + $('#save_path').val(),
//'adb -s '+$('#input1').val()+' shell monkey -v 100 1> /Users/liyinchi/monkey.log 2> /Users/liyinchi/error.log',
function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
}
console.log('the current dir contains these files :\n\n', data);
//显示日志内容
$("#loginfo").val(data);
}
);
alert('adb -s ' + $('#getDeviceInfo').val() + ' shell monkey ' + ' -p ' + $('#package_name').val() + ' -v -v -v ' + $('#event_count').val() + " --throttle " + $('#delay_time').val() + " -s " + $('#seed').val() + " --pct-touch " + $('#touch').val() + " --pct-motion " + $('#motion').val() + " --pct-trackball " + $('#trackball').val() + " --pct-nav " + $('#base_nav').val() + " --pct-majornav " + $('#major_nav').val() + " --pct-syskeys " + $('#syskeys').val() + " --pct-appswitch " + $('#appswitch').val() + " --pct-anyevent " + $('#other_event').val() + ' ' + text + ' ' + $('#save_path').val());
}
);
} else {
//Mac
console.log("您当前选中的平台是:" + platform_name);
}
});
//一键获取当前连接的设备信息
$("#getDevices").click(function () {
//获取当前设备
cmd.get(
'adb devices',
function (err, stdout, stderr) {
if (err) {
alert(err);
console.log(err);
}
console.log('adb devices :\n\n', stdout);
//判断当前是否有设备
// if (data.match(RegExp(/device/))){
$("#getDeviceInfo_textarea").val(stdout)
// } else {
// alert("当前没有设备连接你的电脑");
// }
}
);
});
//杀掉进程,即重启手机,对象为当前指定的设备名名称
$("#stop").click(function () {
cmd.run('adb -s ' + $('#getDeviceInfo').val() + ' shell reboot');
console.log('重启:' + 'adb -s' + $('#getDeviceInfo').val() + ' shell reboot');
})
//导出traces.txt
$("#pull_traces").click(function () {
cmd.run('adb pull /data/anr/traces.txt ' + $('#pull_traces_path').val());
console.log('traces:' + 'adb pull /data/anr/traces.txt ' + $('#pull_traces_path').val());
})
//获取当前设备已启动的包名
$("#getPackageName").click(function () {
if ($('input:radio[name="platform"]:checked').val() === "Windows") {
cmd.get('adb shell dumpsys window | findstr mCurrentFocu', function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
}
console.log('获取当前包名' + data);
$("#getPackageName_textarea").val(data);
});
} else {
cmd.get('adb shell dumpsys window | grep mCurrentFocu', function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
}
console.log('获取当前包名' + data);
$("#getPackageName_textarea").val(data);
});
}
})
//抓取所有LOG命令
$('#output_pull_all_log').click(function () {
cmd.get('adb logcat –v time > ' + $('#pull_all_log').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
$('#adb_info').val(data);
alert('导出成功!');
}
})
})
//抓取应用层LOG命令
$('#output_pull_app_log').click(function () {
cmd.get('adb logcat –b main –v time > ' + $('#pull_app_log').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
$('#adb_info').val(data);
alert('导出成功!');
}
})
})
//抓取死机、重启LOG命令
$('#output_crash_reboot_log').click(function () {
cmd.get('adb shell dumpsys > ' + $('#pull_crash_reboot_log').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
$('#adb_info').val(data);
alert('导出成功!');
}
})
})
//获取指定应用名称的版本号
$('#get_app_version').click(function () {
cmd.get('adb shell dumpsys package ' + $('#app_version_name').val() + ' | grep version', function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
alert("成功");
$('#adb_info').val(data);
console.log(data);
}
})
});
//生成指定路径下bugreport.txt
$('#get_bugreport').click(function () {
cmd.get('adb shell bugreport > ' + $('#bugreport').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
alert("生成bugreport成功!");
$('#adb_info').val(data);
console.log(data);
}
});
})
//获取系统信息
$('#get_system_apk').click(function () {
cmd.get('adb shell top -m 30', function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
alert('成功');
$('#adb_info').val(data);
console.log(data);
}
})
}
)
//获取应用占用内存资源
$('#get_test_app_memory_consumption').click(function () {
cmd.get('adb shell dumpsys meminfo ' + $('#test_app_memory_consumption_package_name').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
alert("成功");
$('#adb_info').val(data);
console.log(data);
}
})
})
//抓取过滤级别LOG
$('#output_fiddler_log').click(function () {
cmd.get('adb logcat *:'+$("#fiddler_log").find('option:selected').val()+' > '+$('#pull_fiddler_log').val(), function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
//alert('adb logcat *:'+$('#fiddler_log option:selected').val()+' > '+$('#pull_fiddler_log').val());
//console.log(('adb logcat *:'+$('#fiddler_log option:selected').val()+' > '+$('#pull_fiddler_log').val());
}
})
})
//清除缓存日志
$('#clean_cache_log').click(function () {
cmd.get('adb logcat -c', function (err, data, stderr) {
if (err) {
alert(err);
console.log(err);
} else {
alert("清除成功");
console.log(data);
}
})
})
</script>
</body>
</html>