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

Side by Side Diff: functional/netflix.py

Issue 8562006: Adding Netflix performance measurement tests for dropped frames and CPU extrapolation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/test/
Patch Set: '' Created 9 years, 1 month 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 | « no previous file | functional/perf.py » ('j') | functional/perf.py » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import time 6 import time
7 7
8 import pyauto_functional 8 import pyauto_functional
9 import pyauto 9 import pyauto
10 10
11 11
12 class NetflixTest(pyauto.PyUITest): 12 class NetflixTestHelper():
13 """Test case for Netflix player""" 13 """Helper functions for Netflix tests.
14
15 For sample usage, look at class NetflixTest.
16 """
14 17
15 # Netflix player states 18 # Netflix player states.
16 _is_playing = '4' 19 is_playing = '4'
17 20
18 _title_homepage = 'http://movies.netflix.com/WiHome' 21 title_homepage = 'http://movies.netflix.com/WiHome'
19 _signout_page = 'https://account.netflix.com/Logout' 22 signout_page = 'https://account.netflix.com/Logout'
20 # 30 Rock 23 # 30 Rock
21 _test_title = 'http://movies.netflix.com/WiPlayer?'+ \ 24 test_title = 'http://movies.netflix.com/WiPlayer?'+ \
22 'movieid=70136124&trkid=2361637&t=30+Rock' 25 'movieid=70136124&trkid=2361637&t=30+Rock'
26 _pyauto = None
23 27
24 def tearDown(self): 28 def __init__(self, pyauto):
25 self._SignOut() 29 self._pyauto = pyauto
26 pyauto.PyUITest.tearDown(self)
27 30
28 def _IsNetflixPluginEnabled(self): 31 def _IsNetflixPluginEnabled(self):
29 """Determine Netflix plugin availability and its state""" 32 """Determine Netflix plugin availability and its state."""
30 return [x for x in self.GetPluginsInfo().Plugins() \ 33 return [x for x in self._pyauto.GetPluginsInfo().Plugins() \
31 if x['name'] == 'Netflix' and x['enabled']] 34 if x['name'] == 'Netflix' and x['enabled']]
32 35
33 def _LoginToNetflix(self): 36 def _LoginToNetflix(self):
34 """Login to Netflix""" 37 """Login to Netflix."""
35 credentials = self.GetPrivateInfo()['test_netflix_acct'] 38 credentials = self._pyauto.GetPrivateInfo()['test_netflix_acct']
36 board_name = self.ChromeOSBoard() 39 board_name = self._pyauto.ChromeOSBoard()
37 assert credentials.get(board_name), \ 40 assert credentials.get(board_name), \
38 'No netflix credentials for %s' % board_name 41 'No netflix credentials for %s.' % board_name
39 self.NavigateToURL(credentials['login_url']) 42 self._pyauto.NavigateToURL(credentials['login_url'])
40 login_js = """ 43 login_js = """
41 document.getElementById('email').value='%s'; 44 document.getElementById('email').value='%s';
42 document.getElementById('password').value='%s'; 45 document.getElementById('password').value='%s';
43 window.domAutomationController.send('ok'); 46 window.domAutomationController.send('ok');
44 """ % (credentials[board_name], credentials['password']) 47 """ % (credentials[board_name], credentials['password'])
45 self.assertEqual(self.ExecuteJavascript(login_js), 'ok', 48 self._pyauto.assertEqual(self._pyauto.ExecuteJavascript(login_js), 'ok',
46 msg='Failed to set login credentials') 49 msg='Failed to set login credentials.')
47 self.assertTrue(self.SubmitForm('login-form'), 50 self._pyauto.assertTrue(self._pyauto.SubmitForm('login-form'),
48 msg='Login to Netflix failed') 51 msg='Login to Netflix failed.')
49 52
53 def GetVideoDroppedFrames(self):
dennis_jeffrey 2011/11/21 22:45:10 For this function and the function below, we shoul
rohitbm 2011/11/22 00:57:09 Done.
54 """Returns total Netflix video dropped frames."""
55 js = """
56 var frames = nrdp.video.droppedFrames;
57 window.domAutomationController.send(frames + '');
58 """
59 return int(self._pyauto.ExecuteJavascript(js))
dennis_jeffrey 2011/11/21 22:45:10 remove one of the spaces after the word 'return'
dennis_jeffrey 2011/11/21 22:45:10 Maybe we should specify the window/tab index here.
rohitbm 2011/11/22 00:57:09 Done.
rohitbm 2011/11/22 00:57:09 Done.
60
61 def GetVideoFrames(self):
62 """Returns Netflix video total frames."""
63 js = """
64 var frames = nrdp.video.totalFrames;
65 window.domAutomationController.send(frames + '');
66 """
67 return int(self._pyauto.ExecuteJavascript(js))
dennis_jeffrey 2011/11/21 22:45:10 Same comments as line 59 above.
rohitbm 2011/11/22 00:57:09 Done.
68
50 def _HandleInfobars(self): 69 def _HandleInfobars(self):
51 """Manage infobars, come up during the test. 70 """Manage infobars, come up during the test.
52 71
53 We expect password and Netflix infobars. Processing only Netflix infobar, 72 We expect password and Netflix infobars. Processing only Netflix infobar,
54 since to start a vidoe, pressing the OK button is a must. We can keep other 73 since to start a vidoe, pressing the OK button is a must. We can keep other
55 inforbars open.""" 74 infobars open."""
56 self.WaitForInfobarCount(2) 75 self._pyauto.WaitForInfobarCount(2)
57 tab_info = self.GetBrowserInfo()['windows'][0]['tabs'][0] 76 tab_info = self._pyauto.GetBrowserInfo()['windows'][0]['tabs'][0]
58 infobars = tab_info['infobars'] 77 infobars = tab_info['infobars']
59 index = 0 78 index = 0
60 netflix_infobar_status = False 79 netflix_infobar_status = False
61 for infobar in infobars: 80 for infobar in infobars:
62 if infobar['buttons'][0] == 'OK': 81 if infobar['buttons'][0] == 'OK':
63 self.PerformActionOnInfobar('accept', infobar_index=index) 82 self._pyauto.PerformActionOnInfobar('accept', infobar_index=index)
64 netflix_infobar_status = True 83 netflix_infobar_status = True
65 index = index + 1 84 index = index + 1
66 self.assertTrue(netflix_infobar_status, 85 self._pyauto.assertTrue(netflix_infobar_status,
67 msg='Netflix infobar did not show up') 86 msg='Netflix infobar did not show up')
68 87
69 def _CurrentPlaybackTime(self): 88 def _CurrentPlaybackTime(self):
70 """Returns the current playback time in seconds""" 89 """Returns the current playback time in seconds."""
71 time = self.ExecuteJavascript(""" 90 time = self._pyauto.ExecuteJavascript("""
72 time = nrdp.video.currentTime; 91 time = nrdp.video.currentTime;
73 window.domAutomationController.send(time + ''); 92 window.domAutomationController.send(time + '');
74 """) 93 """)
75 return int(float(time)) 94 return int(float(time))
76 95
77 def _SignOut(self): 96 def _SignOut(self):
78 """Sing out from Netflix Login""" 97 """Sing out from Netflix Login."""
79 self.NavigateToURL(self._signout_page) 98 self._pyauto.NavigateToURL(self._pyauto.signout_page)
80 99
81 def _LoginAndStartPlaying(self): 100 def _LoginAndStartPlaying(self):
82 """Login and start playing the video""" 101 """Login and start playing the video."""
83 self.assertTrue(self._IsNetflixPluginEnabled(), 102 self._pyauto.assertTrue(self._pyauto._IsNetflixPluginEnabled(),
84 msg='Netflix plugin is disabled or not available') 103 msg='Netflix plugin is disabled or not available.')
85 self._LoginToNetflix() 104 self._pyauto._LoginToNetflix()
86 self.assertTrue(self.WaitUntil( 105 self._pyauto.assertTrue(self._pyauto.WaitUntil(
87 lambda:self.GetActiveTabURL().spec(), 106 lambda:self._pyauto.GetActiveTabURL().spec(),
88 expect_retval=self._title_homepage), 107 expect_retval=self._pyauto.title_homepage),
89 msg='Login to Netflix failed') 108 msg='Login to Netflix failed.')
90 self.NavigateToURL(self._test_title) 109 self._pyauto.NavigateToURL(self._pyauto.test_title)
91 self._HandleInfobars() 110 self._pyauto._HandleInfobars()
92 self.assertTrue(self.WaitUntil( 111 self._pyauto.assertTrue(self._pyauto.WaitUntil(
93 lambda: self.ExecuteJavascript(""" 112 lambda: self._pyauto.ExecuteJavascript("""
94 player_status = nrdp.video.readyState; 113 player_status = nrdp.video.readyState;
95 window.domAutomationController.send(player_status + ''); 114 window.domAutomationController.send(player_status + '');
96 """), expect_retval=self._is_playing), 115 """), expect_retval=self._pyauto.is_playing),
97 msg='Player did not start playing the title') 116 msg='Player did not start playing the title.')
117
118 class NetflixTest(pyauto.PyUITest, NetflixTestHelper):
119 """Test case for Netflix player."""
120
121 def __init__(self, methodName='runTest', **kwargs):
122 pyauto.PyUITest.__init__(self, methodName, **kwargs)
123 NetflixTestHelper.__init__(self, self)
124
125 def tearDown(self):
126 self._SignOut()
127 pyauto.PyUITest.tearDown(self)
98 128
99 def testPlayerLoadsAndPlays(self): 129 def testPlayerLoadsAndPlays(self):
100 """Test that Netflix player loads and plays the title""" 130 """Test that Netflix player loads and plays the title."""
101 self._LoginAndStartPlaying() 131 self._LoginAndStartPlaying()
102 132
103 def testPlaying(self): 133 def testPlaying(self):
104 """Test that title playing progresses""" 134 """Test that title playing progresses."""
105 self._LoginAndStartPlaying() 135 self._LoginAndStartPlaying()
106 title_length = self.ExecuteJavascript(""" 136 title_length = self.ExecuteJavascript("""
107 time = nrdp.video.duration; 137 time = nrdp.video.duration;
108 window.domAutomationController.send(time + ''); 138 window.domAutomationController.send(time + '');
109 """) 139 """)
110 title_length = int(float(title_length)) 140 title_length = int(float(title_length))
111 prev_time = 0 141 prev_time = 0
112 current_time = 0 142 current_time = 0
113 count = 0 143 count = 0
114 while current_time < title_length: 144 while current_time < title_length:
115 # We want to test playing only for ten seconds 145 # We want to test playing only for ten seconds.
116 count = count + 1 146 count = count + 1
117 if count == 10: 147 if count == 10:
118 break 148 break
119 current_time = self._CurrentPlaybackTime() 149 current_time = self._CurrentPlaybackTime()
120 self.assertTrue(prev_time <= current_time, 150 self.assertTrue(prev_time <= current_time,
121 msg='Prev playing time %s is greater than current time %s' 151 msg='Prev playing time %s is greater than current time %s.'
122 % (prev_time, current_time)) 152 % (prev_time, current_time))
123 prev_time = current_time 153 prev_time = current_time
124 # play video for some time 154 # play video for some time
125 time.sleep(1) 155 time.sleep(1)
126 # crosbug.com/22037 156 # crosbug.com/22037
127 # In case player doesn't start playing at all, above while loop may 157 # In case player doesn't start playing at all, above while loop may
128 # still pass. So re-verifying and assuming that player did play something 158 # still pass. So re-verifying and assuming that player did play something
129 # during last 10 seconds. 159 # during last 10 seconds.
130 self.assertTrue(current_time > 0, 160 self.assertTrue(current_time > 0,
131 msg='Netflix player didnot start playing') 161 msg='Netflix player didnot start playing.')
132 162
133 163
134 if __name__ == '__main__': 164 if __name__ == '__main__':
135 pyauto_functional.Main() 165 pyauto_functional.Main()
OLDNEW
« no previous file with comments | « no previous file | functional/perf.py » ('j') | functional/perf.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698