среда, 8 декабря 2010 г.

Selenium RC + Firefox + crond

Некоторое время назад потребовалось обеспечить бесперебойность работы selenium rc на одном из linux-серверов с установленной X-window.
До этого RC вручную запускался вручную либо непосредственно на сервере (DISPLAY :0) либо вручную же через vnc. После перезагрузки сервера или из-за пока неустановленных редких сбоев в самом RC процесс автоматического тестирования нарушался. Для решения проблемы было решено добавить запуск Selenium RC в cron.
В crontab была добавлена соответствующая строчка, запускающая RC-сервер. В этот момент не было учтено , что firefox оконное приложение и требует возможности работать на конкретном дисплее =) Соответственно по крону RC-сервер стартовать не мог. Вернее сам-то сервер стартовал, но запустить X-овое приложение (firefox) без дисплея уже не мог.
Возник вопрос о том, о каком вообще дисплее может идти речь, если приложение запускается в ситуации отсутствия каких-либо X-сессий? На некоторое (короткое) время возможность запуска X-программ из под cron была поставлена под сомнение, но довольно быстро было найдено решение.
В описанной ситуации можно использовать утилиту Xvfb, которая позволяет совершать графические операции в памяти и запускать "иксовые" приложения на виртуальных дисплеях.
Ниже привожу последовательность команд, решившая мою проблему:

Xvfb :1
export DISPLAY=:1
java -jar selenium-server.jar

Таким образом, если SeleniumRC будет запущен из-под cron описанным образом , то запускаемый им firefox будет запускаться на дисплее :1 и послушно выполнять все команды автотеста, с которого при желании можно даже снять скриншоты)

Надеюсь, данная информация кому-нибудь поможет и сэкономит время.

3 комментария:

  1. А чем хуже было:
    export DISPLAY=:0
    java -jar selenium-server.jar
    ?
    Ну кроме того, что оно может мельтишить окошками, если 0 дисплей - рабочий.

    ОтветитьУдалить
  2. Это тоже пробовалось и это не работает ( в статье об этом не стал писать, но подобный вопрос предвидел)...

    В описанной ситуации доступа к дисплею нет и при запуске firefox сервером , запущенным кроном, будет "ругань" : cannot open display :0

    Допускаю, что это сработало бы, если бы активен рабочий дисплей :0 , то есть если бы была бы соответствующая авторизованная X-сессия. Но наличие такой сессии в момент работы автотестов никто не гарантирует )

    Впрочем, можете попробовать сами.

    ОтветитьУдалить