run_page_cycler.py revision ba87e3e6c985e7175152993b5efcc7dd2f0e1c93
1ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project#!/usr/bin/python 2ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 3ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project"""Run page cycler tests using Android instrumentation. 4ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 5ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project First, you need to get an SD card or sdcard image that has page cycler tests. 6ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 7ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Usage: 8ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project Run a single page cycler test: 9ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project run_page_cycler.py "file:///sdcard/android/page_cycler/moz/start.html?auto=1\&iterations=10" 10ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project""" 11ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 12ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport logging 13ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport optparse 14ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport os 15ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport subprocess 16ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport sys 17ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectimport time 18ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 19ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 20ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 21ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectdef main(options, args): 22ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project """Run the tests. Will call sys.exit when complete. 23ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 24ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project """ 25ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 26ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Set up logging format. 27ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project log_level = logging.INFO 28ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if options.verbose: 29ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project log_level = logging.DEBUG 30ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.basicConfig(level=log_level, 31ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project format='%(message)s') 32ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 33ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Include all tests if none are specified. 34ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if not args: 35ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project print "need a URL, e.g. file:///sdcard/android/page_cycler/moz/start.html" 36ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project sys.exit(1) 37ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project else: 38ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project path = ' '.join(args); 39ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 40ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project adb_cmd = "adb "; 41ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if options.adb_options: 42ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project adb_cmd += options.adb_options 43ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 44ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info("Running the test ...") 45ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 46ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Count crashed tests. 47ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project crashed_tests = [] 48ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 49ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project timeout_ms = '0' 50ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if options.time_out_ms: 51ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project timeout_ms = options.time_out_ms 52ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 53ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Run test until it's done 54ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 55ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project run_load_test_cmd_prefix = adb_cmd + " shell am instrument" 56ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project run_load_test_cmd_postfix = " -w com.android.dumprendertree/.LayoutTestsAutoRunner" 57ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 58ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Call LoadTestsAutoTest::runTest. 59ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project run_load_test_cmd = run_load_test_cmd_prefix + " -e class com.android.dumprendertree.LoadTestsAutoTest#runTest -e path \"" + path + "\" -e timeout " + timeout_ms + run_load_test_cmd_postfix 60ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 61ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project (adb_output, adb_error) = subprocess.Popen(run_load_test_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 62ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if adb_output.find('INSTRUMENTATION_FAILED') != -1: 63ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.error("Error happened : " + adb_output) 64ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project sys.exit(1) 65ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 66ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info(adb_output); 67ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info(adb_error); 68ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info("Done\n"); 69ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 70ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project # Pull results from /sdcard/load_test_result.txt 71ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project results_dir = options.results_directory 72ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if not os.path.exists(results_dir): 73ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project os.makedirs(results_dir) 74ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project if not os.path.isdir(results_dir): 75ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.error("Cannot create results dir: " + results_dir) 76ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project sys.exit(1) 77ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 78ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project result_file = "/sdcard/load_test_result.txt" 79ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project shell_cmd_str = adb_cmd + " pull " + result_file + " " + results_dir 80ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project adb_output = subprocess.Popen(shell_cmd_str, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] 81ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info(adb_output) 82ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 83ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project logging.info("Results are stored under: " + results_dir + "/load_test_result.txt\n") 84ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 85ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Projectif '__main__' == __name__: 86ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project option_parser = optparse.OptionParser() 87ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project option_parser.add_option("", "--time-out-ms", 88ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project default=None, 89ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project help="set the timeout for each test") 90ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project option_parser.add_option("", "--verbose", action="store_true", 91ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project default=False, 92ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project help="include debug-level logging") 93ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project option_parser.add_option("", "--adb-options", 94ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project default=None, 95ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project help="pass options to adb, such as -d -e, etc"); 96ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project option_parser.add_option("", "--results-directory", 97ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project default="layout-test-results", 98ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project help="directory which results are stored.") 99ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project 100ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project options, args = option_parser.parse_args(); 101ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project main(options, args) 102