Optimized test execution script

Change-Id: I7c6e4cf1ae9f62f861872cf573703ed9b3f57eb3
This commit is contained in:
Timur Nurlygayanov
2013-10-27 03:46:51 +04:00
parent dbc8960c98
commit d30fcc91e4

View File

@@ -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)