Консольный режим Katalon Studio не работает при запуске cron в Linux

Я использую Katalon Studio ( https://www.katalon.com/) в консольном режиме ( https://docs.katalon.com/pages/viewpage.action?pageId=13697253) в Linux (Red Hat Enterprise Linux 7.4).) для автоматизации веб-тестов.

Я написал следующий скрипт для запуска такого теста:

$ echo /home/katalon/katalon.sh
#!/bin/bash

# Options de katalon
projectPath='/home/katalon/projets/Tiana/Tiana.prj'
testSuitePath='Test Suites/Test Tiana'
executionProfile='default'
browserType='Firefox (headless)'
reportFolder='/var/log/katalon'
reportFileName='report.log'
consoleLog='-consoleLog'    # Pour augmenter la verbosité

metadata='/home/katalon/config/.metadata/'
katalon_exe='/opt/katalon/katalon'

log='/var/log/katalon/katalon.log'
pid_fic='/opt/katalon/katalon.pid'

res=''

#Début du script
echo "" | tee -a "${log}"
echo "$(date --iso-8601='seconds') Début du script ${0}" | tee -a "${log}"

# Vérifier que la précédente exécution est bien terminée
if [[ -s "${pid_fic}" ]]; then
  pid=$(cat "${pid_fic}")
  echo "$(date --iso-8601='seconds') La précédente exécution de ${0} (PID = ${pid}) ne s'est pas terminée correctement" | tee -a "${log}"

  # Tuer le processus en cours ?
  kill -9 "${pid}"

  res="${?}"
  if [[ "${res}" ]]; then
    echo "$(date --iso-8601='seconds') Processus ${pid} tué" | tee -a "${log}"
  else
    echo "$(date --iso-8601='seconds') Impossible de tuer le processus ${pid}" | tee -a "${log}"
    exit 1
  fi
fi
echo "${$}" > "${pid_fic}"


# Supprimer l'affichage graphique
Xvfb :0 >& /dev/null &

res="${?}"
if [[ "${res}" ]]; then
  export DISPLAY=:0
  echo "$(date --iso-8601='seconds') Affichage graphique supprimé" | tee -a "${log}"
else
  echo "$(date --iso-8601='seconds') Impossible de supprimer l'affichage graphique" | tee -a "${log}"
  exit 3
fi


# Lancer de la suite de tests
"${katalon_exe}" -noSplash -runMode=console "${consoleLog}" -projectPath="${projectPath}" -retry=0 -testSuitePath="${testSuitePath}" -executionProfile="${executionProfile}" -browserType="${browserType}" -reportFolder="${reportFolder}" -reportFileName="${reportFileName}" | tee -a "${log}"

res="${?}"  # Manifestement inutile : Katalon ne renvoie pas de code erreur... :(
if [[ ! "${res}" ]] ; then
  echo "$(date --iso-8601='seconds') Erreur à l'exécution de Katalon : ${res}" | tee -a "${log}"
  exit 2
fi


# Supprimer le fichier de PID
rm "${pid_fic}"

res="${?}"
if [[ "${res}" ]]; then
  echo "$(date --iso-8601='seconds') Fichier ${pid_fic} supprimé" | tee -a "${log}"
else
  echo "$(date --iso-8601='seconds') Impossible de supprimer le fichier ${pid_fic}" | tee -a "${log}"
  exit 3
fi

# Fin du script
echo "$(date --iso-8601='seconds') Katalon s'est terminé correctement." | tee -a "${log}"
echo "$(date --iso-8601='seconds') Fin du script ${0}" | tee -a "${log}"
exit 0

Если я запускаю этот скрипт с правами root с su katalon /home/katalon/katalon.sh работает нормально.

Но если я запустлю это:

  • с помощью su --login katalon /home/katalon/katalon.sh
  • положив его в /etc/crontab.d
  • добавив строку в crontab пользователя katalon

Затем произойдет сбой со следующей трассировкой стека Java:

Request sent successfully.
!SESSION 2018-06-27 08:30:02.597 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.8.0_171
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments:  -runMode=console -projectPath=/home/katalon/projets/Tiana/Tiana.prj -retry=0 -testSuitePath=Test Suites/Test Tiana -executionProfile=default -browserType=Firefox (headless) -reportFolder=/var/log/katalon -reportFileName=report.log
Command-line arguments:  -os linux -ws gtk -arch x86_64 -data config -runMode=console -consoleLog -projectPath=/home/katalon/projets/Tiana/Tiana.prj -retry=0 -testSuitePath=Test Suites/Test Tiana -executionProfile=default -browserType=Firefox (headless) -reportFolder=/var/log/katalon -reportFileName=report.log

!ENTRY org.eclipse.core.resources 2 10035 2018-06-27 08:30:10.599
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
Starting Groovy-Eclipse compiler resolver.  Specified compiler level: unspecified
133 2.4.7.xx-201611170128-e46 = ACTIVE

!ENTRY org.eclipse.core.resources 4 2 2018-06-27 08:30:15.690
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.core.resources".
!STACK 0
java.lang.NullPointerException
        at org.codehaus.groovy.eclipse.core.compiler.CompilerUtils.getCompilerLevel(CompilerUtils.java:124)
        at org.codehaus.groovy.eclipse.core.compiler.CompilerCheckerParticipant.buildFinished(CompilerCheckerParticipant.java:98)
        at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:235)
        at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
        at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
        at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
        at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
        at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
        at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

!ENTRY org.eclipse.core.resources 4 75 2018-06-27 08:30:15.691
!MESSAGE Errors occurred during the build.
!SUBENTRY 1 org.eclipse.jdt.core 4 75 2018-06-27 08:30:15.692
!MESSAGE Errors running builder 'Java Builder' on project '%home%katalon%projets%Tiana%Tiana.prj'.
!STACK 0
java.lang.NullPointerException
        at org.codehaus.groovy.eclipse.core.compiler.CompilerUtils.getCompilerLevel(CompilerUtils.java:124)
        at org.codehaus.groovy.eclipse.core.compiler.CompilerCheckerParticipant.buildFinished(CompilerCheckerParticipant.java:98)
        at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:235)
        at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
        at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
        at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
        at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
        at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
        at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

После тщательного тестирования выясняется, что --login Опция - это то, что кажется причиной проблемы, так как это работает:

# su katalon
$ /home/katalon/katalon.sh

но это не удается

# su --login katalon
$ /home/katalon/katalon.sh

Я проверил переменные окружения как root, так и katalon, но единственные различия не должны иметь значения AFAIK ($PATH немного отличается, а $SHLVL - 1 или 2).

Мой вопрос: как я могу успешно запустить katalon.sh из /etc/crontab.d ?

PS: я задал этот вопрос на форуме Каталона здесь, но он довольно заброшен: https://forum.katalon.com/discussion/7597/katalon-studio-console-mode-fails-when-started-by-cron-on-linux


Что ж... Похоже, что исполняемый файл katalon завершается ошибкой, если он вызывается из домашнего каталога пользователя.

Я понятия не имею, ПОЧЕМУ... но мой katalon.sh скрипт теперь работает с /etc/cron.d/,

0 ответов

Другие вопросы по тегам