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
# 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:
# robotframework, robotframework-selenium2library, BeautifulSoup4
@@ -21,7 +21,7 @@ from argparse import ArgumentParser
from time import sleep
from os import listdir
from os.path import join, split
from xvfbwrapper import Xvfb
def wait_for_finished(threads):
"""
@@ -72,68 +72,24 @@ parser.add_argument('-r', action='store', dest='reports_dir',
args = parser.parse_args()
# Generate puppet manifest:
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"
make_displays = Popen('sudo pkill Xvfb; rm -rf /tmp/.X*-lock', shell=True)
while make_displays.poll() is None:
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.
cmd = "export DISPLAY=:%s; pybot -C off -K off -r %s.report.html " \
"-l %s.log.html -o %s.output.xml -d " + args.reports_dir + " "
cmd = "export DISPLAY=:%s; pybot -C off -K off -d " + args.reports_dir + "/%s"
if args.resources_dir:
cmd += " -v resources_path:" + args.resources_dir + " "
# Start all threads with tests.
if args.tags_list and args.script_name:
cmd += " -i %s " + args.script_name + " 2>/dev/null"
# Start all threads with tests and ignore empty threads.
threads = []
for i, tag in enumerate(args.tags_list):
f_name = args.script_name.split('.')[0]
values = ("2%s" % i, f_name, f_name, f_name, tag)
print "Execute command:\n", cmd % values
xvfb = Xvfb()
xvfb.start()
values = (xvfb.vdisplay_num, i, tag)
threads.append(Popen(cmd % values, shell=True))
while len(threads) == args.processes_count:
wait_for_finished(threads)
@@ -167,5 +123,3 @@ else:
# Wait for all threads finish.
while len(threads) > 0:
wait_for_finished(threads)
print "\nFinished."
exit(0)