среда, 22 июля 2009 г.

Запуск гуи приложений из консольной сессии по шедулеру

По работе я запускаю автоматические тесты
Эта статья будет про то , как настроить автоматический запукс GUI тестов , написанных на IBM Rational Functional Tester в windows 2003 server используя стандартный windows scheduler. Почему не в линукс ?? Да потому что там запускается и проблем нет :)))
Собственно на входе имеется скрипт который запускает GUI тесты и который успешно запускается руками в активной rpd или vpn сессии
Но что делать если билд собирается каждую ночь и тесты должны запускаться автоматом? Правильно - поместить скрипт в шедулер.
Но тут есть один нюанс - все таски шедулера запускаются в терминальной сессии под названием 'console'. которая не имеет гуи. И при запуске вы получите ошибку вида "it's detected that rft test started in terminal session.It's not possible to run GUI tests in terminal session"
Решением проблемы являются следующие шаги.
1. Залогиниться в win2003 по rpd в консольную сессию (mstsc /v:myserver /console)И проверить командой qwinsta, что сессия в id=0 приаттачилась не к консоли , а к сессии ремот десктопа

qwinsta
SESSIONNAME USERNAME ID STATE TYPE DEVICE
>rdp-tcp#126 administrator 0 Active rdpwd
rdp-tcp 65536 Listen rdpwd
console 3 Conn wdcon2

2. Закрыть сессию , при этом не делая logoff
После этого команда
qwinsta /server:yourserver , выполненная например в другого сервера , должна показать , что у вас на данном сервере , есть сессия с id=0 , но при этом пользователь отсоединен.


qwinsta /server:myserver
SESSIONNAME USERNAME ID STATE TYPE DEVICE
administrator 0 Disc rdpwd
rdp-tcp 65536 Listen rdpwd
console 3 Conn wdcon
Сейчас у нас есть GUI сессия отдельно и консольная сессия , в которой ранится шедулер отдельно , для успешного рана тестов эти две сессия надо совместить ,
3. Делается это добавлением в файл который запускает ваши тесты слудующей команды:
cmd /C /Q tscon 0 /dest:console
Собственно команда приаттачивает сессию в id=0 , в которой крутится GUI к консольной сессии , в которой запускаются сервисы.Это можно сравнить с тем . если бы кто-то залогинился по vpn на сервер и оставил сессию активной.
А еще , ну просто наболело , какой идиот в виндовс придумал сделать разделителем строк в выводе таких команд как "net use" и "qwinsta" пробел ??? вывод из-за этого не парсится адекватно при наличии пробелов в ячейках таблицы , а также пустах значениях , которые просто заполняются пробелами


Собственно все , остается только радоваться что в линуксе таких проблем нет :)