Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: tests/selenium/selenium_utilities.py

Issue 212031: Changed selenium tests to recover from test crashes/hangs. Divided perceptual... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/selenium/selenium_constants.py ('k') | tests/selenium/test_runner.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # Copyright 2009, Google Inc. 2 # Copyright 2009, Google Inc.
3 # All rights reserved. 3 # All rights reserved.
4 # 4 #
5 # Redistribution and use in source and binary forms, with or without 5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are 6 # modification, are permitted provided that the following conditions are
7 # met: 7 # met:
8 # 8 #
9 # * Redistributions of source code must retain the above copyright 9 # * Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer. 10 # notice, this list of conditions and the following disclaimer.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 55
56 def IsValidSuffix(name): 56 def IsValidSuffix(name):
57 """Returns True if name ends in a valid test type.""" 57 """Returns True if name ends in a valid test type."""
58 name = name.lower() 58 name = name.lower()
59 for suffix in SUFFIXES: 59 for suffix in SUFFIXES:
60 if name.endswith(suffix): 60 if name.endswith(suffix):
61 return True 61 return True
62 return False 62 return False
63 63
64 def ScreenshotNameFromTestName(name):
65 name = StripTestTypeSuffix(name)
66
67 if name.startswith("Test"):
68 # Make sure these are in order.
69 prefixes = ["TestStress", "TestSample", "Test"]
70 for prefix in prefixes:
71 if name.startswith(prefix):
72 name = name[len(prefix):]
73 break
74
75 # Lowercase the name only for custom test methods.
76 name = name.lower()
77
78 name = name.replace("_", "-")
79 name = name.replace("/", "_")
80
81 return name
82
64 83
65 def StripTestTypeSuffix(name): 84 def StripTestTypeSuffix(name):
66 """Removes the suffix from name if it is a valid test type.""" 85 """Removes the suffix from name if it is a valid test type."""
67 name_lower = name.lower() 86 name_lower = name.lower()
68 for suffix in SUFFIXES: 87 for suffix in SUFFIXES:
69 if name_lower.endswith(suffix): 88 if name_lower.endswith(suffix):
70 return name[:-len(suffix)] 89 return name[:-len(suffix)]
71 return name 90 return name
72 91
73 92
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 session.wait_for_condition("window.g_selenium_post_render", 20000) 217 session.wait_for_condition("window.g_selenium_post_render", 20000)
199 218
200 # Get result 219 # Get result
201 data_url = session.get_eval("window.g_selenium_save_screen_result") 220 data_url = session.get_eval("window.g_selenium_save_screen_result")
202 expected_header = "data:image/png;base64," 221 expected_header = "data:image/png;base64,"
203 if data_url.startswith(expected_header): 222 if data_url.startswith(expected_header):
204 png = base64.b64decode(data_url[len(expected_header):]) 223 png = base64.b64decode(data_url[len(expected_header):])
205 file = open(full_path + ".png", 'wb') 224 file = open(full_path + ".png", 'wb')
206 file.write(png) 225 file.write(png)
207 file.close() 226 file.close()
208 print "Saved screenshot %s." % full_path
209 return True 227 return True
210 228
211 return False 229 return False
212 230
213 231
214 class SeleniumTestCase(unittest.TestCase): 232 class SeleniumTestCase(unittest.TestCase):
215 """Wrapper for TestCase for selenium.""" 233 """Wrapper for TestCase for selenium."""
216 234
217 def __init__(self, name, session, browser, path_to_html, test_type=None, 235 def __init__(self, name, browser, path_to_html, test_type=None,
218 sample_path=None, options=None): 236 sample_path=None, options=None):
219 """Constructor for SampleTests. 237 """Constructor for SampleTests.
220 238
221 Args: 239 Args:
222 name: Name of unit test. 240 name: Name of unit test.
223 session: Selenium session. 241 session: Selenium session.
224 browser: Name of browser. 242 browser: Name of browser.
225 path_to_html: path to html from server root 243 path_to_html: path to html from server root
226 test_type: Type of test ("small", "medium", "large") 244 test_type: Type of test ("small", "medium", "large")
227 sample_path: Path to test. 245 sample_path: Path to test.
228 options: list of option strings. 246 options: list of option strings.
229 """ 247 """
230 248
231 unittest.TestCase.__init__(self, name) 249 unittest.TestCase.__init__(self, name)
232 self.session = session 250 self.name = name
251 self.session = None
233 self.browser = browser 252 self.browser = browser
234 self.test_type = test_type 253 self.test_type = test_type
235 self.sample_path = sample_path 254 self.sample_path = sample_path
236 self.options = options
237 self.path_to_html = path_to_html 255 self.path_to_html = path_to_html
256 self.screenshots = []
257 self.timeout = 10000
258 self.client = "g_client"
259 # parse options
260 for option in options:
261 if option.startswith("screenshot"):
262 clock = GetArgument(option)
263 if clock is None:
264 clock = "27.5"
265 self.screenshots.append(clock)
266 elif option.startswith("timeout"):
267 self.timeout = int(GetArgument(option))
268 elif option.startswith("client"):
269 self.client = GetArgument(option)
270
271
272 def SetSession(self, session):
273 self.session = session
274
275 def GetTestTimeout(self):
276 return self.timeout
238 277
239 def GetURL(self, url): 278 def GetURL(self, url):
240 """Gets a URL for the test.""" 279 """Gets a URL for the test."""
241 return self.session.browserURL + self.path_to_html + url 280 return self.session.browserURL + self.path_to_html + url
242 281
243 def shortDescription(self): 282 def shortDescription(self):
244 """override unittest.TestCase shortDescription for our own descriptions.""" 283 """override unittest.TestCase shortDescription for our own descriptions."""
245 if self.sample_path: 284 if self.sample_path:
246 return "Testing: " + self.sample_path + ".html" 285 return "Testing: " + self.sample_path + ".html"
247 else: 286 else:
(...skipping 12 matching lines...) Expand all
260 299
261 If the sample is animated, it is expected to have a global variable 300 If the sample is animated, it is expected to have a global variable
262 called g_timeMult that can be set to 0 to stop the animation. All of its 301 called g_timeMult that can be set to 0 to stop the animation. All of its
263 animation must be based on a global variable called g_clock, such that 302 animation must be based on a global variable called g_clock, such that
264 setting g_clock to the same value will always produce the same image. 303 setting g_clock to the same value will always produce the same image.
265 304
266 Finally, each sample is expected to have a global variable called 305 Finally, each sample is expected to have a global variable called
267 g_client which is the o3d client object for that sample. This is 306 g_client which is the o3d client object for that sample. This is
268 used to take a screenshot. 307 used to take a screenshot.
269 """ 308 """
270 screenshots = [] 309 self.assertTrue(not self.timeout is None)
271 timeout = 10000 310 self.assertTrue(not self.client is None)
272 client = "g_client"
273
274 self.assertTrue(self.test_type in ["small", "medium", "large"]) 311 self.assertTrue(self.test_type in ["small", "medium", "large"])
275 312
276 # parse options
277 for option in self.options:
278 if option.startswith("screenshot"):
279 clock = GetArgument(option)
280 if clock is None:
281 clock = "27.5"
282 screenshots.append(clock)
283 elif option.startswith("timeout"):
284 timeout = GetArgument(option)
285 self.assertTrue(not timeout is None)
286 elif option.startswith("client"):
287 client = GetArgument(option)
288 self.assertTrue(not client is None)
289
290 url = self.GetURL(base_path + self.sample_path + ".html") 313 url = self.GetURL(base_path + self.sample_path + ".html")
291 314
292 # load the sample. 315 # load the sample.
293 self.session.open(url) 316 self.session.open(url)
294 317
295 # wait for it to initialize. 318 # wait for it to initialize.
296 self.session.wait_for_condition(ready_condition, timeout) 319 self.session.wait_for_condition(ready_condition, self.timeout)
297 320
298 self.session.run_script( 321 self.session.run_script(
299 "if (window.o3d_prepForSelenium) { window.o3d_prepForSelenium(); }") 322 "if (window.o3d_prepForSelenium) { window.o3d_prepForSelenium(); }")
300 323
301 if assertion: 324 if assertion:
302 self.assertEqual("true", self.session.get_eval(assertion)) 325 self.assertEqual("true", self.session.get_eval(assertion))
303 326
304 # take a screenshot. 327 # take a screenshot.
305 screenshot_id = 1 328 screenshot_id = 1
306 for clock in screenshots: 329 for clock in self.screenshots:
307 # if they are animated we need to stop the animation and set the clock 330 # if they are animated we need to stop the animation and set the clock
308 # to some time so we get a known state. 331 # to some time so we get a known state.
309 self.session.run_script("g_timeMult = 0") 332 self.session.run_script("g_timeMult = 0")
310 self.session.run_script("g_clock = " + clock) 333 self.session.run_script("g_clock = " + clock)
311 334
312 # take a screenshot. 335 # take a screenshot.
313 screenshot = self.sample_path.replace("/", "_") + str(screenshot_id) 336 screenshot = self.sample_path.replace("_", "-").replace("/", "_")
337 screenshot += str(screenshot_id)
314 self.assertTrue(TakeScreenShot(self.session, self.browser, 338 self.assertTrue(TakeScreenShot(self.session, self.browser,
315 client, screenshot)) 339 self.client, screenshot))
316 screenshot_id += 1 340 screenshot_id += 1
OLDNEW
« no previous file with comments | « tests/selenium/selenium_constants.py ('k') | tests/selenium/test_runner.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698