smart_monkey 0.3 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/bin/smart_monkey +2 -0
- data/lib/smart_monkey/monkey_doctor.rb +18 -0
- data/lib/smart_monkey/monkey_runner.rb +81 -22
- data/lib/smart_monkey.rb +1 -0
- data/lib/ui-auto-monkey/UIAutoMonkey.js +50 -14
- data/lib/ui-auto-monkey/custom.js +4 -4
- data/reset.sh +42 -0
- metadata +3 -4
- data/.rspec +0 -1
- data/Gemfile +0 -17
- data/smart_monkey.gemspec +0 -113
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f43f6aa20e6eedb6e5c28de2b98bfdc86e608a9
|
4
|
+
data.tar.gz: c32bb2694836f6d8116d320526e88eff3ea5c2d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cff1fbd4a22560d4c8b6eb6c1df2b170be4b8cddc52b2f5a9d68c9e06dbb8b34a80daf950284f639d5b4d2aef31d66c439d0315adbf4286316b4465bb98c3d9e
|
7
|
+
data.tar.gz: 9f53613758f53e3cc5cabf072917f4d08238bff2fcec5140c4bcb303c7878796a77f979cceac941070ba332bba4d18ac2cbab532a0763790ee457b6c551c5006
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ iOS Monkey Test Tool.
|
|
39
39
|
$ smart_monkey -h
|
40
40
|
Usage: smart_monkey [options]
|
41
41
|
-a app_name Bundle ID of the desired target on device(Required)
|
42
|
-
-w device Target
|
42
|
+
-w device Target device udid or device describe will match" (Required)
|
43
43
|
-n run_count How many times monkeys run(default: 1)
|
44
44
|
-d result_dir Where to output result(default: ./smart_monkey_result)
|
45
45
|
-t time_limit_sec Time limit of running
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.1
|
data/bin/smart_monkey
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module MonkeyDoctor
|
4
|
+
|
5
|
+
def MonkeyDoctor.run_env_doctor
|
6
|
+
doctor_list = []
|
7
|
+
doctor_list << `hash idevice_id 2>/dev/null || { echo "Require 'libimobiledevice' but it's not installed. Please run 'brew install libimobiledevice' to install it."; exit 1; };`.strip
|
8
|
+
doctor_list << `hash ideviceinstaller 2>/dev/null || { echo "Require 'ideviceinstaller' but it's not installed. Please run 'brew install ideviceinstaller' to install it."; exit 1; };`.strip
|
9
|
+
doctor_list << `hash mogrify 2>/dev/null || { echo "Require 'imagemagick' but it's not installed. Please run 'brew install imagemagick' to install it."; exit 1; }; `.strip
|
10
|
+
doctor_list.each do |item|
|
11
|
+
if !item.empty?
|
12
|
+
puts item
|
13
|
+
exit(1)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -129,6 +129,7 @@ module UIAutoMonkey
|
|
129
129
|
if @options[:compress_rate]
|
130
130
|
compress_image(result_history_dir(@times))
|
131
131
|
end
|
132
|
+
rotate_imgs(result_history_dir(@times))
|
132
133
|
rm_instruments_trace(INSTRUMENTS_TRACE_PATH)
|
133
134
|
kill_all('iPhone Simulator')
|
134
135
|
sleep 3
|
@@ -170,8 +171,8 @@ module UIAutoMonkey
|
|
170
171
|
def list_app
|
171
172
|
puts "============For iPhone Simulator:"
|
172
173
|
puts find_apps('*.app').map{|n| File.basename n}.uniq.sort.join("\n")
|
173
|
-
|
174
|
-
|
174
|
+
if !is_simulator
|
175
|
+
puts "============For iPhone Device:"
|
175
176
|
puts `ideviceinstaller -u #{device} -l`
|
176
177
|
end
|
177
178
|
end
|
@@ -194,7 +195,11 @@ module UIAutoMonkey
|
|
194
195
|
end
|
195
196
|
|
196
197
|
def device
|
197
|
-
@options[:device]
|
198
|
+
if @options[:device]
|
199
|
+
find_device(@options[:device])
|
200
|
+
else
|
201
|
+
(devices[0].strip.split("[")[1].delete "]")
|
202
|
+
end
|
198
203
|
end
|
199
204
|
|
200
205
|
def app_path
|
@@ -213,8 +218,18 @@ module UIAutoMonkey
|
|
213
218
|
`"instruments" -s devices`.strip.split(/\n/).drop(2)
|
214
219
|
end
|
215
220
|
|
221
|
+
def find_device(device)
|
222
|
+
device_line = `"instruments" -s devices | grep "#{device}"`.strip.split(/\n/)[0]
|
223
|
+
if device_line.nil?
|
224
|
+
puts "Invalid device, Please given a vaild device!"
|
225
|
+
puts `"instruments" -s devices`
|
226
|
+
exit(1)
|
227
|
+
end
|
228
|
+
device_line.strip.split("[")[1].delete "]"
|
229
|
+
end
|
230
|
+
|
216
231
|
def instruments_deviceinfo(device)
|
217
|
-
`"instruments" -s devices | grep #{device}`.strip
|
232
|
+
`"instruments" -s devices | grep "#{device}"`.strip
|
218
233
|
end
|
219
234
|
|
220
235
|
def is_simulator
|
@@ -228,20 +243,51 @@ module UIAutoMonkey
|
|
228
243
|
|
229
244
|
def product_type(device)
|
230
245
|
product_hash={
|
231
|
-
"iPhone7,2"=>"iPhone 6",
|
232
|
-
"iPhone7,1"=>"iPhone 6 Plus",
|
233
|
-
"iPhone6,2"=>"iPhone 5S (CDMA)",
|
234
|
-
"iPhone6,1"=>"iPhone 5S (GSM)",
|
235
|
-
"iPhone5,4"=>"iPhone 5C (CDMA)",
|
236
|
-
"iPhone5,3"=>"iPhone 5C (GSM)",
|
237
|
-
"iPhone5,2"=>"iPhone 5",
|
238
|
-
"iPhone5,1"=>"iPhone 5",
|
239
|
-
"iPhone4,1"=>"iPhone 4S",
|
240
|
-
"iPhone3,2"=>"iPhone 4 - CDMA",
|
241
|
-
"iPhone3,1"=>"iPhone 4 - GSM",
|
242
|
-
"iPhone2,1"=>"iPhone 3GS",
|
243
|
-
"iPhone1,2"=>"iPhone 3G",
|
244
246
|
"iPhone1,1"=>"iPhone",
|
247
|
+
"iPhone1,2"=>"iPhone 3G",
|
248
|
+
"iPhone2,1"=>"iPhone 3GS",
|
249
|
+
"iPhone3,1"=>"iPhone 4 - GSM",
|
250
|
+
"iPhone3,2"=>"iPhone 4 - CDMA",
|
251
|
+
"iPhone3,3"=>"iPhone 4 - CDMA",
|
252
|
+
"iPhone4,1"=>"iPhone 4S",
|
253
|
+
"iPhone5,1"=>"iPhone 5",
|
254
|
+
"iPhone5,2"=>"iPhone 5",
|
255
|
+
"iPhone5,3"=>"iPhone 5C (GSM)",
|
256
|
+
"iPhone5,4"=>"iPhone 5C (CDMA)",
|
257
|
+
"iPhone6,1"=>"iPhone 5S (GSM)",
|
258
|
+
"iPhone6,2"=>"iPhone 5S (CDMA)",
|
259
|
+
"iPhone7,1"=>"iPhone 6 Plus",
|
260
|
+
"iPhone7,2"=>"iPhone 6",
|
261
|
+
"iPad1,1"=>"iPad",
|
262
|
+
"iPad2,1"=>"iPad 2 (Wi-Fi)",
|
263
|
+
"iPad2,2"=>"iPad 2 (GSM)",
|
264
|
+
"iPad2,3"=>"iPad 2 (CDMA)",
|
265
|
+
"iPad2,4"=>"iPad 2 (Wi-Fi, revised)",
|
266
|
+
"iPad2,5"=>"iPad mini (Wi-Fi)",
|
267
|
+
"iPad2,6"=>"iPad mini (A1454)",
|
268
|
+
"iPad2,7"=>"iPad mini (A1455)",
|
269
|
+
"iPad3,1"=>"iPad (3rd gen, Wi-Fi)",
|
270
|
+
"iPad3,2"=>"iPad (3rd gen, Wi-Fi+LTE Verizon)",
|
271
|
+
"iPad3,3"=>"iPad (3rd gen, Wi-Fi+LTE AT&T)",
|
272
|
+
"iPad3,4"=>"iPad (4th gen, Wi-Fi)",
|
273
|
+
"iPad3,5"=>"iPad (4th gen, A1459)",
|
274
|
+
"iPad3,6"=>"iPad (4th gen, A1460)",
|
275
|
+
"iPad4,1"=>"iPad Air (Wi-Fi)",
|
276
|
+
"iPad4,2"=>"iPad Air (Wi-Fi+LTE)",
|
277
|
+
"iPad4,3"=>"iPad Air (Rev)",
|
278
|
+
"iPad4,4"=>"iPad mini 2 (Wi-Fi)",
|
279
|
+
"iPad4,5"=>"iPad mini 2 (Wi-Fi+LTE)",
|
280
|
+
"iPad4,6"=>"iPad mini 2 (Rev)",
|
281
|
+
"iPad4,7"=>"iPad mini 3 (Wi-Fi)",
|
282
|
+
"iPad4,8"=>"iPad mini 3 (A1600)",
|
283
|
+
"iPad4,9"=>"iPad mini 3 (A1601)",
|
284
|
+
"iPad5,3"=>"iPad Air 2 (Wi-Fi)",
|
285
|
+
"iPad5,4"=>"iPad Air 2 (Wi-Fi+LTE)",
|
286
|
+
"iPod1,1"=>"iPod touch",
|
287
|
+
"iPod2,1"=>"iPod touch (2nd gen)",
|
288
|
+
"iPod3,1"=>"iPod touch (3rd gen)",
|
289
|
+
"iPod4,1"=>"iPod touch (4th gen)",
|
290
|
+
"iPod5,1"=>"iPod touch (5th gen)",
|
245
291
|
}
|
246
292
|
|
247
293
|
if is_simulator
|
@@ -271,6 +317,20 @@ module UIAutoMonkey
|
|
271
317
|
`mogrify -resize #{compress_rate} "#{path}/*.png"`
|
272
318
|
end
|
273
319
|
|
320
|
+
def rotate_imgs(path)
|
321
|
+
rotated_map={
|
322
|
+
"1"=>nil,
|
323
|
+
"2"=>"180",
|
324
|
+
"3"=>"270",
|
325
|
+
"4"=>"90",
|
326
|
+
}
|
327
|
+
orientationNum = File.read(File.join(result_base_dir,"orientation")).strip
|
328
|
+
value = rotated_map[orientationNum]
|
329
|
+
unless value.nil?
|
330
|
+
`mogrify -rotate #{value} "#{path}/*.png"`
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
274
334
|
def kill_all_need
|
275
335
|
kill_all('instruments', '9')
|
276
336
|
kill_all('Instruments', '9')
|
@@ -425,7 +485,7 @@ module UIAutoMonkey
|
|
425
485
|
# if extend_javascript_flag
|
426
486
|
# js = File.read(extend_javascript_path) + "\n" + js
|
427
487
|
# end
|
428
|
-
envs_str="UniqueDeviceID=\"#{device}\"
|
488
|
+
envs_str="UniqueDeviceID=\"#{device}\";\nResultBaseDir=\"#{result_base_dir}\";\n"
|
429
489
|
File.open(File.join(result_base_dir,"Env.js"), 'w') {|f| f.write(envs_str)}
|
430
490
|
FileUtils.copy(config_custom_path, result_base_dir)
|
431
491
|
FileUtils.copy(ui_auto_monkey_original_path, result_base_dir)
|
@@ -541,7 +601,7 @@ module UIAutoMonkey
|
|
541
601
|
if log[LOG_TYPE] == 'Screenshot'
|
542
602
|
if log[MESSAGE] =~ /^action/
|
543
603
|
hash[:action_image] = log[MESSAGE]
|
544
|
-
elsif log[MESSAGE] =~ /^monkey
|
604
|
+
elsif log[MESSAGE] =~ /^monkey[^external]*$/
|
545
605
|
hash[:screen_image] = log[MESSAGE]
|
546
606
|
used_imgs << log[MESSAGE]
|
547
607
|
hash[:timestamp] = log[TIMESTAMP]
|
@@ -556,9 +616,8 @@ module UIAutoMonkey
|
|
556
616
|
num -= 1
|
557
617
|
end
|
558
618
|
elsif log[LOG_TYPE] == 'Debug' && log[MESSAGE] =~ /^target./
|
559
|
-
hash[:message] = log[MESSAGE] unless log[MESSAGE] =~ /^target.captureRectWithName/ && log[MESSAGE] =~ /switcherScrollView/
|
560
|
-
|
561
|
-
# hash[:screen_size] = log[MESSAGE]
|
619
|
+
# hash[:message] = log[MESSAGE] unless log[MESSAGE] =~ /^target.captureRectWithName/ && log[MESSAGE] =~ /switcherScrollView/
|
620
|
+
hash[:message] = log[MESSAGE] unless log[MESSAGE] =~ /size:{height:0.00,width:0.00}/ || log[MESSAGE] =~ /switcherScrollView/
|
562
621
|
end
|
563
622
|
end
|
564
623
|
#drop unused imgs
|
data/lib/smart_monkey.rb
CHANGED
@@ -104,7 +104,7 @@ function UIAutoMonkey() {
|
|
104
104
|
},
|
105
105
|
|
106
106
|
targetBundleId: UIATarget.localTarget().frontMostApp().bundleID(),
|
107
|
-
|
107
|
+
orientationNum: UIATarget.localTarget().frontMostApp().interfaceOrientation().toString(),
|
108
108
|
|
109
109
|
|
110
110
|
// Uncomment the following to restrict events to a rectangluar area of
|
@@ -125,7 +125,14 @@ function UIAutoMonkey() {
|
|
125
125
|
return false;
|
126
126
|
}
|
127
127
|
|
128
|
-
}
|
128
|
+
};
|
129
|
+
|
130
|
+
//Array class addon func.
|
131
|
+
Array.prototype.S=String.fromCharCode(2);
|
132
|
+
Array.prototype.in_array=function(e){
|
133
|
+
var r=new RegExp(this.S+e+this.S);
|
134
|
+
return (r.test(this.S+this.join(this.S)+this.S));
|
135
|
+
};
|
129
136
|
|
130
137
|
// --- --- --- ---
|
131
138
|
// Event Methods
|
@@ -178,7 +185,7 @@ UIAutoMonkey.prototype.allEvents = {
|
|
178
185
|
var i = Math.floor(Math.random() * 10) % orientations.length;
|
179
186
|
var newOrientation = orientations[i];
|
180
187
|
this.target().setDeviceOrientation(newOrientation);
|
181
|
-
this.delay(
|
188
|
+
this.delay(1);
|
182
189
|
},
|
183
190
|
|
184
191
|
clickVolumeUp: function() {
|
@@ -225,6 +232,7 @@ UIAutoMonkey.prototype.RELEASE_THE_MONKEY = function() {
|
|
225
232
|
if (this.config.minutesToRun && this.config.numberOfEvents) {
|
226
233
|
throw "invalid configuration. You cannot define both minutesToRun and numberOfEvents"
|
227
234
|
}
|
235
|
+
this.saveDeviceOrientation(); //save current app orientation number.
|
228
236
|
var conditionHandlers = this.config.conditionHandlers || []; //For legacy configs, if not present default to empty.
|
229
237
|
var useConditionHandlers = conditionHandlers.length > 0;
|
230
238
|
var checkTime = false;
|
@@ -244,9 +252,9 @@ UIAutoMonkey.prototype.RELEASE_THE_MONKEY = function() {
|
|
244
252
|
var anrDebug = this.config.anrSettings.debug;
|
245
253
|
this.anrMaxElapsedCount = -1;
|
246
254
|
}
|
247
|
-
|
248
|
-
UIALogger.logMessage(JSON.stringify(UIATarget.localTarget().rect().size));
|
249
255
|
|
256
|
+
UIALogger.logMessage(JSON.stringify(UIATarget.localTarget().rect().size));
|
257
|
+
|
250
258
|
for (var i = 0; i < localNumberOfEvents; i++) {
|
251
259
|
if (checkTime && (i % checkTimeEvery == 0)) { //check the time if needed
|
252
260
|
var currTime = new Date().getTime();
|
@@ -288,7 +296,6 @@ UIAutoMonkey.prototype.RELEASE_THE_MONKEY = function() {
|
|
288
296
|
|
289
297
|
|
290
298
|
UIAutoMonkey.prototype.anrCheck = function(i, fingerprintFunction, debugFlag){
|
291
|
-
|
292
299
|
var newSnapshot = fingerprintFunction();
|
293
300
|
if (newSnapshot != this.anrSnapshot) {
|
294
301
|
//all is good, we're moving along
|
@@ -328,6 +335,7 @@ UIAutoMonkey.prototype.processConditionHandlers = function(conditionHandlers, ev
|
|
328
335
|
}
|
329
336
|
if (isConditionTrue) {
|
330
337
|
aCondition.handle(target, mainWindow);
|
338
|
+
this.takeScreenShotIfItIsTime();
|
331
339
|
if (aCondition.isExclusive()) {
|
332
340
|
break;
|
333
341
|
} else {
|
@@ -386,12 +394,12 @@ UIAutoMonkey.prototype.chooseEventName = function() {
|
|
386
394
|
|
387
395
|
UIAutoMonkey.prototype.screenWidth = function() {
|
388
396
|
// Need to adjust by one to stay within rectangle
|
389
|
-
return this.target().rect().size.width - 1;
|
397
|
+
return parseInt(this.target().rect().size.width - 1);
|
390
398
|
};
|
391
399
|
|
392
400
|
UIAutoMonkey.prototype.screenHeight = function() {
|
393
401
|
// Need to adjust by one to stay within rectangle
|
394
|
-
return this.target().rect().size.height - 1;
|
402
|
+
return parseInt(this.target().rect().size.height - 1);
|
395
403
|
};
|
396
404
|
|
397
405
|
UIAutoMonkey.prototype.randomX = function() {
|
@@ -399,9 +407,15 @@ UIAutoMonkey.prototype.randomX = function() {
|
|
399
407
|
var r = Math.random();
|
400
408
|
|
401
409
|
if (this.config.frame){
|
402
|
-
|
403
|
-
|
404
|
-
|
410
|
+
if(this.screenRectSafe()){
|
411
|
+
// Limits coordinates to given frame if set in config
|
412
|
+
min = this.config.frame.origin.x;
|
413
|
+
max = this.config.frame.size.width + min;
|
414
|
+
}else{
|
415
|
+
// Limits coordinates to given frame if set in config
|
416
|
+
min = parseInt(this.target().rect().origin.x);
|
417
|
+
max = this.screenWidth() + min;
|
418
|
+
}
|
405
419
|
} else {
|
406
420
|
// Returns a random X coordinate within the screen rectangle
|
407
421
|
min = 0;
|
@@ -415,9 +429,15 @@ UIAutoMonkey.prototype.randomY = function() {
|
|
415
429
|
var r = Math.random();
|
416
430
|
|
417
431
|
if (this.config.frame){
|
418
|
-
|
419
|
-
|
420
|
-
|
432
|
+
if(this.screenRectSafe()){
|
433
|
+
// Limits coordinates to given frame if set in config
|
434
|
+
min = this.config.frame.origin.y;
|
435
|
+
max = this.config.frame.size.height + min;
|
436
|
+
}else{
|
437
|
+
// Limits coordinates to given frame if set in config
|
438
|
+
min = parseInt(this.target().rect().origin.y);
|
439
|
+
max = this.screenHeight() + min;
|
440
|
+
}
|
421
441
|
} else {
|
422
442
|
// Returns a random Y coordinate within the screen rectangle
|
423
443
|
min = 0;
|
@@ -477,6 +497,22 @@ UIAutoMonkey.prototype.reLaunchApp = function() {
|
|
477
497
|
this.target().host().performTaskWithPathArgumentsTimeout(idevicedebug_original_path, ["-u", UniqueDeviceID, "run", this.config.targetBundleId, ">/dev/null", "2>&1", "&"], 5);
|
478
498
|
};
|
479
499
|
|
500
|
+
UIAutoMonkey.prototype.saveDeviceOrientation = function() {
|
501
|
+
var saveFile = ResultBaseDir + "/" + "orientation";
|
502
|
+
var command = "echo " + this.config.orientationNum + " > " + saveFile
|
503
|
+
this.target().host().performTaskWithPathArgumentsTimeout("/bin/bash", ["-c", command], 5);
|
504
|
+
};
|
505
|
+
|
506
|
+
UIAutoMonkey.prototype.screenRectSafe = function() {
|
507
|
+
var vertical_arr = ["1", "2"];
|
508
|
+
var horizontal_arr = ["3" ,"4"];
|
509
|
+
var current_orientation = this.target().frontMostApp().interfaceOrientation().toString();
|
510
|
+
var config_orientation = this.config.orientationNum;
|
511
|
+
var condition_allin_vertical = vertical_arr.in_array(current_orientation) && vertical_arr.in_array(config_orientation);
|
512
|
+
var condition_allin_horizontal = horizontal_arr.in_array(current_orientation) && horizontal_arr.in_array(config_orientation);
|
513
|
+
return condition_allin_vertical || condition_allin_horizontal
|
514
|
+
};
|
515
|
+
|
480
516
|
// Commodity function to call RELEASE_THE_MONKEY directly on UIAutoMonkey
|
481
517
|
// if you don't need to customize your instance
|
482
518
|
UIAutoMonkey.RELEASE_THE_MONKEY = function() {
|
@@ -27,12 +27,12 @@ monkey.config.touchProbability = {
|
|
27
27
|
monkey.config.frame = {
|
28
28
|
origin:
|
29
29
|
{
|
30
|
-
x: parseInt(UIATarget.localTarget().
|
31
|
-
y: parseInt(UIATarget.localTarget().
|
30
|
+
x: parseInt(UIATarget.localTarget().rect().origin.x),
|
31
|
+
y: parseInt(UIATarget.localTarget().rect().origin.y)+20
|
32
32
|
},
|
33
33
|
size: {
|
34
|
-
width: parseInt(UIATarget.localTarget().
|
35
|
-
height: parseInt(UIATarget.localTarget().
|
34
|
+
width: parseInt(UIATarget.localTarget().rect().size.width),
|
35
|
+
height: parseInt(UIATarget.localTarget().rect().size.height)-20
|
36
36
|
}
|
37
37
|
};// Ignore the UIAStatusBar area, avoid to drag out the notification page.
|
38
38
|
|
data/reset.sh
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
function gem_installer()
|
4
|
+
{
|
5
|
+
gem_name=$1
|
6
|
+
gem_info=`gem list | grep $gem_name`
|
7
|
+
if [ "$gem_info" = "" ]; then
|
8
|
+
echo "gem install ruby library $gem_name..."
|
9
|
+
gem install $gem_name
|
10
|
+
echo "gem install ruby library $gem_name done."
|
11
|
+
else
|
12
|
+
echo "gem already installed ruby library $gem_name."
|
13
|
+
fi
|
14
|
+
|
15
|
+
}
|
16
|
+
|
17
|
+
function brew_installer()
|
18
|
+
{
|
19
|
+
module_name=$1
|
20
|
+
module_info=`brew list $module_name 2>&1`
|
21
|
+
if [[ "$module_info" =~ "Error: No such keg: /usr/local/Cellar/$module_name" ]]; then
|
22
|
+
echo "install depends $module_name..."
|
23
|
+
brew update >/dev/null 2>&1
|
24
|
+
wait
|
25
|
+
brew install $module_name
|
26
|
+
wait
|
27
|
+
echo "install depends $module_name done."
|
28
|
+
else
|
29
|
+
echo "$module_name already install."
|
30
|
+
echo "upgrade $module_name..."
|
31
|
+
brew upgrade $module_name >/dev/null 2>&1
|
32
|
+
echo "upgrade $module_name done."
|
33
|
+
fi
|
34
|
+
}
|
35
|
+
|
36
|
+
# install ruby library via gem
|
37
|
+
gem_installer erubis
|
38
|
+
|
39
|
+
# install 3rd depends library via brew
|
40
|
+
brew_installer libimobiledevice
|
41
|
+
brew_installer imagemagick
|
42
|
+
brew_installer ideviceinstaller
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_monkey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vigossjjj
|
@@ -117,8 +117,6 @@ extra_rdoc_files:
|
|
117
117
|
- LICENSE.txt
|
118
118
|
- README.md
|
119
119
|
files:
|
120
|
-
- ".rspec"
|
121
|
-
- Gemfile
|
122
120
|
- LICENSE.txt
|
123
121
|
- README.md
|
124
122
|
- Rakefile
|
@@ -136,6 +134,7 @@ files:
|
|
136
134
|
- lib/ios_device_log/deviceconsole
|
137
135
|
- lib/smart_monkey.rb
|
138
136
|
- lib/smart_monkey/command_helper.rb
|
137
|
+
- lib/smart_monkey/monkey_doctor.rb
|
139
138
|
- lib/smart_monkey/monkey_runner.rb
|
140
139
|
- lib/smart_monkey/templates/automation_result.xsl
|
141
140
|
- lib/smart_monkey/templates/index.html.erb
|
@@ -164,7 +163,7 @@ files:
|
|
164
163
|
- lib/ui-auto-monkey/tuneup/tuneup.js
|
165
164
|
- lib/ui-auto-monkey/tuneup/tuneup_js.podspec
|
166
165
|
- lib/ui-auto-monkey/tuneup/uiautomation-ext.js
|
167
|
-
-
|
166
|
+
- reset.sh
|
168
167
|
- spec/spec_helper.rb
|
169
168
|
homepage: https://github.com/vigossjjj/CrashMonkey4IOS
|
170
169
|
licenses:
|
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/Gemfile
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in smart_monkey.gemspec
|
4
|
-
gem 'erubis', '>= 2.7.0'
|
5
|
-
gem 'json', '>= 1.7.0'
|
6
|
-
|
7
|
-
group :development do
|
8
|
-
gem 'rspec', '~> 2.8.0'
|
9
|
-
gem 'rdoc', '~> 3.12'
|
10
|
-
gem 'bundler', '> 1.0.0'
|
11
|
-
gem 'jeweler', '~> 1.8.4'
|
12
|
-
if RUBY_VERSION > '1.9' then
|
13
|
-
gem 'simplecov', '>= 0.8.2'
|
14
|
-
else
|
15
|
-
gem 'rcov', '>= 0'
|
16
|
-
end
|
17
|
-
end
|
data/smart_monkey.gemspec
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{smart_monkey}
|
8
|
-
version_path = File.join(File.dirname(__FILE__), "VERSION")
|
9
|
-
s.version = File.read(version_path)
|
10
|
-
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.authors = ["vigossjjj"]
|
13
|
-
s.date = %q{2015-06-01}
|
14
|
-
s.default_executable = %q{smart_monkey}
|
15
|
-
s.description = %q{iOS Monkey test tool base on UIAutomation.}
|
16
|
-
s.email = %q{jiangyunpeng@58.com}
|
17
|
-
s.executables = ["smart_monkey"]
|
18
|
-
s.extra_rdoc_files = [
|
19
|
-
"LICENSE.txt",
|
20
|
-
"README.md",
|
21
|
-
]
|
22
|
-
s.files = [
|
23
|
-
".rspec",
|
24
|
-
"Gemfile",
|
25
|
-
"LICENSE.txt",
|
26
|
-
"README.md",
|
27
|
-
"Rakefile",
|
28
|
-
"Troubleshooting.md",
|
29
|
-
"VERSION",
|
30
|
-
"bin/smart_monkey",
|
31
|
-
"smart_monkey.gemspec",
|
32
|
-
"lib/bootstrap/css/bootstrap-responsive.css",
|
33
|
-
"lib/bootstrap/css/bootstrap-responsive.min.css",
|
34
|
-
"lib/bootstrap/css/bootstrap.css",
|
35
|
-
"lib/bootstrap/css/bootstrap.min.css",
|
36
|
-
"lib/bootstrap/img/glyphicons-halflings-white.png",
|
37
|
-
"lib/bootstrap/img/glyphicons-halflings.png",
|
38
|
-
"lib/bootstrap/js/bootstrap.js",
|
39
|
-
"lib/bootstrap/js/bootstrap.min.js",
|
40
|
-
"lib/ios_device_log/deviceconsole",
|
41
|
-
"lib/smart_monkey.rb",
|
42
|
-
"lib/smart_monkey/command_helper.rb",
|
43
|
-
"lib/smart_monkey/monkey_runner.rb",
|
44
|
-
"lib/smart_monkey/templates/automation_result.xsl",
|
45
|
-
"lib/smart_monkey/templates/index.html.erb",
|
46
|
-
"lib/smart_monkey/templates/result.html.erb",
|
47
|
-
"lib/smart_monkey/templates/result_view.coffee",
|
48
|
-
"lib/smart_monkey/templates/result_view.js",
|
49
|
-
"lib/smart_monkey/templates/jquery.min.js",
|
50
|
-
"lib/ui-auto-monkey/custom.js",
|
51
|
-
"lib/ui-auto-monkey/UIAutoMonkey.js",
|
52
|
-
"lib/ui-auto-monkey/handler/buttonHandler.js",
|
53
|
-
"lib/ui-auto-monkey/handler/wbScrollViewButtonHandler.js",
|
54
|
-
"lib/ui-auto-monkey/tuneup/assertions.js",
|
55
|
-
"lib/ui-auto-monkey/tuneup/image_asserter",
|
56
|
-
"lib/ui-auto-monkey/tuneup/image_assertion.js",
|
57
|
-
"lib/ui-auto-monkey/tuneup/image_assertion.rb",
|
58
|
-
"lib/ui-auto-monkey/tuneup/lang-ext.js",
|
59
|
-
"lib/ui-auto-monkey/tuneup/LICENSE",
|
60
|
-
"lib/ui-auto-monkey/tuneup/screen.js",
|
61
|
-
"lib/ui-auto-monkey/tuneup/test.js",
|
62
|
-
"lib/ui-auto-monkey/tuneup/tuneup_js.podspec",
|
63
|
-
"lib/ui-auto-monkey/tuneup/tuneup.js",
|
64
|
-
"lib/ui-auto-monkey/tuneup/uiautomation-ext.js",
|
65
|
-
"lib/ui-auto-monkey/tuneup/test_runner/abbreviated_console_output.rb",
|
66
|
-
"lib/ui-auto-monkey/tuneup/test_runner/colored_console_output.rb",
|
67
|
-
"lib/ui-auto-monkey/tuneup/test_runner/console_output.rb",
|
68
|
-
"lib/ui-auto-monkey/tuneup/test_runner/preprocessor.rb",
|
69
|
-
"lib/ui-auto-monkey/tuneup/test_runner/run",
|
70
|
-
"lib/ui-auto-monkey/tuneup/test_runner/xunit_output.rb",
|
71
|
-
"spec/spec_helper.rb"
|
72
|
-
]
|
73
|
-
s.homepage = %q{https://github.com/vigossjjj/CrashMonkey4IOS}
|
74
|
-
s.licenses = ["MIT"]
|
75
|
-
s.require_paths = ["lib"]
|
76
|
-
s.rubygems_version = %q{1.6.2}
|
77
|
-
s.summary = %q{Monkey Test For iOS Application}
|
78
|
-
|
79
|
-
if s.respond_to? :specification_version then
|
80
|
-
s.specification_version = 3
|
81
|
-
|
82
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
83
|
-
s.add_runtime_dependency(%q<erubis>, [">= 2.7.0"])
|
84
|
-
s.add_runtime_dependency(%q<json>, [">= 1.7.0"])
|
85
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
86
|
-
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
87
|
-
s.add_development_dependency(%q<bundler>, ["> 1.0.0"])
|
88
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
89
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
90
|
-
else
|
91
|
-
s.add_dependency(%q<erubis>, [">= 2.7.0"])
|
92
|
-
s.add_dependency(%q<json>, [">= 1.7.0"])
|
93
|
-
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
94
|
-
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
95
|
-
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
96
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
97
|
-
if RUBY_VERSION > '1.9' then
|
98
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
99
|
-
else
|
100
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
101
|
-
end
|
102
|
-
end
|
103
|
-
else
|
104
|
-
s.add_dependency(%q<erubis>, [">= 2.7.0"])
|
105
|
-
s.add_dependency(%q<json>, [">= 1.7.0"])
|
106
|
-
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
107
|
-
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
108
|
-
s.add_dependency(%q<bundler>, ["> 1.0.0"])
|
109
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
110
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|