ich bastle an einen kleinen Testprogramm, was auf Basis einer gegebenen TestSuite einen Test startet und steuert. Ein TestCase definiert dabei eine Reihe von Operationen über die einen VM gesteuert wird. Dazu habe ich ne kleine Klasse gebastelt:
Code: Alles auswählen
class TestScheduler(object):
def __init__(self, config):
"""
Creates a test scheduler instance. The param config is a instance of
the class configreader.
"""
self._config = config
self.scheduled_jobs = 0
self._scheduler = Scheduler()
atexit.register(lambda: self._scheduler.shutdown(wait=False))
self._is_running = False
def create_schedule(self, test_case):
if not self._is_running :
self.start()
command = "VBoxManage controlvm %s setlinkstate1 %s"
now = datetime.datetime.now()
print "created jobs ..."
for operation in test_case.operations:
#create the task
job_command = command % (operation.vm_name, operation.link_state)
job_start_time = now + datetime.timedelta(minutes = int(operation.time))
self._scheduler.add_date_job(self.job, job_start_time, [job_command])
self.scheduled_jobs+=1
self._scheduler.print_jobs()
def job(self, job_command):
print "\nexecute: " + job_command
self.scheduled_jobs-=1
....
Code: Alles auswählen
for test_case in self._test_suite.test_cases:
tscheduler.create_schedule(test_case);
#run test_case
while tscheduler.remaining_jobs():
sleep(self._config.getfloat("General", "TEST_SUITE_VM_CONTROL_TIMEOUT"))
sys.stdout.write('.'); sys.stdout.flush()
tscheduler.stop()
self.collect_measurements()
number_of_test_cases-=1
Code: Alles auswählen
start scheduler ...
created jobs ...
Jobstore default:
TestScheduler.job (trigger: date[2013-12-29 14:14:01.451742], next run at: 2013-12-29 14:14:01.451742)
TestScheduler.job (trigger: date[2013-12-29 14:15:01.451742], next run at: 2013-12-29 14:15:01.451742)
TestScheduler.job (trigger: date[2013-12-29 14:16:01.451742], next run at: 2013-12-29 14:16:01.451742)
TestScheduler.job (trigger: date[2013-12-29 14:16:01.451742], next run at: 2013-12-29 14:16:01.451742)
.....
execute: VBoxManage controlvm host1 setlinkstate1 off
......
execute: VBoxManage controlvm host2 setlinkstate1 off
......
execute: VBoxManage controlvm host1 setlinkstate1 on
execute: VBoxManage controlvm host2 setlinkstate1 on
.
stop scheduler ...
Collecting measurements from all vms based on JGroups
Reset vms ...
Stoping the machines ...
Starting the machines ...
start scheduler ...
created jobs ...
Jobstore default:
TestScheduler.job (trigger: date[2013-12-29 14:17:11.826853], next run at: 2013-12-29 14:17:11.826853)
TestScheduler.job (trigger: date[2013-12-29 14:18:11.826853], next run at: 2013-12-29 14:18:11.826853)
TestScheduler.job (trigger: date[2013-12-29 14:19:11.826853], next run at: 2013-12-29 14:19:11.826853)
TestScheduler.job (trigger: date[2013-12-29 14:20:11.826853], next run at: 2013-12-29 14:20:11.826853)
TestScheduler.job (trigger: date[2013-12-29 14:21:11.826853], next run at: 2013-12-29 14:21:11.826853)
TestScheduler.job (trigger: date[2013-12-29 14:22:11.826853], next run at: 2013-12-29 14:22:11.826853)
.....Exception in thread APScheduler:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 811, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 764, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/site-packages/apscheduler/scheduler.py", line 581, in _main_loop
next_wakeup_time = self._process_jobs(now)
File "/usr/lib/python2.7/site-packages/apscheduler/scheduler.py", line 547, in _process_jobs
self._threadpool.submit(self._run_job, job, run_times)
File "/usr/lib/python2.7/site-packages/apscheduler/threadpool.py", line 102, in submit
raise RuntimeError('Cannot schedule new tasks after shutdown')
RuntimeError: Cannot schedule new tasks after shutdown
................................................^C
stop scheduler ...
Code: Alles auswählen
if not self._is_running :
self.start()
.....
def start(self):
self._scheduler.start()
self._is_running = True
Jemand nen Tip? Ich wäre dankbar.