| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import os | 5 import os |
| 6 import re | 6 import re |
| 7 import shutil | 7 import shutil |
| 8 import sys | 8 import sys |
| 9 import StringIO | 9 import StringIO |
| 10 import tempfile | 10 import tempfile |
| 11 import time |
| 11 import unittest | 12 import unittest |
| 12 | 13 |
| 13 from telemetry import benchmark | 14 from telemetry import benchmark |
| 14 from telemetry import story | 15 from telemetry import story |
| 15 from telemetry.core import exceptions | 16 from telemetry.core import exceptions |
| 16 from telemetry.core import util | 17 from telemetry.core import util |
| 17 from telemetry import decorators | 18 from telemetry import decorators |
| 18 from telemetry.internal.browser import browser_finder | 19 from telemetry.internal.browser import browser_finder |
| 19 from telemetry.internal.browser import user_agent | 20 from telemetry.internal.browser import user_agent |
| 20 from telemetry.internal.results import results_options | 21 from telemetry.internal.results import results_options |
| 21 from telemetry.internal import story_runner | 22 from telemetry.internal import story_runner |
| 22 from telemetry.internal.testing.test_page_sets import example_domain | 23 from telemetry.internal.testing.test_page_sets import example_domain |
| 23 from telemetry.internal.util import exception_formatter | 24 from telemetry.internal.util import exception_formatter |
| 24 from telemetry.page import page as page_module | 25 from telemetry.page import page as page_module |
| 25 from telemetry.page import legacy_page_test | 26 from telemetry.page import legacy_page_test |
| 26 from telemetry.page import shared_page_state | 27 from telemetry.page import shared_page_state |
| 28 from telemetry.page import traffic_setting as traffic_setting_module |
| 27 from telemetry.util import image_util | 29 from telemetry.util import image_util |
| 28 from telemetry.testing import fakes | 30 from telemetry.testing import fakes |
| 29 from telemetry.testing import options_for_unittests | 31 from telemetry.testing import options_for_unittests |
| 30 from telemetry.testing import system_stub | 32 from telemetry.testing import system_stub |
| 31 | 33 |
| 32 | 34 |
| 33 SIMPLE_CREDENTIALS_STRING = """ | 35 SIMPLE_CREDENTIALS_STRING = """ |
| 34 { | 36 { |
| 35 "test": { | 37 "test": { |
| 36 "username": "example", | 38 "username": "example", |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 assert len(tab.browser.tabs) == 1 | 315 assert len(tab.browser.tabs) == 1 |
| 314 | 316 |
| 315 test = TestOneTab() | 317 test = TestOneTab() |
| 316 options = options_for_unittests.GetCopy() | 318 options = options_for_unittests.GetCopy() |
| 317 options.output_formats = ['none'] | 319 options.output_formats = ['none'] |
| 318 options.suppress_gtest_report = True | 320 options.suppress_gtest_report = True |
| 319 SetUpStoryRunnerArguments(options) | 321 SetUpStoryRunnerArguments(options) |
| 320 results = results_options.CreateResults(EmptyMetadataForTest(), options) | 322 results = results_options.CreateResults(EmptyMetadataForTest(), options) |
| 321 story_runner.Run(test, story_set, options, results) | 323 story_runner.Run(test, story_set, options, results) |
| 322 | 324 |
| 325 def testTrafficSettings(self): |
| 326 story_set = story.StorySet() |
| 327 slow_page = page_module.Page( |
| 328 'file://green_rect.html', story_set, base_dir=util.GetUnittestDataDir(), |
| 329 name='slow', |
| 330 traffic_setting=traffic_setting_module.REGULAR_2G) |
| 331 fast_page = page_module.Page( |
| 332 'file://green_rect.html', story_set, base_dir=util.GetUnittestDataDir(), |
| 333 name='fast', |
| 334 traffic_setting=traffic_setting_module.WIFI) |
| 335 story_set.AddStory(slow_page) |
| 336 story_set.AddStory(fast_page) |
| 337 |
| 338 latencies_by_page_in_ms = {} |
| 339 |
| 340 class MeasureLatency(legacy_page_test.LegacyPageTest): |
| 341 def __init__(self): |
| 342 super(MeasureLatency, self).__init__() |
| 343 self._will_navigate_time = None |
| 344 |
| 345 def WillNavigateToPage(self, page, tab): |
| 346 del page, tab # unused |
| 347 self._will_navigate_time = time.time() * 1000 |
| 348 |
| 349 def ValidateAndMeasurePage(self, page, tab, results): |
| 350 del results # unused |
| 351 latencies_by_page_in_ms[page.name] = ( |
| 352 time.time() * 1000 - self._will_navigate_time) |
| 353 |
| 354 test = MeasureLatency() |
| 355 options = options_for_unittests.GetCopy() |
| 356 options.output_formats = ['none'] |
| 357 options.suppress_gtest_report = True |
| 358 SetUpStoryRunnerArguments(options) |
| 359 results = results_options.CreateResults(EmptyMetadataForTest(), options) |
| 360 story_runner.Run(test, story_set, options, results) |
| 361 # Slow page should be slower than fast page by at least 300 ms (roundtrip |
| 362 # time of 2G) - 2 ms (roundtrip time of Wifi) |
| 363 self.assertGreater(latencies_by_page_in_ms['slow'], |
| 364 latencies_by_page_in_ms['fast'] + 300 - 2) |
| 365 |
| 323 # Ensure that story_runner allows >1 tab for multi-tab test. | 366 # Ensure that story_runner allows >1 tab for multi-tab test. |
| 324 @decorators.Enabled('has tabs') | 367 @decorators.Enabled('has tabs') |
| 325 def testMultipleTabsOkayForMultiTabTest(self): | 368 def testMultipleTabsOkayForMultiTabTest(self): |
| 326 story_set = story.StorySet() | 369 story_set = story.StorySet() |
| 327 page = page_module.Page( | 370 page = page_module.Page( |
| 328 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()) | 371 'file://blank.html', story_set, base_dir=util.GetUnittestDataDir()) |
| 329 story_set.AddStory(page) | 372 story_set.AddStory(page) |
| 330 | 373 |
| 331 class TestMultiTabs(legacy_page_test.LegacyPageTest): | 374 class TestMultiTabs(legacy_page_test.LegacyPageTest): |
| 332 def TabForPage(self, page, browser): | 375 def TabForPage(self, page, browser): |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 results.pages_to_profiling_files) | 772 results.pages_to_profiling_files) |
| 730 screenshot_file_path = ( | 773 screenshot_file_path = ( |
| 731 results.pages_to_profiling_files[failing_page][0].GetAbsPath()) | 774 results.pages_to_profiling_files[failing_page][0].GetAbsPath()) |
| 732 try: | 775 try: |
| 733 actual_screenshot_img = image_util.FromPngFile(screenshot_file_path) | 776 actual_screenshot_img = image_util.FromPngFile(screenshot_file_path) |
| 734 self.assertTrue(image_util.AreEqual( | 777 self.assertTrue(image_util.AreEqual( |
| 735 image_util.FromBase64Png(expected_png_base64), | 778 image_util.FromBase64Png(expected_png_base64), |
| 736 actual_screenshot_img)) | 779 actual_screenshot_img)) |
| 737 finally: # Must clean up screenshot file if exists. | 780 finally: # Must clean up screenshot file if exists. |
| 738 os.remove(screenshot_file_path) | 781 os.remove(screenshot_file_path) |
| OLD | NEW |