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

Side by Side Diff: tools/telemetry/telemetry/page/record_wpr_unittest.py

Issue 374793002: Refactor of record_wpr.py (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git rebase Created 6 years, 5 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
OLDNEW
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 unittest 5 import os
6 import sys
6 7
8 from telemetry import benchmark
9 from telemetry.core import util
10 from telemetry.core import wpr_modes
7 from telemetry.page import page as page_module 11 from telemetry.page import page as page_module
12 from telemetry.page import page_set as page_set_module
13 from telemetry.page import page_test
8 from telemetry.page import record_wpr 14 from telemetry.page import record_wpr
15 from telemetry.unittest import tab_test_case
9 16
10 17
11 class TestPage(page_module.Page): 18 class MockPage(page_module.Page):
12 def __init__(self): 19 def __init__(self, page_set, url):
13 super(TestPage, self).__init__(url='file://foo.html', 20 super(MockPage, self).__init__(url=url,
14 page_set=None, 21 page_set=page_set,
15 base_dir=None) 22 base_dir=util.GetUnittestDataDir())
16 self.run_navigate = False 23 self.func_calls = []
17 self.run_foo = False
18 self.run_bar = False
19 24
20 def RunNavigateSteps(self, _): 25 def RunNavigateSteps(self, action_runner):
21 self.run_navigate = True 26 self.func_calls.append('RunNavigateSteps')
27 super(MockPage, self).RunNavigateSteps(action_runner)
22 28
23 def RunFoo(self, _): 29 def RunFoo(self, _):
24 self.run_foo = True 30 self.func_calls.append('RunFoo')
25 31
26 def RunBar(self, _): 32 def RunBar(self, _):
27 self.run_bar = True 33 self.func_calls.append('RunBar')
34
35 def RunBaz(self, _):
36 self.func_calls.append('RunBaz')
28 37
29 38
30 class FakeFooMeasurement(object): 39 class MockPageSet(page_set_module.PageSet):
31 def __init__(self): 40 def __init__(self, url=''):
32 self.action_name_to_run = "RunFoo" 41 super(MockPageSet, self).__init__(archive_data_file='data/test.json')
42 self.AddPage(MockPage(self, url))
33 43
34 44
35 class FakeBarMeasurement(object): 45 class MockPageTest(page_test.PageTest):
36 def __init__(self): 46 def __init__(self):
37 self.action_name_to_run = "RunBar" 47 super(MockPageTest, self).__init__()
48 self._action_name_to_run = "RunBaz"
49 self.func_calls = []
50
51 @classmethod
52 def AddCommandLineArgs(cls, parser):
53 parser.add_option('--mock-page-test-option', action="store_true")
54
55 def WillNavigateToPage(self, page, tab):
56 self.func_calls.append('WillNavigateToPage')
57
58 def DidNavigateToPage(self, page, tab):
59 self.func_calls.append('DidNavigateToPage')
60
61 def WillRunActions(self, page, tab):
62 self.func_calls.append('WillRunActions')
63
64 def DidRunActions(self, page, tab):
65 self.func_calls.append('DidRunActions')
66
67 def ValidatePage(self, page, tab, results):
68 self.func_calls.append('ValidatePage')
38 69
39 70
40 class FakeTab(object): 71 class MockBenchmark(benchmark.Benchmark):
41 def WaitForDocumentReadyStateToBeComplete(self): 72 test = MockPageTest
42 pass 73
74 @classmethod
75 def AddTestCommandLineArgs(cls, group):
76 group.add_option('', '--mock-benchmark-url', action='store', type='string')
77
78 def CreatePageSet(self, options):
79 kwargs = {}
80 if (options.mock_benchmark_url):
81 kwargs['url'] = options.mock_benchmark_url
82 return MockPageSet(**kwargs)
43 83
44 84
45 class RecordWprUnitTest(unittest.TestCase): 85 class RecordWprUnitTests(tab_test_case.TabTestCase):
46 def setUp(self):
47 super(RecordWprUnitTest, self).setUp()
48 86
49 def testRunActions(self): 87 _base_dir = util.GetUnittestDataDir()
50 page = TestPage() 88 _test_data_dir = os.path.join(util.GetUnittestDataDir(), 'page_measurements')
51 record_runner = record_wpr.RecordPage({1 : FakeFooMeasurement,
52 2 : FakeBarMeasurement})
53 record_runner.RunPage(page, tab=FakeTab(), results=None)
54 self.assertTrue(page.run_navigate)
55 self.assertTrue(page.run_foo)
56 self.assertTrue(page.run_bar)
57 89
90 @classmethod
91 def setUpClass(cls):
92 sys.path.extend([cls._base_dir, cls._test_data_dir])
93 super(RecordWprUnitTests, cls).setUpClass()
94 cls._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
95 blank_html_path = os.path.join(util.GetUnittestDataDir(), 'blank.html')
96 cls._url = cls._browser.http_server.UrlOf(blank_html_path)
97
98 # When the RecorderPageTest is created from a PageSet, we do not have a
99 # PageTest to use. In this case, we will record every available action.
100 def testRunPage_AllActions(self):
101 record_page_test = record_wpr.RecorderPageTest(["RunFoo", "RunBar"])
102 page = MockPage(page_set=MockPageSet(url=self._url), url=self._url)
103 record_page_test.RunPage(page, self._tab, results=None)
104 self.assertTrue('RunFoo' in page.func_calls)
105 self.assertTrue('RunBar' in page.func_calls)
106 self.assertFalse('RunBaz' in page.func_calls)
107
108 def testRunPage_DontReloadSingleActions(self):
109 record_page_test = record_wpr.RecorderPageTest(["RunFoo"])
110 page = MockPage(page_set=MockPageSet(url=self._url), url=self._url)
111 record_page_test.RunPage(page, self._tab, results=None)
112 self.assertFalse('RunNavigateSteps' in page.func_calls)
113
114 def testRunPage_ReloadPageBetweenActions(self):
115 record_page_test = record_wpr.RecorderPageTest(["RunFoo", "RunBar"])
116 page = MockPage(page_set=MockPageSet(url=self._url), url=self._url)
117 record_page_test.RunPage(page, self._tab, results=None)
118 self.assertTrue('RunNavigateSteps' in page.func_calls)
119
120 # When the RecorderPageTest is created from a Benchmark, the benchmark will
121 # have a PageTest, specified by its test attribute.
122 def testRunPage_OnlyRunBenchmarkAction(self):
123 record_page_test = record_wpr.RecorderPageTest(["RunFoo"])
124 record_page_test.page_test = MockBenchmark().test()
125 page = MockPage(page_set=MockPageSet(url=self._url), url=self._url)
126 record_page_test.RunPage(page, self._tab, results=None)
127 self.assertFalse('RunFoo' in page.func_calls)
128 self.assertTrue('RunBaz' in page.func_calls)
129
130 def testRunPage_CallBenchmarksPageTestsFunctions(self):
131 record_page_test = record_wpr.RecorderPageTest([])
132 record_page_test.page_test = MockBenchmark().test()
133 page = MockPage(page_set=MockPageSet(url=self._url), url=self._url)
134 record_page_test.RunPage(page, self._tab, results=None)
135 self.assertEqual(3, len(record_page_test.page_test.func_calls))
136 self.assertEqual('WillRunActions', record_page_test.page_test.func_calls[0])
137 self.assertEqual('DidRunActions', record_page_test.page_test.func_calls[1])
138 self.assertEqual('ValidatePage', record_page_test.page_test.func_calls[2])
139
140 def testWprRecorderWithPageSet(self):
141 wpr_recorder = record_wpr.WprRecorder(self._test_data_dir,
142 MockPageSet(url=self._url))
143 results = wpr_recorder.Record()
144 self.assertEquals(1, len(results.successes))
145 mock_page = results.successes.pop()
146 self.assertTrue('RunFoo' in mock_page.func_calls)
147 self.assertFalse('RunBaz' in mock_page.func_calls)
148
149 def testWprRecorderWithBenchmark(self):
150 flags = ['--mock-benchmark-url', self._url]
151 wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(),
152 flags)
153 results = wpr_recorder.Record()
154 self.assertEquals(1, len(results.successes))
155 mock_page = results.successes.pop()
156 self.assertFalse('RunFoo' in mock_page.func_calls)
157 self.assertTrue('RunBaz' in mock_page.func_calls)
158
159 def testCommandLineFlags(self):
160 flags = [
161 '--page-repeat', '2',
162 '--mock-benchmark-url', self._url,
163 '--mock-page-test-option',
164 ]
165 wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(),
166 flags)
167 # page_runner command-line args
168 self.assertEquals(2, wpr_recorder.options.page_repeat)
169 # benchmark command-line args
170 self.assertEquals(self._url, wpr_recorder.options.mock_benchmark_url)
171 # benchmark's page_test command-line args
172 self.assertTrue(wpr_recorder.options.mock_page_test_option)
173 # invalid command-line args
174 self.assertFalse(hasattr(wpr_recorder.options, 'not_a_real_option'))
175
176 def testRecordingEnabled(self):
177 flags = ['--mock-benchmark-url', self._url]
178 wpr_recorder = record_wpr.WprRecorder(self._test_data_dir, MockBenchmark(),
179 flags)
180 self.assertEqual(wpr_modes.WPR_RECORD,
181 wpr_recorder.options.browser_options.wpr_mode)
182
183 def testFindAllActionNames(self):
184 # The src/tools/telemetry/unittest_data/page_measurements/ has been
185 # populated with three simple Page Measurement classes, the first two of
186 # which have action_name_to_run defined.
187 action_names_to_run = record_wpr.FindAllActionNames(self._test_data_dir)
188 self.assertTrue('RunFoo' in action_names_to_run)
189 self.assertTrue('RunBar' in action_names_to_run)
190 self.assertFalse('RunBaz' in action_names_to_run)
OLDNEW
« no previous file with comments | « tools/telemetry/telemetry/page/record_wpr.py ('k') | tools/telemetry/unittest_data/page_measurements/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698