Commit c2d97ec1 authored by dtu@chromium.org's avatar dtu@chromium.org

[telemetry] Create BrowserTestCase to reuse the browser for browser_unittest.

This brings browser_unittest's run time from 21s to 7s on a Z620 Linux, one of our fastest
configurations. (We still need 3 browser launches to test browser options and profile loading.)

Add BrowserTestCase as the new parent class of TabTestCase. The separation is very clean :)
Also add helper method UrlOfUnittestFile - many tests are using http_server.UrlOf incorrectly,
and this helper ensures the HTTP server is running and we're pointing to the right file.
Also move page_test_test_case from testing/ to unittest/ and remove testing/.


BUG=388256
TEST=tools/telemetry/run_tests

Review URL: https://codereview.chromium.org/469593002

Cr-Commit-Position: refs/heads/master@{#289247}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289247 0039d316-1c4b-4281-b951-d872f2087c98
parent 6d544b2c
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
from measurements import loading_trace from measurements import loading_trace
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
class LoadingTraceUnitTest(page_test_test_case.PageTestTestCase): class LoadingTraceUnitTest(page_test_test_case.PageTestTestCase):
def setUp(self): def setUp(self):
......
...@@ -7,9 +7,9 @@ import logging ...@@ -7,9 +7,9 @@ import logging
from measurements import rasterize_and_record_micro from measurements import rasterize_and_record_micro
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.page import page_test from telemetry.page import page_test
from telemetry.testing import page_test_test_case
from telemetry.unittest import test
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.unittest import test
class RasterizeAndRecordMicroUnitTest(page_test_test_case.PageTestTestCase): class RasterizeAndRecordMicroUnitTest(page_test_test_case.PageTestTestCase):
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
from measurements import record_per_area from measurements import record_per_area
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.testing import page_test_test_case
from telemetry.unittest import test
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.unittest import test
class RecordPerAreaUnitTest(page_test_test_case.PageTestTestCase): class RecordPerAreaUnitTest(page_test_test_case.PageTestTestCase):
......
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
from measurements import repaint from measurements import repaint
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.page import page as page_module from telemetry.page import page as page_module
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.unittest import test from telemetry.unittest import test
......
...@@ -9,8 +9,8 @@ import tempfile ...@@ -9,8 +9,8 @@ import tempfile
from measurements import screenshot from measurements import screenshot
from telemetry import benchmark from telemetry import benchmark
from telemetry.page import page_test from telemetry.page import page_test
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
class ScreenshotUnitTest(page_test_test_case.PageTestTestCase): class ScreenshotUnitTest(page_test_test_case.PageTestTestCase):
......
...@@ -6,8 +6,8 @@ import shutil ...@@ -6,8 +6,8 @@ import shutil
import tempfile import tempfile
from measurements import skpicture_printer from measurements import skpicture_printer
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.unittest import test from telemetry.unittest import test
......
...@@ -9,8 +9,8 @@ from telemetry.core import exceptions ...@@ -9,8 +9,8 @@ from telemetry.core import exceptions
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.page import page from telemetry.page import page
from telemetry.page import page_test from telemetry.page import page_test
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
class FakePlatform(object): class FakePlatform(object):
def IsRawDisplayFrameRateSupported(self): def IsRawDisplayFrameRateSupported(self):
......
...@@ -6,8 +6,8 @@ from measurements import thread_times ...@@ -6,8 +6,8 @@ from measurements import thread_times
from measurements import smoothness_unittest from measurements import smoothness_unittest
from metrics import timeline from metrics import timeline
from telemetry.core import wpr_modes from telemetry.core import wpr_modes
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.unittest import test from telemetry.unittest import test
......
...@@ -8,8 +8,8 @@ import logging ...@@ -8,8 +8,8 @@ import logging
import unittest import unittest
from telemetry.core import util from telemetry.core import util
from telemetry.timeline import model
from telemetry.timeline import tracing_timeline_data from telemetry.timeline import tracing_timeline_data
from telemetry.timeline.model import TimelineModel
from telemetry.unittest import tab_test_case from telemetry.unittest import tab_test_case
...@@ -83,5 +83,5 @@ class ChromeTraceResultTest(unittest.TestCase): ...@@ -83,5 +83,5 @@ class ChromeTraceResultTest(unittest.TestCase):
'{"name": "thread_name",' '{"name": "thread_name",'
'"args": {"name": "CrBrowserMain"},' '"args": {"name": "CrBrowserMain"},'
'"pid": 5, "tid": 32578, "ph": "M"}'])) '"pid": 5, "tid": 32578, "ph": "M"}']))
model = TimelineModel(ri) timeline_model = model.TimelineModel(ri)
self.assertEquals(model.browser_process.pid, 5) self.assertEquals(timeline_model.browser_process.pid, 5)
...@@ -3,138 +3,82 @@ ...@@ -3,138 +3,82 @@
# found in the LICENSE file. # found in the LICENSE file.
import logging import logging
import unittest
from telemetry import benchmark from telemetry import benchmark
from telemetry.core import browser_finder
from telemetry.core import gpu_device from telemetry.core import gpu_device
from telemetry.core import gpu_info from telemetry.core import gpu_info
from telemetry.core import system_info from telemetry.core import system_info
from telemetry.core import util from telemetry.unittest import browser_test_case
from telemetry.unittest import options_for_unittests
class BrowserTest(unittest.TestCase): class BrowserTest(browser_test_case.BrowserTestCase):
def setUp(self):
self._browser = None
def CreateBrowser(self,
extra_browser_args=None,
profile_type=None):
assert not self._browser
options = options_for_unittests.GetCopy()
if profile_type:
options.browser_options.profile_type = profile_type
if extra_browser_args:
options.AppendExtraBrowserArgs(extra_browser_args)
browser_to_create = browser_finder.FindBrowser(options)
if not browser_to_create:
raise Exception('No browser found, cannot continue test.')
self._browser = browser_to_create.Create()
self._browser.Start()
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
return self._browser
def tearDown(self):
if self._browser:
self._browser.Close()
def testBrowserCreation(self): def testBrowserCreation(self):
b = self.CreateBrowser() self.assertEquals(1, len(self._browser.tabs))
self.assertEquals(1, len(b.tabs))
# Different browsers boot up to different things. # Different browsers boot up to different things.
assert b.tabs[0].url assert self._browser.tabs[0].url
def testCommandLineOverriding(self):
# This test starts the browser with --user-agent=telemetry. This tests
# whether the user agent is then set.
flag1 = '--user-agent=telemetry'
b = self.CreateBrowser(extra_browser_args=[flag1])
t = b.tabs[0]
t.Navigate(b.http_server.UrlOf('blank.html'))
t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
'telemetry')
def testVersionDetection(self): def testVersionDetection(self):
b = self.CreateBrowser() # pylint: disable=W0212
v = b._browser_backend.chrome_branch_number # pylint: disable=W0212 v = self._browser._browser_backend.chrome_branch_number
self.assertTrue(v > 0) self.assertTrue(v > 0)
@benchmark.Enabled('has tabs') @benchmark.Enabled('has tabs')
def testNewCloseTab(self): def testNewCloseTab(self):
b = self.CreateBrowser() existing_tab = self._browser.tabs[0]
existing_tab = b.tabs[0] self.assertEquals(1, len(self._browser.tabs))
self.assertEquals(1, len(b.tabs))
existing_tab_url = existing_tab.url existing_tab_url = existing_tab.url
new_tab = b.tabs.New() new_tab = self._browser.tabs.New()
self.assertEquals(2, len(b.tabs)) self.assertEquals(2, len(self._browser.tabs))
self.assertEquals(existing_tab.url, existing_tab_url) self.assertEquals(existing_tab.url, existing_tab_url)
self.assertEquals(new_tab.url, 'about:blank') self.assertEquals(new_tab.url, 'about:blank')
new_tab.Close() new_tab.Close()
self.assertEquals(1, len(b.tabs)) self.assertEquals(1, len(self._browser.tabs))
self.assertEquals(existing_tab.url, existing_tab_url) self.assertEquals(existing_tab.url, existing_tab_url)
def testMultipleTabCalls(self): def testMultipleTabCalls(self):
b = self.CreateBrowser() self._browser.tabs[0].Navigate(self.UrlOfUnittestFile('blank.html'))
b.tabs[0].Navigate(b.http_server.UrlOf('blank.html')) self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
def testTabCallByReference(self): def testTabCallByReference(self):
b = self.CreateBrowser() tab = self._browser.tabs[0]
tab = b.tabs[0] tab.Navigate(self.UrlOfUnittestFile('blank.html'))
tab.Navigate(b.http_server.UrlOf('blank.html')) self._browser.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
@benchmark.Enabled('has tabs') @benchmark.Enabled('has tabs')
@benchmark.Disabled('win') # crbug.com/321527 @benchmark.Disabled('win') # crbug.com/321527
def testCloseReferencedTab(self): def testCloseReferencedTab(self):
b = self.CreateBrowser() self._browser.tabs.New()
b.tabs.New() tab = self._browser.tabs[0]
tab = b.tabs[0] tab.Navigate(self.UrlOfUnittestFile('blank.html'))
tab.Navigate(b.http_server.UrlOf('blank.html'))
tab.Close() tab.Close()
self.assertEquals(1, len(b.tabs)) self.assertEquals(1, len(self._browser.tabs))
@benchmark.Enabled('has tabs') @benchmark.Enabled('has tabs')
def testForegroundTab(self): def testForegroundTab(self):
b = self.CreateBrowser()
# Should be only one tab at this stage, so that must be the foreground tab # Should be only one tab at this stage, so that must be the foreground tab
original_tab = b.tabs[0] original_tab = self._browser.tabs[0]
self.assertEqual(b.foreground_tab, original_tab) self.assertEqual(self._browser.foreground_tab, original_tab)
new_tab = b.tabs.New() new_tab = self._browser.tabs.New()
# New tab shouls be foreground tab # New tab shouls be foreground tab
self.assertEqual(b.foreground_tab, new_tab) self.assertEqual(self._browser.foreground_tab, new_tab)
# Make sure that activating the background tab makes it the foreground tab # Make sure that activating the background tab makes it the foreground tab
original_tab.Activate() original_tab.Activate()
self.assertEqual(b.foreground_tab, original_tab) self.assertEqual(self._browser.foreground_tab, original_tab)
# Closing the current foreground tab should switch the foreground tab to the # Closing the current foreground tab should switch the foreground tab to the
# other tab # other tab
original_tab.Close() original_tab.Close()
self.assertEqual(b.foreground_tab, new_tab) self.assertEqual(self._browser.foreground_tab, new_tab)
@benchmark.Disabled('chromeos') # crbug.com/243912
def testDirtyProfileCreation(self):
b = self.CreateBrowser(profile_type='small_profile')
self.assertEquals(1, len(b.tabs))
def testGetSystemInfo(self): def testGetSystemInfo(self):
b = self.CreateBrowser() if not self._browser.supports_system_info:
if not b.supports_system_info:
logging.warning( logging.warning(
'Browser does not support getting system info, skipping test.') 'Browser does not support getting system info, skipping test.')
return return
info = b.GetSystemInfo() info = self._browser.GetSystemInfo()
self.assertTrue(isinstance(info, system_info.SystemInfo)) self.assertTrue(isinstance(info, system_info.SystemInfo))
self.assertTrue(hasattr(info, 'model_name')) self.assertTrue(hasattr(info, 'model_name'))
...@@ -146,26 +90,47 @@ class BrowserTest(unittest.TestCase): ...@@ -146,26 +90,47 @@ class BrowserTest(unittest.TestCase):
self.assertTrue(isinstance(g, gpu_device.GPUDevice)) self.assertTrue(isinstance(g, gpu_device.GPUDevice))
def testGetSystemInfoNotCachedObject(self): def testGetSystemInfoNotCachedObject(self):
b = self.CreateBrowser() if not self._browser.supports_system_info:
if not b.supports_system_info:
logging.warning( logging.warning(
'Browser does not support getting system info, skipping test.') 'Browser does not support getting system info, skipping test.')
return return
info_a = b.GetSystemInfo() info_a = self._browser.GetSystemInfo()
info_b = b.GetSystemInfo() info_b = self._browser.GetSystemInfo()
self.assertFalse(info_a is info_b) self.assertFalse(info_a is info_b)
def testGetSystemTotalMemory(self): def testGetSystemTotalMemory(self):
b = self.CreateBrowser() self.assertTrue(self._browser.memory_stats['SystemTotalPhysicalMemory'] > 0)
self.assertTrue(b.memory_stats['SystemTotalPhysicalMemory'] > 0)
def testIsTracingRunning(self): def testIsTracingRunning(self):
b = self.CreateBrowser() if not self._browser.supports_tracing:
if not b.supports_tracing:
return return
self.assertFalse(b.is_tracing_running) self.assertFalse(self._browser.is_tracing_running)
b.StartTracing() self._browser.StartTracing()
self.assertTrue(b.is_tracing_running) self.assertTrue(self._browser.is_tracing_running)
b.StopTracing() self._browser.StopTracing()
self.assertFalse(b.is_tracing_running) self.assertFalse(self._browser.is_tracing_running)
class CommandLineBrowserTest(browser_test_case.BrowserTestCase):
@classmethod
def CustomizeBrowserOptions(cls, options):
options.AppendExtraBrowserArgs('--user-agent=telemetry')
def testCommandLineOverriding(self):
# This test starts the browser with --user-agent=telemetry. This tests
# whether the user agent is then set.
t = self._browser.tabs[0]
t.Navigate(self.UrlOfUnittestFile('blank.html'))
t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
'telemetry')
class DirtyProfileBrowserTest(browser_test_case.BrowserTestCase):
@classmethod
def CustomizeBrowserOptions(cls, options):
options.profile_type = 'small_profile'
@benchmark.Disabled('chromeos') # crbug.com/243912
def testDirtyProfileCreation(self):
self.assertEquals(1, len(self._browser.tabs))
...@@ -11,8 +11,9 @@ from telemetry.unittest import tab_test_case ...@@ -11,8 +11,9 @@ from telemetry.unittest import tab_test_case
class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase): class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase):
def setUp(self): def setUp(self):
super(MemoryCacheHTTPServerTest, self).setUp() super(MemoryCacheHTTPServerTest, self).setUp()
self.test_file = os.path.join(util.GetUnittestDataDir(), 'bear.webm') self._test_filename = 'bear.webm'
self.test_file_size = os.stat(self.test_file).st_size _test_file = os.path.join(util.GetUnittestDataDir(), 'bear.webm')
self._test_file_size = os.stat(_test_file).st_size
def testBasicHostingAndRangeRequests(self): def testBasicHostingAndRangeRequests(self):
self.Navigate('blank.html') self.Navigate('blank.html')
...@@ -22,7 +23,7 @@ class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase): ...@@ -22,7 +23,7 @@ class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase):
# Test basic html hosting. # Test basic html hosting.
self.assertEquals(x, 'Hello world') self.assertEquals(x, 'Hello world')
file_size = self.test_file_size file_size = self._test_file_size
last_byte = file_size - 1 last_byte = file_size - 1
# Test byte range request: no end byte. # Test byte range request: no end byte.
self.CheckContentHeaders('0-', '0-%d' % last_byte, file_size) self.CheckContentHeaders('0-', '0-%d' % last_byte, file_size)
...@@ -55,13 +56,13 @@ class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase): ...@@ -55,13 +56,13 @@ class MemoryCacheHTTPServerTest(tab_test_case.TabTestCase):
xmlhttp.open('GET', "%s?t=" + Date.now(), true); xmlhttp.open('GET', "%s?t=" + Date.now(), true);
xmlhttp.setRequestHeader('Range', 'bytes=%s'); xmlhttp.setRequestHeader('Range', 'bytes=%s');
xmlhttp.send(); xmlhttp.send();
""" % (self._browser.http_server.UrlOf(self.test_file), """ % (self.UrlOfUnittestFile(self._test_filename),
content_range_request)) content_range_request))
self._tab.WaitForJavaScriptExpression('loaded', 5) self._tab.WaitForJavaScriptExpression('loaded', 5)
content_range = self._tab.EvaluateJavaScript( content_range = self._tab.EvaluateJavaScript(
'xmlhttp.getResponseHeader("Content-Range");') 'xmlhttp.getResponseHeader("Content-Range");')
content_range_response = 'bytes %s/%d' % ( content_range_response = 'bytes %s/%d' % (
content_range_response, self.test_file_size) content_range_response, self._test_file_size)
self.assertEquals(content_range, content_range_response) self.assertEquals(content_range, content_range_response)
content_length = self._tab.EvaluateJavaScript( content_length = self._tab.EvaluateJavaScript(
'xmlhttp.getResponseHeader("Content-Length");') 'xmlhttp.getResponseHeader("Content-Length");')
......
...@@ -48,14 +48,12 @@ class FakePlatform(object): ...@@ -48,14 +48,12 @@ class FakePlatform(object):
class TabTest(tab_test_case.TabTestCase): class TabTest(tab_test_case.TabTestCase):
def testNavigateAndWaitToForCompleteState(self): def testNavigateAndWaitForCompleteState(self):
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) self._tab.Navigate(self.UrlOfUnittestFile('blank.html'))
self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
self._tab.WaitForDocumentReadyStateToBeComplete() self._tab.WaitForDocumentReadyStateToBeComplete()
def testNavigateAndWaitToForInteractiveState(self): def testNavigateAndWaitForInteractiveState(self):
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) self._tab.Navigate(self.UrlOfUnittestFile('blank.html'))
self._tab.Navigate(self._browser.http_server.UrlOf('blank.html'))
self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
def testTabBrowserIsRightBrowser(self): def testTabBrowserIsRightBrowser(self):
...@@ -79,8 +77,9 @@ class TabTest(tab_test_case.TabTestCase): ...@@ -79,8 +77,9 @@ class TabTest(tab_test_case.TabTestCase):
def testTabUrl(self): def testTabUrl(self):
self.assertEquals(self._tab.url, 'about:blank') self.assertEquals(self._tab.url, 'about:blank')
self.Navigate('blank.html') url = self.UrlOfUnittestFile('blank.html')
self.assertEquals(self._tab.url, self.test_url) self._tab.Navigate(url)
self.assertEquals(self._tab.url, url)
def testIsTimelineRecordingRunningTab(self): def testIsTimelineRecordingRunningTab(self):
self.assertFalse(self._tab.is_timeline_recording_running) self.assertFalse(self._tab.is_timeline_recording_running)
...@@ -164,9 +163,8 @@ class TabTest(tab_test_case.TabTestCase): ...@@ -164,9 +163,8 @@ class TabTest(tab_test_case.TabTestCase):
class GpuTabTest(tab_test_case.TabTestCase): class GpuTabTest(tab_test_case.TabTestCase):
@classmethod @classmethod
def setUpClass(cls): def CustomizeBrowserOptions(cls, options):
cls._extra_browser_args = ['--enable-gpu-benchmarking'] options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
super(GpuTabTest, cls).setUpClass()
# Test flaky on mac: http://crbug.com/358664 # Test flaky on mac: http://crbug.com/358664
@benchmark.Disabled('android', 'mac') @benchmark.Disabled('android', 'mac')
......
...@@ -2,22 +2,13 @@ ...@@ -2,22 +2,13 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
from telemetry.page import page as page_module
from telemetry.page.actions import navigate from telemetry.page.actions import navigate
from telemetry.unittest import tab_test_case from telemetry.unittest import tab_test_case
class NavigateActionTest(tab_test_case.TabTestCase): class NavigateActionTest(tab_test_case.TabTestCase):
def CreatePageFromUnittestDataDir(self, filename):
self.Navigate(filename)
return page_module.Page(
self._browser.http_server.UrlOf(self.test_file_path),
None # In this test, we don't need a page set.
)
def testNavigateAction(self): def testNavigateAction(self):
page = self.CreatePageFromUnittestDataDir('blank.html') i = navigate.NavigateAction(url=self.UrlOfUnittestFile('blank.html'))
i = navigate.NavigateAction(url=page.url)
i.RunAction(self._tab) i.RunAction(self._tab)
self.assertEquals( self.assertEquals(
self._tab.EvaluateJavaScript('document.location.pathname;'), self._tab.EvaluateJavaScript('document.location.pathname;'),
......
...@@ -4,30 +4,16 @@ ...@@ -4,30 +4,16 @@
import os import os
from telemetry.core import util
from telemetry.page import page as page_module
from telemetry.page.actions import scroll from telemetry.page.actions import scroll
from telemetry.unittest import tab_test_case from telemetry.unittest import tab_test_case
from telemetry.unittest import test from telemetry.unittest import test
class ScrollActionTest(tab_test_case.TabTestCase): class ScrollActionTest(tab_test_case.TabTestCase):
def CreateAndNavigateToPageFromUnittestDataDir(
self, filename):
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
page = page_module.Page(
self._browser.http_server.UrlOf(filename),
None) # In this test, we don't need a page set.
self._tab.Navigate(page.url)
self._tab.WaitForDocumentReadyStateToBeComplete()
return page
@test.Disabled # Disabled due to flakiness: crbug.com/330544 @test.Disabled # Disabled due to flakiness: crbug.com/330544
def testScrollAction(self): def testScrollAction(self):
page = self.CreateAndNavigateToPageFromUnittestDataDir("blank.html") self.Navigate('blank.html')
setattr(page, 'smoothness', {"action": "scroll"})
# Make page bigger than window so it's scrollable. # Make page bigger than window so it's scrollable.
self._tab.ExecuteJavaScript("""document.body.style.height = self._tab.ExecuteJavaScript("""document.body.style.height =
(2 * window.innerHeight + 1) + 'px';""") (2 * window.innerHeight + 1) + 'px';""")
...@@ -62,7 +48,8 @@ class ScrollActionTest(tab_test_case.TabTestCase): ...@@ -62,7 +48,8 @@ class ScrollActionTest(tab_test_case.TabTestCase):
(scroll_position, scroll_height)) (scroll_position, scroll_height))
def testBoundingClientRect(self): def testBoundingClientRect(self):
self.CreateAndNavigateToPageFromUnittestDataDir('blank.html') self.Navigate('blank.html')
with open(os.path.join(os.path.dirname(__file__), with open(os.path.join(os.path.dirname(__file__),
'gesture_common.js')) as f: 'gesture_common.js')) as f:
js = f.read() js = f.read()
......
...@@ -12,8 +12,8 @@ from telemetry.page import page as page_module ...@@ -12,8 +12,8 @@ from telemetry.page import page as page_module
from telemetry.page import page_set from telemetry.page import page_set
from telemetry.page import page_set_archive_info from telemetry.page import page_set_archive_info
from telemetry.page import page_test from telemetry.page import page_test
from telemetry.testing import page_test_test_case
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.value import scalar from telemetry.value import scalar
......
...@@ -93,9 +93,7 @@ class RecordWprUnitTests(tab_test_case.TabTestCase): ...@@ -93,9 +93,7 @@ class RecordWprUnitTests(tab_test_case.TabTestCase):
def setUpClass(cls): def setUpClass(cls):
sys.path.extend([cls._base_dir, cls._test_data_dir]) sys.path.extend([cls._base_dir, cls._test_data_dir])
super(RecordWprUnitTests, cls).setUpClass() super(RecordWprUnitTests, cls).setUpClass()
cls._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) cls._url = cls.UrlOfUnittestFile('blank.html')
blank_html_path = os.path.join(util.GetUnittestDataDir(), 'blank.html')
cls._url = cls._browser.http_server.UrlOf(blank_html_path)
# When the RecorderPageTest is created from a PageSet, we do not have a # When the RecorderPageTest is created from a PageSet, we do not have a
# PageTest to use. In this case, we will record every available action. # PageTest to use. In this case, we will record every available action.
......
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import unittest
from telemetry.core import browser_finder
from telemetry.unittest import options_for_unittests
from telemetry.util import path
class BrowserTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
options = options_for_unittests.GetCopy()
cls.CustomizeBrowserOptions(options.browser_options)
browser_to_create = browser_finder.FindBrowser(options)
if not browser_to_create:
raise Exception('No browser found, cannot continue test.')
cls._browser = None
try:
cls._browser = browser_to_create.Create()
cls._browser.Start()
except:
cls.tearDownClass()
raise
@classmethod
def tearDownClass(cls):
if cls._browser:
cls._browser.Close()
cls._browser = None
@classmethod
def CustomizeBrowserOptions(cls, options):
"""Override to add test-specific options to the BrowserOptions object"""
pass
@classmethod
def UrlOfUnittestFile(cls, filename):
cls._browser.SetHTTPServerDirectories(path.GetUnittestDataDir())
file_path = os.path.join(path.GetUnittestDataDir(), filename)
return cls._browser.http_server.UrlOf(file_path)
...@@ -2,44 +2,17 @@ ...@@ -2,44 +2,17 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
import os from telemetry.unittest import browser_test_case
import unittest
from telemetry.core import browser_finder
from telemetry.core import util
from telemetry.unittest import options_for_unittests
class TabTestCase(unittest.TestCase):
_extra_browser_args = []
class TabTestCase(browser_test_case.BrowserTestCase):
def __init__(self, *args): def __init__(self, *args):
super(TabTestCase, self).__init__(*args) super(TabTestCase, self).__init__(*args)
self._tab = None self._tab = None
self.test_file_path = None
self.test_url = None
@classmethod
def setUpClass(cls):
options = options_for_unittests.GetCopy()
cls.CustomizeBrowserOptions(options.browser_options)
if cls._extra_browser_args:
options.AppendExtraBrowserArgs(cls._extra_browser_args)
browser_to_create = browser_finder.FindBrowser(options)
if not browser_to_create:
raise Exception('No browser found, cannot continue test.')
cls._browser = None
try:
cls._browser = browser_to_create.Create()
cls._browser.Start()
except:
cls.tearDownClass()
raise
def setUp(self): def setUp(self):
super(TabTestCase, self).setUp()
if self._browser.supports_tab_control: if self._browser.supports_tab_control:
self._tab = self._browser.tabs.New() self._tab = self._browser.tabs.New()
while len(self._browser.tabs) > 1: while len(self._browser.tabs) > 1:
...@@ -52,23 +25,11 @@ class TabTestCase(unittest.TestCase): ...@@ -52,23 +25,11 @@ class TabTestCase(unittest.TestCase):
self._tab.Navigate('about:blank') self._tab.Navigate('about:blank')
self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
@classmethod
def tearDownClass(cls):
if cls._browser:
cls._browser.Close()
@classmethod
def CustomizeBrowserOptions(cls, options):
"""Override to add test-specific options to the BrowserOptions object"""
pass
def Navigate(self, filename, script_to_evaluate_on_commit=None): def Navigate(self, filename, script_to_evaluate_on_commit=None):
"""Navigates |tab| to |filename| in the unittest data directory. """Navigates |tab| to |filename| in the unittest data directory.
Also sets up http server to point to the unittest data directory. Also sets up http server to point to the unittest data directory.
""" """
self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) url = self.UrlOfUnittestFile(filename)
self.test_file_path = os.path.join(util.GetUnittestDataDir(), filename) self._tab.Navigate(url, script_to_evaluate_on_commit)
self.test_url = self._browser.http_server.UrlOf(self.test_file_path)
self._tab.Navigate(self.test_url, script_to_evaluate_on_commit)
self._tab.WaitForDocumentReadyStateToBeComplete() self._tab.WaitForDocumentReadyStateToBeComplete()
...@@ -10,10 +10,10 @@ from telemetry.core import wpr_modes ...@@ -10,10 +10,10 @@ from telemetry.core import wpr_modes
from telemetry.page import page as page_module from telemetry.page import page as page_module
from telemetry.page import page_set from telemetry.page import page_set
from telemetry.results import page_test_results from telemetry.results import page_test_results
from telemetry.testing import page_test_test_case
from telemetry.timeline import model as model_module from telemetry.timeline import model as model_module
from telemetry.timeline import async_slice from telemetry.timeline import async_slice
from telemetry.unittest import options_for_unittests from telemetry.unittest import options_for_unittests
from telemetry.unittest import page_test_test_case
from telemetry.value import scalar from telemetry.value import scalar
from telemetry.web_perf import timeline_based_measurement as tbm_module from telemetry.web_perf import timeline_based_measurement as tbm_module
from telemetry.web_perf import timeline_interaction_record as tir_module from telemetry.web_perf import timeline_interaction_record as tir_module
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment