Work in progress : seleniumrunner

parent 57432a28
...@@ -29,74 +29,57 @@ import os ...@@ -29,74 +29,57 @@ import os
import sys import sys
import zc.buildout import zc.buildout
from slapos.recipe.librecipe import BaseSlapRecipe from slapos.recipe.librecipe import BaseSlapRecipe
import pkg_resources
class Recipe(BaseSlapRecipe): class Recipe(BaseSlapRecipe):
def _install(self): def _install(self):
""" """Set the connection dictionnary for the computer partition and create a list
Set the connection dictionnary for the computer partition and create a list of paths to the different wrappers."""
of paths to the different wrappers
Parameters : none
Returns : List path_list
"""
self.path_list = [] self.path_list = []
self.requirements, self.ws = self.egg.working_set() self.requirements, self.ws = self.egg.working_set()
self.instanciateTestRunner(self.getDisplay()) self.installtestrunner(self.getDisplay())
self.linkBinary() self.linkBinary()
return self.path_list return self.path_list
def getDisplay(self): def getDisplay(self):
""" """Generate display id for the instance."""
Choose a display for the instance
Parameters : None
Returns : display
"""
display_list = [":%s" % i for i in range(123,144)] display_list = [":%s" % i for i in range(123,144)]
for display_try in display_list: for display_try in display_list:
lock_filepath = '/tmp/.X%s-lock' % display_try.replace(":", "") lock_filepath = '/tmp/.X%s-lock' % display_try.replace(":", "")
if not os.path.exists(lock_filepath): if not os.path.exists(lock_filepath):
display = display_try display = display_try
break break
return display return display
def instanciateTestRunner(self, display): def installTestrunner(self, display):
""" """Instanciate a wrapper for the browser and the test reports."""
Instanciate a wrapper for the browser and the test report's arguments = dict(
Parameters : display on which the browser will run
Returns : None
"""
if self.parameter_dict['browser'] == 'chrome' or self.parameter_dict['browser'] == 'chromium':
self.path_list.extend(zc.buildout.easy_install.scripts([(
'testrunner',__name__+'.testrunner', 'run')], self.ws,
sys.executable, self.wrapper_directory, arguments=[
dict(
browser_binary = self.options['chromium_binary'],
xvfb_binary = self.options['xvfb_binary'], xvfb_binary = self.options['xvfb_binary'],
display = display, display = display,
option_ssl = '--ignore-certificate-errors',
option_translate = '--disable-translate',
option_security = '--disable-web-security',
suite_name = self.parameter_dict['suite_name'], suite_name = self.parameter_dict['suite_name'],
base_url = self.parameter_dict['url'], base_url = self.parameter_dict['url'],
browser_argument_list = [],
# XXX-Cedric : No need for user/pass
user = self.parameter_dict['user'], user = self.parameter_dict['user'],
password = self.parameter_dict['password'] password = self.parameter_dict['password'])
)]))
# Check wanted browser XXX-Cedric not yet used but can be useful
#if self.parameter_dict.get('browser', None) is None:
arguments['browser_binary'] = self.options['firefox_binary']
#elif self.parameter_dict['browser'].strip().lowercase() == 'chrome' or
# self.parameter_dict['browser'].strip().lowercase() == 'chromium':
# arguments['browser_binary'] = self.options['chromium_binary']
# arguments['browser_argument_list'].extend['--ignore-certificate-errors',
# option_translate = '--disable-translate',
# option_security = '--disable-web-security']
#elif self.parameter_dict['browser'].strip().lowercase() == 'firefox':
# arguments['browser_binary'] = self.options['firefox_binary']
self.path_list.extend(zc.buildout.easy_install.scripts([(
'testrunner',__name__+'.testrunner', 'run')], self.ws,
sys.executable, self.wrapper_directory,
arguments=[arguments]))
def linkBinary(self): def linkBinary(self):
"""Links binaries to instance's bin directory for easier exposal""" """Links binaries to instance's bin directory for easier exposal"""
......
...@@ -29,16 +29,23 @@ from erp5functionaltestreporthandler import ERP5TestReportHandler ...@@ -29,16 +29,23 @@ from erp5functionaltestreporthandler import ERP5TestReportHandler
from time import sleep from time import sleep
import os import os
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
from re import search
import urllib2 import urllib2
def run(args): def run(args):
config = args[0] config = args[0]
test_url = assembleTestUrl(config['base_url'], config['user'], config['password']) test_url = assembleTestUrl(config['base_url'], config['suite_name'],
config['user'], config['password'])
while True: while True:
erp5_report = ERP5TestReportHandler(test_url, config['suite_name']) erp5_report = ERP5TestReportHandler(test_url, config['suite_name'])
import pdb; pdb.set_trace()
# Clean old test results
#TODO how to clean results / post results without password?
openUrl('%s/TestTool_cleanUpTestResults' % (config['base_url']))
# TODO assert getresult is None
#XXX-Cedric : clean firefox data (so that it does not load previous session)
xvfb = Popen([config['xvfb_binary'], config['display']], stdout=PIPE) xvfb = Popen([config['xvfb_binary'], config['display']], stdout=PIPE)
os.environ['DISPLAY'] = config['display'] os.environ['DISPLAY'] = config['display']
...@@ -46,23 +53,21 @@ def run(args): ...@@ -46,23 +53,21 @@ def run(args):
command = [] command = []
command.append(config['browser_binary']) command.append(config['browser_binary'])
command.append(config['option_ssl']) for browser_argument in config['browser_argument_list']:
command.append(config['option_translate']) command.append(browser_argument)
command.append(config['option_security'])
command.append(test_url) command.append(test_url)
browser = Popen(command, stdout=PIPE)
chromium = Popen(command, stdout=PIPE)
erp5_report.reportStart() erp5_report.reportStart()
sleep(10)
#while getStatus(config['base_url']) is None:
# sleep(10)
#erp5_report.reportFinished(getStatus(config['base_url']).encode("utf-8", "replace")) # Wait for test to be finished
while getStatus(config['base_url']) is '':
chromium.kill()
terminateXvfb(xvfb, config['display'])
sleep(10) sleep(10)
erp5_report.reportFinished(getStatus(config['base_url']).encode("utf-8",
"replace"))
browser.kill()
terminateXvfb(xvfb, config['display'])
sleep(3600)
def openUrl(url): def openUrl(url):
# Send Accept-Charset headers to activate the UnicodeConflictResolver # Send Accept-Charset headers to activate the UnicodeConflictResolver
...@@ -83,19 +88,19 @@ def getStatus(url): ...@@ -83,19 +88,19 @@ def getStatus(url):
try: try:
status = openUrl('%s/portal_tests/TestTool_getResults' % (url)) status = openUrl('%s/portal_tests/TestTool_getResults' % (url))
except urllib2.HTTPError, e: except urllib2.HTTPError, e:
if e.msg == "No Content" : if e.msg == "No Content":
status = "" status = ""
else: else:
raise raise
return status return status
def assembleTestUrl(base_url, user, password): def assembleTestUrl(base_url, suite_name, user, password):
""" """
Create the full url to the testrunner Create the full url to the testrunner
""" """
test_url = "%s/%s/core/TestRunner.html?test=../test_suite_html&"\
test_url = "%s/core/TestRunner.html?test=../test_suite_html&resultsUrl=%s/postResults&auto=on&__ac_name=%s&__ac_password=%s" % (base_url, base_url, user, password) "resultsUrl=%s/postResults&auto=on&__ac_name=%s&__ac_password=%s" % (
base_url, suite_name, base_url, user, password)
return test_url return test_url
def terminateXvfb(process, display): def terminateXvfb(process, display):
...@@ -103,4 +108,3 @@ def terminateXvfb(process, display): ...@@ -103,4 +108,3 @@ def terminateXvfb(process, display):
lock_filepath = '/tmp/.X%s-lock' % display.replace(":", "") lock_filepath = '/tmp/.X%s-lock' % display.replace(":", "")
if os.path.exists(lock_filepath): if os.path.exists(lock_filepath):
os.system('rm %s' % lock_filepath) os.system('rm %s' % lock_filepath)
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