What's new? | Help | Directory | Sign in
Google
             
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import sys

class TestRunner:
""" Run browser tests.

This class manages execution in-browser JavaScript tests. Uses webserver
and list of browser launcher objects to run the test on
all specified browsers.

Args:
browser_launchers: list of BrowserLauncher types
test_server: instance of testwebserver
"""

TIMEOUT = 8 * 60 #seconds

def __init__(self, browser_launchers, web_servers, test_url):
if not browser_launchers or len(browser_launchers) < 1:
raise ValueError("Please provide browser launchers")
self.__verifyBrowserLauncherTypesUnique(browser_launchers)
self.browser_launchers = browser_launchers
self.web_servers = web_servers
self.test_url = test_url


def runTests(self, automated=True):
""" Launch tests on the test webserver for each launcher.

Returns:
results object keyed by browser.
"""
test_results = {}

# Only one instance of TestWebserver must call startServing.
# Expect postback results from the first server on the list.
test_server = self.web_servers[0]
test_server.startServing()

try:
for browser_launcher in self.browser_launchers:
test_server.startTest(TestRunner.TIMEOUT)
try:
browser_launcher.launch(self.test_url)
except:
print 'Error launching browser ', sys.exc_info()[0]
self.__handleBrowserTestCompletion(browser_launcher,
test_results, automated)
else:
# There is not try/catch/finally available to us so
# we will go with code duplication.
self.__handleBrowserTestCompletion(browser_launcher,
test_results, automated)
finally:
# Shutdown each instance of TestWebserver after testing is complete
# to unbind sockets.
# Also kill all browsers one last time to make sure no instances
# of browser windows or crash report processes are left behind.
print 'Ending browser tests, shutting down server.'
for server in self.web_servers:
server.shutdown()
print 'Shutting down any remaining browser or crash report instances.'
for browser_launcher in self.browser_launchers:
browser_launcher.killAllInstances()
return test_results


def __handleBrowserTestCompletion(self, browser_launcher, test_results,
automated):
""" Extract results and kill the browser. """
test_server = self.web_servers[0]
test_results[browser_launcher.type()] = test_server.testResults()
if automated:
try:
browser_launcher.killAllInstances()
except:
print 'Error killing browser ', sys.exc_info()[0]


def __verifyBrowserLauncherTypesUnique(self, browser_launchers):
""" Check that the given launchers represent unique browser type.

Args:
browser_launchers: list of BrowserLauncher objects.
"""
browser_launchers_by_name = {}
for browser_launcher in browser_launchers:
browser_type = browser_launcher.type()
if not browser_launchers_by_name.has_key(browser_type):
browser_launchers_by_name[browser_type] = []
browser_launchers_by_name[browser_type].append(browser_launcher)

for launchers in browser_launchers_by_name.values():
if len(launchers) > 1:
raise ValueError('Browser launchers all must have unique type values')


if __name__ == '__main__':
""" If run as main, launch tests on current system. """
import sys
import os
from testwebserver import TestWebserver
import browser_launchers as launcher
import osutils

from config import Config
sys.path.extend(Config.ADDITIONAL_PYTHON_LIBRARY_PATHS)

def server_root_dir():
return os.path.join(os.path.dirname(__file__), '../')

web_servers = []
web_servers.append(TestWebserver(server_root_dir(), port=8001))
web_servers.append(TestWebserver(server_root_dir(), port=8002))

installers = []

if osutils.osIsWin():
launchers = []
launchers.append(launcher.IExploreWin32Launcher(automated=False))
launchers.append(launcher.FirefoxWin32Launcher('ffprofile-win',
automated=False))

elif osutils.osIsNix():
if osutils.osIsMac():
launchers = [launcher.FirefoxMacLauncher('gears', automated=False)]

else: #is linux
launchers = [launcher.FirefoxLinuxLauncher('gears', automated=False)]

testrunner = TestRunner(launchers, web_servers)
testrunner.runTests(automated=False)
Show details Hide details

Change log

r2552 by gears.daemon on Jul 30, 2008   Diff
[Author: ace]

Couple small cleanup fixes for test
runner.
* Instanciate webserver after launchers.
This fixes linux "address is already in
use" problem.
* add firefox crash reporter process to
firefox kill list for windows.
* adding more browser/crash reporter
cleanup after testing completes.  Just had
an issue where ff3 crashes while being
...
Go to: 
Project members, sign in to write a code review

Older revisions

r1987 by gears.daemon on Jun 16, 2008   Diff
[Author: ace]

- Adding FF3 to linux
- Safari support for OS X in progress
- Small fixes for robustness
...
r1731 by gears.daemon on May 21, 2008   Diff
[Author: ace]

Adding some extra cleanup to browser
launchers to ensure all browser
instances
...
r1476 by gears.daemon on Apr 28, 2008   Diff
[Author: ace]

Add firefox3 testing to windows build
runs.

...
All revisions of this file

File info

Size: 4594 bytes, 131 lines

File properties

svn:executable
*