Class: UIAutoMonkey::MonkeyRunner
- Inherits:
-
Object
- Object
- UIAutoMonkey::MonkeyRunner
- Includes:
- CommandHelper
- Defined in:
- lib/smart_monkey/monkey_runner.rb
Constant Summary collapse
- TRACE_TEMPLATE =
'/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate'- RESULT_BASE_PATH =
File.('smart_monkey_result')
- INSTRUMENTS_TRACE_PATH =
File.('*.trace')
- TIME_STAP =
Time.new.strftime("%Y%m%d%H%M%S")
Instance Method Summary collapse
- #all_tests_ok?(result_list) ⇒ Boolean
- #app_name ⇒ Object
- #app_path ⇒ Object
- #compress_image(path) ⇒ Object
- #config_custom_path ⇒ Object
- #console_log_path ⇒ Object
- #copy_html_resources ⇒ Object
- #crash_report_list(times) ⇒ Object
- #crash_save_dir(times) ⇒ Object
- #create_index_html(result_hash) ⇒ Object
- #create_result_html(log_list) ⇒ Object
- #device ⇒ Object
- #device_name(device) ⇒ Object
- #deviceconsole_original_path ⇒ Object
- #devices ⇒ Object
- #dsym_base_path ⇒ Object
- #find_app_path(opts) ⇒ Object
- #find_apps(app) ⇒ Object
- #find_device(device) ⇒ Object
- #finish_running ⇒ Object
- #generate_ui_auto_monkey ⇒ Object
- #grep_ios_syslog ⇒ Object
- #instruments_deviceinfo(device) ⇒ Object
- #is_simulator ⇒ Object
- #kill_all_need ⇒ Object
- #list_app ⇒ Object
- #list_devices ⇒ Object
- #log(msg) ⇒ Object
- #parse_results ⇒ Object
- #parse_uiautomation_plist ⇒ Object
- #product_type(device) ⇒ Object
- #product_version(device) ⇒ Object
- #pull_crash_files(times) ⇒ Object
- #replace_event_num_for_time_limit(custom_file) ⇒ Object
- #replace_event_num_for_user_define(custom_file, event_number) ⇒ Object
- #replace_text(orig, replace_str, marker_begin_line, marker_end_line) ⇒ Object
- #reset_iphone_simulator ⇒ Object
- #result_base_dir ⇒ Object
- #result_dir ⇒ Object
- #result_history_dir(times) ⇒ Object
- #rm_instruments_trace(traces) ⇒ Object
- #rotate_imgs(path) ⇒ Object
- #run(opts) ⇒ Object
- #run_a_case ⇒ Object
- #setup_running ⇒ Object
- #show_config ⇒ Object
- #show_extend_javascript ⇒ Object
- #sim_crash_report_dir ⇒ Object
- #symbolicatecrash_base_path ⇒ Object
- #symbolicating_crash_report(crash_base_path) ⇒ Object
- #template_path(name) ⇒ Object
- #time_limit ⇒ Object
- #time_limit_sec ⇒ Object
- #total_test_count ⇒ Object
- #ui_auto_monkey_lib_original_path ⇒ Object
- #ui_auto_monkey_original_path ⇒ Object
- #ui_auto_monkey_path ⇒ Object
- #ui_custom_original_path ⇒ Object
- #ui_custom_path ⇒ Object
- #ui_hole_handler_original_path ⇒ Object
- #ui_tuneup_original_path ⇒ Object
- #uiautomation_xsl_path ⇒ Object
- #watch_syslog ⇒ Object
- #xcode_developer_path ⇒ Object
- #xcode_path ⇒ Object
Methods included from CommandHelper
#kill_all, #relaunch_app, #run_process, #shell
Instance Method Details
#all_tests_ok?(result_list) ⇒ Boolean
156 157 158 |
# File 'lib/smart_monkey/monkey_runner.rb', line 156 def all_tests_ok?(result_list) result_list.select {|r| !r[:ok]}.empty? end |
#app_name ⇒ Object
210 211 212 |
# File 'lib/smart_monkey/monkey_runner.rb', line 210 def app_name File.basename(app_path).gsub(/\.app$/, '') end |
#app_path ⇒ Object
206 207 208 |
# File 'lib/smart_monkey/monkey_runner.rb', line 206 def app_path @app_path ||= find_app_path() end |
#compress_image(path) ⇒ Object
314 315 316 317 318 319 |
# File 'lib/smart_monkey/monkey_runner.rb', line 314 def compress_image(path) puts 'Compress screenshot images...' compress_rate = [:compress_rate] # `find #{path} -name "*.png" -exec convert {} -resize 50% -sample 50% {} \\\;` `mogrify -resize #{compress_rate} "#{path}/*.png"` end |
#config_custom_path ⇒ Object
525 526 527 528 529 530 531 |
# File 'lib/smart_monkey/monkey_runner.rb', line 525 def config_custom_path if [:custom_cfg_path] File.join([:custom_cfg_path], "custom.js") else ui_custom_original_path end end |
#console_log_path ⇒ Object
473 474 475 |
# File 'lib/smart_monkey/monkey_runner.rb', line 473 def console_log_path "#{result_dir}/console.txt" end |
#copy_html_resources ⇒ Object
149 150 151 152 153 154 |
# File 'lib/smart_monkey/monkey_runner.rb', line 149 def copy_html_resources bootstrap_dir = File.('../../bootstrap', __FILE__) FileUtils.copy("#{bootstrap_dir}/css/bootstrap.css", result_base_dir) FileUtils.copy("#{bootstrap_dir}/js/bootstrap.js", result_base_dir) FileUtils.copy(template_path('jquery.min.js'), result_base_dir) end |
#crash_report_list(times) ⇒ Object
453 454 455 456 457 |
# File 'lib/smart_monkey/monkey_runner.rb', line 453 def crash_report_list(times) # ios version >7.0 => *.ips `ls -t #{crash_save_dir(times)}/*.crash 2>&1;ls -t #{crash_save_dir(times)}/*.ips 2>&1;`.strip.split(/\n/) # `ls -t #{crash_save_dir}/#{app_name}_*.crash`.strip.split(/\n/) end |
#crash_save_dir(times) ⇒ Object
429 430 431 |
# File 'lib/smart_monkey/monkey_runner.rb', line 429 def crash_save_dir(times) "#{result_base_dir}/crash_#{times}" end |
#create_index_html(result_hash) ⇒ Object
138 139 140 141 142 143 144 145 146 147 |
# File 'lib/smart_monkey/monkey_runner.rb', line 138 def create_index_html(result_hash) er = Erubis::Eruby.new(File.read(template_path('index.html.erb'))) result_hash[:test_count] = result_hash[:result_list].size result_hash[:ok_count] = result_hash[:result_list].select {|r| r[:ok]}.size result_hash[:cr_count] = result_hash[:result_list].select {|r| r[:crash]}.size result_hash[:nr_count] = result_hash[:test_count] - result_hash[:ok_count] - result_hash[:cr_count] open("#{result_base_dir}/index.html", 'w') {|f| f.write er.result(result_hash)} copy_html_resources puts "Monkey Test Report:#{result_base_dir}/index.html" end |
#create_result_html(log_list) ⇒ Object
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 |
# File 'lib/smart_monkey/monkey_runner.rb', line 565 def create_result_html(log_list) latest_list = LogDecoder.new(log_list).decode_latest([:detail_event_count], [:drop_useless_img], result_dir) hash = {} hash[:log_list] = latest_list.reverse hash[:log_list_json] = JSON.dump(hash[:log_list]) crash_report = Dir.glob("#{result_dir}/*.crash")[0] hash[:crash_report] = crash_report ? File.basename(crash_report) : nil hash[:uia_trace] = @uia_trace hash[:crashed] = @crashed hash[:no_run] = @no_run er = Erubis::Eruby.new(File.read(template_path('result.html.erb'))) open("#{result_dir}/result.html", 'w') do |f| f.write(er.result(hash)) end FileUtils.copy(template_path('result_view.js'), "#{result_dir}/result_view.js") end |
#device ⇒ Object
198 199 200 201 202 203 204 |
# File 'lib/smart_monkey/monkey_runner.rb', line 198 def device if [:device] find_device([:device]) else (devices[0].strip.split("[")[1].delete "]") end end |
#device_name(device) ⇒ Object
308 309 310 311 312 |
# File 'lib/smart_monkey/monkey_runner.rb', line 308 def device_name(device) if !is_simulator `ideviceinfo -u #{device} -k DeviceName`.strip end end |
#deviceconsole_original_path ⇒ Object
373 374 375 |
# File 'lib/smart_monkey/monkey_runner.rb', line 373 def deviceconsole_original_path File.('../../ios_device_log/deviceconsole', __FILE__) end |
#devices ⇒ Object
218 219 220 |
# File 'lib/smart_monkey/monkey_runner.rb', line 218 def devices `"instruments" -s devices`.strip.split(/\n/).drop(2) end |
#dsym_base_path ⇒ Object
405 406 407 |
# File 'lib/smart_monkey/monkey_runner.rb', line 405 def dsym_base_path [:dsym_file_path] || "" end |
#find_app_path(opts) ⇒ Object
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 |
# File 'lib/smart_monkey/monkey_runner.rb', line 346 def find_app_path(opts) app_path = nil if opts[:app_path].include?('/') app_path = File.(opts[:app_path]) elsif opts[:app_path] =~ /\.app$/ apps = find_apps(opts[:app_path]) app_path = apps[0] log "#{apps.size} apps are found, USE NEWEST APP: #{app_path}" if apps.size > 1 else app_path = opts[:app_path] log "BundleID was found: #{app_path}" end unless app_path raise 'Invalid AppName' end app_path end |
#find_apps(app) ⇒ Object
214 215 216 |
# File 'lib/smart_monkey/monkey_runner.rb', line 214 def find_apps(app) `"ls" -dt #{ENV['HOME']}/Library/Developer/Xcode/DerivedData/*/Build/Products/*/#{app}`.strip.split(/\n/) end |
#find_device(device) ⇒ Object
222 223 224 225 226 227 228 229 230 |
# File 'lib/smart_monkey/monkey_runner.rb', line 222 def find_device(device) device_line = `"instruments" -s devices | grep "#{device}"`.strip.split(/\n/)[0] if device_line.nil? puts "Invalid device, Please given a vaild device!" puts `"instruments" -s devices` exit(1) end device_line.strip.split("[")[1].delete "]" end |
#finish_running ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/smart_monkey/monkey_runner.rb', line 124 def finish_running kill_all_need FileUtils.remove_dir(result_history_dir(@times), true) FileUtils.remove_dir(crash_save_dir(@times+1), true) FileUtils.move(result_dir, result_history_dir(@times)) if [:compress_rate] compress_image(result_history_dir(@times)) end rotate_imgs(result_history_dir(@times)) rm_instruments_trace(INSTRUMENTS_TRACE_PATH) kill_all('iPhone Simulator') sleep 3 end |
#generate_ui_auto_monkey ⇒ Object
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 |
# File 'lib/smart_monkey/monkey_runner.rb', line 503 def generate_ui_auto_monkey # extend_javascript_flag, extend_javascript_path = show_extend_javascript # orig = File.read(ui_custom_original_path) # config = JSON.parse(File.read(config_json_path)) # replace_str = " this.config = #{JSON.pretty_generate(config, :indent => ' '*6)}; \n" # js = replace_text(orig, replace_str, '__UIAutoMonkey Configuration Begin__', '__UIAutoMonkey Configuration End__') # if extend_javascript_flag # js = File.read(extend_javascript_path) + "\n" + js # end envs_str="UniqueDeviceID=\"#{device}\";\nResultBaseDir=\"#{result_base_dir}\";\n" File.open(File.join(result_base_dir,"Env.js"), 'w') {|f| f.write(envs_str)} if [:custom_cfg_path] FileUtils.cp_r(File.join([:custom_cfg_path], "."), result_base_dir) FileUtils.copy(ui_auto_monkey_original_path, result_base_dir) FileUtils.cp_r(ui_tuneup_original_path, result_base_dir) else FileUtils.cp_r(File.join(ui_auto_monkey_lib_original_path, "."), result_base_dir) end replace_event_num_for_user_define(ui_custom_path, [:event_number]) if [:event_number] replace_event_num_for_time_limit(ui_custom_path) unless time_limit_sec.nil? end |
#grep_ios_syslog ⇒ Object
463 464 465 466 467 468 469 470 471 |
# File 'lib/smart_monkey/monkey_runner.rb', line 463 def grep_ios_syslog if is_simulator puts "Attempting iOS Simulator system log capture via tail system.log." "tail -n 0 -f ~/Library/Logs/CoreSimulator/#{device}*/system.log" else puts "Attempting iOS device system log capture via deviceconsole." "#{deviceconsole_original_path} -u #{device}" end end |
#instruments_deviceinfo(device) ⇒ Object
232 233 234 |
# File 'lib/smart_monkey/monkey_runner.rb', line 232 def instruments_deviceinfo(device) `"instruments" -s devices | grep "#{device}"`.strip end |
#is_simulator ⇒ Object
236 237 238 239 240 241 242 243 |
# File 'lib/smart_monkey/monkey_runner.rb', line 236 def is_simulator deviceinfo = instruments_deviceinfo(device) if deviceinfo.include? "Simulator" true else false end end |
#kill_all_need ⇒ Object
340 341 342 343 344 |
# File 'lib/smart_monkey/monkey_runner.rb', line 340 def kill_all_need kill_all('instruments', '9') kill_all('Instruments', '9') kill_all('idevicedebug', '9') end |
#list_app ⇒ Object
171 172 173 174 175 176 177 178 |
# File 'lib/smart_monkey/monkey_runner.rb', line 171 def list_app puts "============For iPhone Simulator:" puts find_apps('*.app').map{|n| File.basename n}.uniq.sort.join("\n") if !is_simulator puts "============For iPhone Device:" puts `ideviceinstaller -u #{device} -l` end end |
#list_devices ⇒ Object
180 181 182 |
# File 'lib/smart_monkey/monkey_runner.rb', line 180 def list_devices puts devices.join("\n") end |
#log(msg) ⇒ Object
184 185 186 |
# File 'lib/smart_monkey/monkey_runner.rb', line 184 def log(msg) puts msg end |
#parse_results ⇒ Object
549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 |
# File 'lib/smart_monkey/monkey_runner.rb', line 549 def parse_results filename = "#{result_dir}/Automation Results.plist" log_list = [] if File.exists?(filename) doc = REXML::Document.new(open(filename)) doc.elements.each('plist/dict/array/dict') do |record| ary = record.elements.to_a.map{|a| a.text} log_list << Hash[*ary] end parse_uiautomation_plist @uia_trace = true end @no_run = true if log_list.empty? || log_list[-1][MESSAGE] =~ /target application is not frontmost/ log_list end |
#parse_uiautomation_plist ⇒ Object
485 486 487 |
# File 'lib/smart_monkey/monkey_runner.rb', line 485 def parse_uiautomation_plist `xsltproc --output "#{result_dir}/uiautomation.html" #{uiautomation_xsl_path} "#{result_dir}/Automation Results.plist"` end |
#product_type(device) ⇒ Object
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 |
# File 'lib/smart_monkey/monkey_runner.rb', line 245 def product_type(device) product_hash={ "iPhone1,1"=>"iPhone", "iPhone1,2"=>"iPhone 3G", "iPhone2,1"=>"iPhone 3GS", "iPhone3,1"=>"iPhone 4 - GSM", "iPhone3,2"=>"iPhone 4 - CDMA", "iPhone3,3"=>"iPhone 4 - CDMA", "iPhone4,1"=>"iPhone 4S", "iPhone5,1"=>"iPhone 5", "iPhone5,2"=>"iPhone 5", "iPhone5,3"=>"iPhone 5C (GSM)", "iPhone5,4"=>"iPhone 5C (CDMA)", "iPhone6,1"=>"iPhone 5S (GSM)", "iPhone6,2"=>"iPhone 5S (CDMA)", "iPhone7,1"=>"iPhone 6 Plus", "iPhone7,2"=>"iPhone 6", "iPad1,1"=>"iPad", "iPad2,1"=>"iPad 2 (Wi-Fi)", "iPad2,2"=>"iPad 2 (GSM)", "iPad2,3"=>"iPad 2 (CDMA)", "iPad2,4"=>"iPad 2 (Wi-Fi, revised)", "iPad2,5"=>"iPad mini (Wi-Fi)", "iPad2,6"=>"iPad mini (A1454)", "iPad2,7"=>"iPad mini (A1455)", "iPad3,1"=>"iPad (3rd gen, Wi-Fi)", "iPad3,2"=>"iPad (3rd gen, Wi-Fi+LTE Verizon)", "iPad3,3"=>"iPad (3rd gen, Wi-Fi+LTE AT&T)", "iPad3,4"=>"iPad (4th gen, Wi-Fi)", "iPad3,5"=>"iPad (4th gen, A1459)", "iPad3,6"=>"iPad (4th gen, A1460)", "iPad4,1"=>"iPad Air (Wi-Fi)", "iPad4,2"=>"iPad Air (Wi-Fi+LTE)", "iPad4,3"=>"iPad Air (Rev)", "iPad4,4"=>"iPad mini 2 (Wi-Fi)", "iPad4,5"=>"iPad mini 2 (Wi-Fi+LTE)", "iPad4,6"=>"iPad mini 2 (Rev)", "iPad4,7"=>"iPad mini 3 (Wi-Fi)", "iPad4,8"=>"iPad mini 3 (A1600)", "iPad4,9"=>"iPad mini 3 (A1601)", "iPad5,3"=>"iPad Air 2 (Wi-Fi)", "iPad5,4"=>"iPad Air 2 (Wi-Fi+LTE)", "iPod1,1"=>"iPod touch", "iPod2,1"=>"iPod touch (2nd gen)", "iPod3,1"=>"iPod touch (3rd gen)", "iPod4,1"=>"iPod touch (4th gen)", "iPod5,1"=>"iPod touch (5th gen)", } if is_simulator instruments_deviceinfo(device).split("[")[0] else type = `ideviceinfo -u #{device} -k ProductType`.strip product_hash[type] end end |
#product_version(device) ⇒ Object
302 303 304 305 306 |
# File 'lib/smart_monkey/monkey_runner.rb', line 302 def product_version(device) if !is_simulator `ideviceinfo -u #{device} -k ProductVersion`.strip end end |
#pull_crash_files(times) ⇒ Object
445 446 447 448 449 450 451 |
# File 'lib/smart_monkey/monkey_runner.rb', line 445 def pull_crash_files(times) if !is_simulator `idevicecrashreport -u #{device} -e -k #{crash_save_dir(times)}` else `cp #{sim_crash_report_dir}/* #{crash_save_dir(times)}` end end |
#replace_event_num_for_time_limit(custom_file) ⇒ Object
489 490 491 492 493 494 |
# File 'lib/smart_monkey/monkey_runner.rb', line 489 def replace_event_num_for_time_limit(custom_file) File.open(custom_file) do |fr| buffer = fr.read.gsub(/monkey.config.numberOfEvents.*;/, "monkey.config.numberOfEvents = 99999999;") File.open(custom_file, "w") { |fw| fw.write(buffer) } end end |
#replace_event_num_for_user_define(custom_file, event_number) ⇒ Object
496 497 498 499 500 501 |
# File 'lib/smart_monkey/monkey_runner.rb', line 496 def replace_event_num_for_user_define(custom_file, event_number) File.open(custom_file) do |fr| buffer = fr.read.gsub(/monkey.config.numberOfEvents.*;/, "monkey.config.numberOfEvents = #{event_number};") File.open(custom_file, "w") { |fw| fw.write(buffer) } end end |
#replace_text(orig, replace_str, marker_begin_line, marker_end_line) ⇒ Object
533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 |
# File 'lib/smart_monkey/monkey_runner.rb', line 533 def replace_text(orig, replace_str, marker_begin_line, marker_end_line) results = [] status = 1 orig.each_line do |line| if status == 1 && line =~ /#{marker_begin_line}/ status = 2 results << line results << replace_str elsif status == 2 && line =~/#{marker_end_line}/ status = 3 end results << line unless status == 2 end results.join('') end |
#reset_iphone_simulator ⇒ Object
188 189 190 191 192 |
# File 'lib/smart_monkey/monkey_runner.rb', line 188 def reset_iphone_simulator `killall -9 "iOS Simulator"` # FileUtils.rm_rf("#{Dir.home}/Library/Application\ Support/iPhone\ Simulator/") # puts 'reset iPhone Simulator successful' end |
#result_base_dir ⇒ Object
425 426 427 |
# File 'lib/smart_monkey/monkey_runner.rb', line 425 def result_base_dir File.join([:result_base_dir] || RESULT_BASE_PATH, "report_#{TIME_STAP}") end |
#result_dir ⇒ Object
433 434 435 |
# File 'lib/smart_monkey/monkey_runner.rb', line 433 def result_dir "#{result_base_dir}/Run 1" end |
#result_history_dir(times) ⇒ Object
437 438 439 |
# File 'lib/smart_monkey/monkey_runner.rb', line 437 def result_history_dir(times) "#{result_base_dir}/result_#{sprintf('%03d', times)}" end |
#rm_instruments_trace(traces) ⇒ Object
459 460 461 |
# File 'lib/smart_monkey/monkey_runner.rb', line 459 def rm_instruments_trace(traces) `rm -rf #{traces}` end |
#rotate_imgs(path) ⇒ Object
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 |
# File 'lib/smart_monkey/monkey_runner.rb', line 321 def rotate_imgs(path) rotated_map={ "1"=>nil, "2"=>"180", "3"=>"270", "4"=>"90", } orientation_file = File.join(result_base_dir,"orientation") if File.exists?(orientation_file) orientationNum = File.read(orientation_file).strip value = rotated_map[orientationNum] unless value.nil? `mogrify -rotate #{value} "#{path}/*.png"` end else exit(1) end end |
#run(opts) ⇒ Object
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 |
# File 'lib/smart_monkey/monkey_runner.rb', line 18 def run(opts) = opts if [:show_config] show_config return true elsif [:list_app] list_app return true elsif [:list_devices] list_devices return true elsif [:reset_iphone_simulator] reset_iphone_simulator return true end res_dir = [:result_base_dir] || RESULT_BASE_PATH puts "INSTRUMENTS_TRACE_PATH : #{INSTRUMENTS_TRACE_PATH}" puts "RESULT_BASE_PATH : #{res_dir}" ########### log .inspect FileUtils.remove_dir(result_base_dir, true) FileUtils.makedirs(result_base_dir) generate_ui_auto_monkey ########### start_time = Time.new.strftime("%Y-%m-%d %H:%M:%S") result_list = [] total_test_count.times do |times| @times = times setup_running result = run_a_case finish_running result_list << result end create_index_html({ :start_time => start_time, :end_time => Time.new.strftime("%Y-%m-%d %H:%M:%S"), :result_list => result_list, :ProductType => product_type(device), :ProductVersion => product_version(device), :UniqueDeviceID => device, :DeviceName => device_name(device), :Application => app_path }) all_tests_ok?(result_list) end |
#run_a_case ⇒ Object
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 |
# File 'lib/smart_monkey/monkey_runner.rb', line 76 def run_a_case log "=================================== Start Test (#{@times+1}/#{total_test_count}) =======================================" FileUtils.makedirs(crash_save_dir(@times+1)) unless File.exists?(crash_save_dir(@times+1)) pull_crash_files(@times+1) cr_list = crash_report_list(@times+1) start_time = Time.now watch_syslog do begin unless time_limit_sec.nil? run_process(%W(instruments -w #{device} -l #{time_limit} -t #{TRACE_TEMPLATE} #{app_path} -e UIASCRIPT #{ui_custom_path} -e UIARESULTSPATH #{result_base_dir})) else run_process(%W(instruments -w #{device} -t #{TRACE_TEMPLATE} #{app_path} -e UIASCRIPT #{ui_custom_path} -e UIARESULTSPATH #{result_base_dir})) end rescue Timeout::Error kill_all('instruments', '9') end end pull_crash_files(@times+1) new_cr_list = crash_report_list(@times+1) # increase crash report? diff_cr_list = new_cr_list - cr_list if diff_cr_list.size > 0 @crashed = true new_cr_name = File.basename(diff_cr_list[0]).gsub(/\.ips$/, '.crash') new_cr_path = File.join(result_dir, new_cr_name) log "Find new crash report: #{new_cr_path}" if dsym_base_path != '' puts "Symbolicating crash report..." symbolicating_crash_report(diff_cr_list[0]) end FileUtils.cp diff_cr_list[0], new_cr_path end # output result create_result_html(parse_results) { :start_time => start_time, :end_time => Time.now, :times => @times, :ok => !@crashed && !@no_run, :crash => @crashed, :result_dir => File.basename(result_history_dir(@times)), :message => nil } end |
#setup_running ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/smart_monkey/monkey_runner.rb', line 66 def setup_running kill_all_need # kill_all('iPhone Simulator') FileUtils.remove_dir(result_dir, true) ENV['UIARESULTSPATH'] = result_dir @crashed = false @no_run = false @uia_trace = false end |
#show_config ⇒ Object
160 161 162 |
# File 'lib/smart_monkey/monkey_runner.rb', line 160 def show_config puts File.read(config_custom_path) end |
#show_extend_javascript ⇒ Object
164 165 166 167 168 169 |
# File 'lib/smart_monkey/monkey_runner.rb', line 164 def show_extend_javascript if [:extend_javascript_path] filename = [:extend_javascript_path] return File.exist?(filename), filename end end |
#sim_crash_report_dir ⇒ Object
441 442 443 |
# File 'lib/smart_monkey/monkey_runner.rb', line 441 def sim_crash_report_dir "#{ENV['HOME']}/Library/Logs/DiagnosticReports" end |
#symbolicatecrash_base_path ⇒ Object
417 418 419 |
# File 'lib/smart_monkey/monkey_runner.rb', line 417 def symbolicatecrash_base_path() `find #{xcode_path} -name symbolicatecrash`.strip end |
#symbolicating_crash_report(crash_base_path) ⇒ Object
421 422 423 |
# File 'lib/smart_monkey/monkey_runner.rb', line 421 def symbolicating_crash_report(crash_base_path) `DEVELOPER_DIR=#{xcode_developer_path} #{symbolicatecrash_base_path} -o #{crash_base_path} #{crash_base_path} #{dsym_base_path};wait;` end |
#template_path(name) ⇒ Object
481 482 483 |
# File 'lib/smart_monkey/monkey_runner.rb', line 481 def template_path(name) File.("../templates/#{name}", __FILE__) end |
#time_limit ⇒ Object
365 366 367 |
# File 'lib/smart_monkey/monkey_runner.rb', line 365 def time_limit time_limit_sec * 1000 end |
#time_limit_sec ⇒ Object
369 370 371 |
# File 'lib/smart_monkey/monkey_runner.rb', line 369 def time_limit_sec [:time_limit_sec] end |
#total_test_count ⇒ Object
194 195 196 |
# File 'lib/smart_monkey/monkey_runner.rb', line 194 def total_test_count ([:run_count] || 2) end |
#ui_auto_monkey_lib_original_path ⇒ Object
377 378 379 |
# File 'lib/smart_monkey/monkey_runner.rb', line 377 def ui_auto_monkey_lib_original_path File.('../../ui-auto-monkey', __FILE__) end |
#ui_auto_monkey_original_path ⇒ Object
381 382 383 |
# File 'lib/smart_monkey/monkey_runner.rb', line 381 def ui_auto_monkey_original_path File.('../../ui-auto-monkey/UIAutoMonkey.js', __FILE__) end |
#ui_auto_monkey_path ⇒ Object
397 398 399 |
# File 'lib/smart_monkey/monkey_runner.rb', line 397 def ui_auto_monkey_path "#{result_base_dir}/UIAutoMonkey.js" end |
#ui_custom_original_path ⇒ Object
385 386 387 |
# File 'lib/smart_monkey/monkey_runner.rb', line 385 def ui_custom_original_path File.('../../ui-auto-monkey/custom.js', __FILE__) end |
#ui_custom_path ⇒ Object
401 402 403 |
# File 'lib/smart_monkey/monkey_runner.rb', line 401 def ui_custom_path "#{result_base_dir}/custom.js" end |
#ui_hole_handler_original_path ⇒ Object
389 390 391 |
# File 'lib/smart_monkey/monkey_runner.rb', line 389 def ui_hole_handler_original_path File.('../../ui-auto-monkey/handler', __FILE__) end |
#ui_tuneup_original_path ⇒ Object
393 394 395 |
# File 'lib/smart_monkey/monkey_runner.rb', line 393 def ui_tuneup_original_path File.('../../ui-auto-monkey/tuneup', __FILE__) end |
#uiautomation_xsl_path ⇒ Object
477 478 479 |
# File 'lib/smart_monkey/monkey_runner.rb', line 477 def uiautomation_xsl_path File.("../templates/automation_result.xsl", __FILE__) end |
#watch_syslog ⇒ Object
582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 |
# File 'lib/smart_monkey/monkey_runner.rb', line 582 def watch_syslog STDOUT.sync = true stdin, stdout, stderr = Open3.popen3(grep_ios_syslog) log_filename = "#{result_base_dir}/console.txt" thread = Thread.new do File.open(log_filename, 'a') do |output| begin while true line = stdout.readline output.write(line) # output.write(line) if line.include?(app_name) end rescue IOError log 'Stop iOS system log capture.' kill_all_need end end end yield sleep 3 stdout.close; stderr.close; stdin.close thread.join FileUtils.makedirs(result_dir) unless File.exists?(result_dir) if File.exists?(log_filename) FileUtils.move(log_filename, console_log_path) end end |
#xcode_developer_path ⇒ Object
409 410 411 |
# File 'lib/smart_monkey/monkey_runner.rb', line 409 def xcode_developer_path `xcode-select --print-path`.strip end |
#xcode_path ⇒ Object
413 414 415 |
# File 'lib/smart_monkey/monkey_runner.rb', line 413 def xcode_path `dirname #{xcode_developer_path}`.strip end |