Package tlib :: Package asset :: Package wpt_batch_lib :: Module wpt_batch_lib
[hide private]
[frames] | no frames]

Source Code for Module tlib.asset.wpt_batch_lib.wpt_batch_lib

  1  #!/usr/bin/python2.6 
  2  # 
  3  # Copyright 2011 Google Inc. All Rights Reserved. 
  4   
  5  """A library to support batch processing of WebPageTest tests. 
  6   
  7  This module provides a set of APIs for batch processing of 
  8  WebPageTest tests. A complete test cycle typically consists of 
  9  test submission, checking test status, test result download, etc. 
 10   
 11  A sample usage of this library can be found in wpt_batch.py. 
 12  """ 
 13   
 14  __author__ = 'zhaoq@google.com (Qi Zhao)' 
 15   
 16  import re 
 17  import urllib 
 18  from xml.dom import minidom 
 19   
 20   
21 -def __LoadEntity(url, urlopen=urllib.urlopen):
22 """A helper function to load an entity such as an URL. 23 24 Args: 25 url: the URL to load 26 urlopen: the callable to be used to load the url 27 28 Returns: 29 The response message 30 """ 31 response = urlopen(url) 32 return response
33 34
35 -def ImportUrls(url_filename):
36 """Load the URLS in the file into memory. 37 38 Args: 39 url_filename: the file name of the list of URLs 40 41 Returns: 42 The list of URLS 43 """ 44 url_list = [] 45 for line in open(url_filename, 'rb'): 46 # Remove newline and trailing whitespaces 47 url = line.rstrip(' \r\n') 48 if url: 49 url_list.append(url) 50 return url_list
51 52
53 -def SubmitBatch(url_list, test_params, server_url='http://www.webpagetest.org/', 54 urlopen=urllib.urlopen):
55 """Submit the tests to WebPageTest server. 56 57 Args: 58 url_list: the list of interested URLs 59 test_params: the user-configured test parameters 60 server_url: the URL of the WebPageTest server 61 urlopen: the callable to be used to load the request 62 63 Returns: 64 A dictionary which maps a WPT test id to its URL if submission 65 is successful. 66 """ 67 id_url_dict = {} 68 for url in url_list: 69 test_params['url'] = url 70 request = server_url + 'runtest.php?%s' % urllib.urlencode(test_params) 71 response = __LoadEntity(request, urlopen) 72 return_code = response.getcode() 73 if return_code == 200: 74 dom = minidom.parseString(response.read()) 75 nodes = dom.getElementsByTagName('statusCode') 76 status = nodes[0].firstChild.wholeText 77 if status == '200': 78 test_id = dom.getElementsByTagName('testId')[0].firstChild.wholeText 79 id_url_dict[test_id] = url 80 return id_url_dict
81 82
83 -def CheckBatchStatus(test_ids, server_url='http://www.webpagetest.org/', 84 urlopen=urllib.urlopen):
85 """Check the status of tests. 86 87 Args: 88 test_ids: the list of interested test ids 89 server_url: the URL of the WebPageTest server 90 urlopen: the callable to be used to load the request 91 92 Returns: 93 A dictionary where key is the test id and content is its status. 94 """ 95 id_status_dict = {} 96 for test_id in test_ids: 97 request = server_url + 'testStatus.php?f=xml&test=' + test_id 98 response = __LoadEntity(request, urlopen) 99 if response.getcode() == 200: 100 dom = minidom.parseString(response.read()) 101 nodes = dom.getElementsByTagName('statusCode') 102 status_code = nodes[0].firstChild.wholeText 103 id_status_dict[test_id] = status_code 104 return id_status_dict
105 106
107 -def GetXMLResult(test_ids, server_url='http://www.webpagetest.org/', 108 urlopen=urllib.urlopen):
109 """Obtain the test result in XML format. 110 111 Args: 112 test_ids: the list of interested test ids 113 server_url: the URL of WebPageTest server 114 urlopen: the callable to be used to load the request 115 116 Returns: 117 A dictionary where the key is test id and the value is a DOM object of the 118 test result. 119 """ 120 id_dom_dict = {} 121 for test_id in test_ids: 122 request = server_url + 'xmlResult/' + test_id + '/' 123 response = __LoadEntity(request, urlopen) 124 if response.getcode() == 200: 125 dom = minidom.parseString(response.read()) 126 id_dom_dict[test_id] = dom 127 return id_dom_dict
128