run_layout_tests.py revision 2e367376690282a262cfcbd21d4c18862b48f38c
15fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski#!/usr/bin/python 25fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 35fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski"""Run layout tests on the device. 45fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 55fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski It runs the specified tests on the device, downloads the summaries to the temporary directory 6d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block and optionally shows the detailed results the host's default browser. 75fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 85fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski Usage: 9d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block run_layout_tests.py --show-results-in-browser test-relative-path 105fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski""" 115fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 12d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport logging 13d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport optparse 145fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport os 15d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport sys 165fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport subprocess 175fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiimport tempfile 18d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockimport webbrowser 195fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 205fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski#TODO: These should not be hardcoded 21bdebd0621b2a4422a30bea21ea549afd20a9e918Steve BlockRESULTS_ABSOLUTE_PATH = "/sdcard/layout-test-results/" 225fb9ff420d378c5c83e116efadefb669791098d5Maksymilian OsowskiDETAILS_HTML = "details.html" 235fb9ff420d378c5c83e116efadefb669791098d5Maksymilian OsowskiSUMMARY_TXT = "summary.txt" 245fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 25d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Blockdef main(options, args): 26d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block if args: 27d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block path = " ".join(args); 285fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski else: 29d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block path = ""; 305fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 315fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski logging.basicConfig(level=logging.INFO, format='%(message)s') 325fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 335fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski tmpdir = tempfile.gettempdir() 345fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 352e367376690282a262cfcbd21d4c18862b48f38cMaksymilian Osowski # Restart the server 362e367376690282a262cfcbd21d4c18862b48f38cMaksymilian Osowski cmd = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), "run_apache2.py") + " restart" 372e367376690282a262cfcbd21d4c18862b48f38cMaksymilian Osowski os.system(cmd); 382e367376690282a262cfcbd21d4c18862b48f38cMaksymilian Osowski 395fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski # Run the tests in path 405fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski cmd = "adb shell am instrument " 415fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski cmd += "-e class com.android.dumprendertree2.scriptsupport.Starter#startLayoutTests " 425fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski cmd += "-e path \"" + path + "\" " 435fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski cmd +="-w com.android.dumprendertree2/com.android.dumprendertree2.scriptsupport.ScriptTestRunner" 445fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 455fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski logging.info("Running the tests...") 465fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 475fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 485fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski logging.info("Downloading the summaries...") 495fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 505fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski # Download the txt summary to tmp folder 515fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski summary_txt_tmp_path = os.path.join(tmpdir, SUMMARY_TXT) 525c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block cmd = "rm -f " + summary_txt_tmp_path + ";" 535c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block cmd += "adb pull " + RESULTS_ABSOLUTE_PATH + SUMMARY_TXT + " " + summary_txt_tmp_path 545fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 555fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 565fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski # Download the html summary to tmp folder 575fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski details_html_tmp_path = os.path.join(tmpdir, DETAILS_HTML) 585c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block cmd = "rm -f " + details_html_tmp_path + ";" 595c27bc1c64a06ccec64da81bd0217b7aa3592786Steve Block cmd += "adb pull " + RESULTS_ABSOLUTE_PATH + DETAILS_HTML + " " + details_html_tmp_path 605fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() 615fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 625fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski # Print summary to console 635fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski logging.info("All done.\n") 645fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski cmd = "cat " + summary_txt_tmp_path 655fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski os.system(cmd) 665fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski logging.info("") 675fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 685fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski # Open the browser with summary 69d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block if options.show_results_in_browser != "false": 70d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block webbrowser.open(details_html_tmp_path) 715fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowski 725fb9ff420d378c5c83e116efadefb669791098d5Maksymilian Osowskiif __name__ == "__main__": 73d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block option_parser = optparse.OptionParser(usage="Usage: %prog [options] test-relative-path") 74d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block option_parser.add_option("", "--show-results-in-browser", default="true", 75d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block help="Show the results the host's default web browser, default=true") 76d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block options, args = option_parser.parse_args(); 77d210fd26b2f32fec26c2e7bb355de8b5b3e25b79Steve Block main(options, args); 78