Optimized test execution script
Change-Id: I7c6e4cf1ae9f62f861872cf573703ed9b3f57eb3
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
# Please, install python and puppet before run this script.
|
# Please, install python before run this script.
|
||||||
# Also, please, do not forget to install the following packages for tests:
|
# Also, please, do not forget to install the following packages for tests:
|
||||||
# robotframework, robotframework-selenium2library, BeautifulSoup4
|
# robotframework, robotframework-selenium2library, BeautifulSoup4
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ from argparse import ArgumentParser
|
|||||||
from time import sleep
|
from time import sleep
|
||||||
from os import listdir
|
from os import listdir
|
||||||
from os.path import join, split
|
from os.path import join, split
|
||||||
|
from xvfbwrapper import Xvfb
|
||||||
|
|
||||||
def wait_for_finished(threads):
|
def wait_for_finished(threads):
|
||||||
"""
|
"""
|
||||||
@@ -72,68 +72,24 @@ parser.add_argument('-r', action='store', dest='reports_dir',
|
|||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
# Generate puppet manifest:
|
make_displays = Popen('sudo pkill Xvfb; rm -rf /tmp/.X*-lock', shell=True)
|
||||||
content = """package { ['xvfb',
|
|
||||||
'x11-xkb-utils',
|
|
||||||
'xfonts-100dpi',
|
|
||||||
'xfonts-75dpi',
|
|
||||||
'xfonts-scalable',
|
|
||||||
'xfonts-cyrillic',
|
|
||||||
'xserver-xorg-core']:
|
|
||||||
ensure => latest,
|
|
||||||
}\n"""
|
|
||||||
for i in xrange(args.processes_count):
|
|
||||||
content += """exec {'Create new virtual desktop%s':
|
|
||||||
require => [ Package['xvfb'],
|
|
||||||
Package['x11-xkb-utils'],
|
|
||||||
Package['xfonts-100dpi'],
|
|
||||||
Package['xfonts-75dpi'],
|
|
||||||
Package['xfonts-scalable'],
|
|
||||||
Package['xfonts-cyrillic'],
|
|
||||||
Package['xserver-xorg-core'] ],
|
|
||||||
command => 'Xvfb -fp /usr/share/fonts/X11/misc/ :2%s
|
|
||||||
-screen %s 1024x768x16 2>&1; echo "ok"',
|
|
||||||
user => 'root',
|
|
||||||
provider => shell,
|
|
||||||
path => '/usr/bin',
|
|
||||||
}\n""" % (i + 1, i, i)
|
|
||||||
|
|
||||||
f = open('make_virtual_displays.pp', 'w')
|
|
||||||
f.write(content)
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
# Deploy puppet manifest to create a few virtual displays:
|
|
||||||
cmd = 'sudo puppet apply make_virtual_displays.pp'
|
|
||||||
make_displays = Popen(cmd, shell=True)
|
|
||||||
|
|
||||||
print "Start to make a new virtual displays"
|
|
||||||
while make_displays.poll() is None:
|
while make_displays.poll() is None:
|
||||||
sleep(1)
|
sleep(1)
|
||||||
|
|
||||||
if make_displays.poll() == 0:
|
|
||||||
print "Virtual Displays are ready."
|
|
||||||
else:
|
|
||||||
print "Can not create virtual displays: error code: " +\
|
|
||||||
str(make_displays.poll())
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
# Generate the command for executing tests.
|
# Generate the command for executing tests.
|
||||||
cmd = "export DISPLAY=:%s; pybot -C off -K off -r %s.report.html " \
|
cmd = "export DISPLAY=:%s; pybot -C off -K off -d " + args.reports_dir + "/%s"
|
||||||
"-l %s.log.html -o %s.output.xml -d " + args.reports_dir + " "
|
|
||||||
if args.resources_dir:
|
if args.resources_dir:
|
||||||
cmd += " -v resources_path:" + args.resources_dir + " "
|
cmd += " -v resources_path:" + args.resources_dir + " "
|
||||||
|
|
||||||
|
|
||||||
# Start all threads with tests.
|
# Start all threads with tests.
|
||||||
if args.tags_list and args.script_name:
|
if args.tags_list and args.script_name:
|
||||||
cmd += " -i %s " + args.script_name + " 2>/dev/null"
|
cmd += " -i %s " + args.script_name + " 2>/dev/null"
|
||||||
# Start all threads with tests and ignore empty threads.
|
# Start all threads with tests and ignore empty threads.
|
||||||
threads = []
|
threads = []
|
||||||
for i, tag in enumerate(args.tags_list):
|
for i, tag in enumerate(args.tags_list):
|
||||||
f_name = args.script_name.split('.')[0]
|
xvfb = Xvfb()
|
||||||
values = ("2%s" % i, f_name, f_name, f_name, tag)
|
xvfb.start()
|
||||||
print "Execute command:\n", cmd % values
|
values = (xvfb.vdisplay_num, i, tag)
|
||||||
threads.append(Popen(cmd % values, shell=True))
|
threads.append(Popen(cmd % values, shell=True))
|
||||||
while len(threads) == args.processes_count:
|
while len(threads) == args.processes_count:
|
||||||
wait_for_finished(threads)
|
wait_for_finished(threads)
|
||||||
@@ -167,5 +123,3 @@ else:
|
|||||||
# Wait for all threads finish.
|
# Wait for all threads finish.
|
||||||
while len(threads) > 0:
|
while len(threads) > 0:
|
||||||
wait_for_finished(threads)
|
wait_for_finished(threads)
|
||||||
print "\nFinished."
|
|
||||||
exit(0)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user