Ant 如何在Jenkins CI中集成SWTBot测试?

Ant 如何在Jenkins CI中集成SWTBot测试?,ant,swt,jenkins,swtbot,Ant,Swt,Jenkins,Swtbot,我有一个SWT应用程序(不是基于EclipseRCP的),目前我使用SWTBot测试它。这在从Eclipse运行测试时工作良好。我使用ant作为构建系统 在Jenkins上,测试失败-抛出异常 [junit] Testcase: testPasswordChange(de.rssit.kgepc.swtbot.ChangePasswordTest): Caused an ERROR [junit] null [junit] java.lang.ExceptionInInitial

我有一个SWT应用程序(不是基于EclipseRCP的),目前我使用SWTBot测试它。这在从Eclipse运行测试时工作良好。我使用ant作为构建系统

在Jenkins上,测试失败-抛出异常

[junit] Testcase: testPasswordChange(de.rssit.kgepc.swtbot.ChangePasswordTest): Caused an ERROR
    [junit] null
    [junit] java.lang.ExceptionInInitializerError
    [junit]     at org.eclipse.swtbot.swt.finder.keyboard.Keyboard.typeCharacter(Keyboard.java:100)
    [junit]     at org.eclipse.swtbot.swt.finder.keyboard.Keyboard.typeText(Keyboard.java:89)
    [junit]     at org.eclipse.swtbot.swt.finder.widgets.SWTBotText.typeText(SWTBotText.java:92)
    [junit]     at org.eclipse.swtbot.swt.finder.widgets.SWTBotText.typeText(SWTBotText.java:78)
    [junit]     at de.foo.swtbot.pages.PasswordDialogPage.setText(PasswordDialogPage.java:70)
    [junit]     at de.foo.swtbot.pages.PasswordDialogPage.setOldPassword(PasswordDialogPage.java:30)
    [junit]     at de.foo.swtbot.ChangePasswordTest.testPasswordChange(ChangePasswordTest.java:43)
    [junit]     at org.eclipse.swtbot.swt.finder.keyboard.KeyboardLayout.getKeyboardLayout(KeyboardLayout.java:89)
    [junit]     at org.eclipse.swtbot.swt.finder.keyboard.KeyboardLayout.getDefaultKeyboardLayout(KeyboardLayout.java:75)
    [junit]     at org.eclipse.swtbot.swt.finder.keyboard.Keystrokes.<clinit>(Keystrokes.java:110)

关于java.lang.Exception初始化错误

我注意到有/已经有Eclipse错误与缺少DE_DE locale的键盘布局有关。我建议您检查运行junit测试的进程的区域设置。如果您将locale设置为en_US,是否仍会出现问题

除了为服务器进程设置区域设置(例如LC_ALL环境变量?),您还可以在junit任务中使用显式区域设置,例如

<junit fork="yes">
  <jvmarg value="-Duser.language=en"/>
  <jvmarg value="-Duser.region=US"/>

关于org.eclipse.swt.swt异常:小部件已被释放


也许这暴露了UI代码中的一个真正错误,但我怀疑您需要查看单元测试。它们是无状态的,还是依赖某个执行顺序可靠地工作?如果测试的执行顺序与您预期的不同,则可能会出现此错误。

关于java.lang.ExceptionInInitializerError

我注意到有/已经有Eclipse错误与缺少DE_DE locale的键盘布局有关。我建议您检查运行junit测试的进程的区域设置。如果您将locale设置为en_US,是否仍会出现问题

除了为服务器进程设置区域设置(例如LC_ALL环境变量?),您还可以在junit任务中使用显式区域设置,例如

<junit fork="yes">
  <jvmarg value="-Duser.language=en"/>
  <jvmarg value="-Duser.region=US"/>

关于org.eclipse.swt.swt异常:小部件已被释放


也许这暴露了UI代码中的一个真正错误,但我怀疑您需要查看单元测试。它们是无状态的,还是依赖某个执行顺序可靠地工作?如果测试的执行顺序与您预期的不同,则可能会出现此错误。

您运行Eclipse的操作系统是什么?Jenkins作业运行在什么操作系统上?詹金斯制造机是无头运行的吗?还有更多关于stacktrace的内容吗?EclipseOS:WinXP;詹金斯奴隶操作系统:WinXP;(詹金斯)Master@linux)Jenkins正在以服务(headless)的方式运行,在这个问题上没有更多的StackStras,这一点已经用sudocode的答案解决了。这个新问题可以在问题的编辑版本中看到,您在什么操作系统上运行Eclipse?Jenkins作业运行在什么操作系统上?詹金斯制造机是无头运行的吗?还有更多关于stacktrace的内容吗?EclipseOS:WinXP;詹金斯奴隶操作系统:WinXP;(詹金斯)Master@linux)Jenkins正在以服务(headless)的方式运行,在这个问题上没有更多的StackStras,这一点已经用sudocode的答案解决了。新问题可以在编辑后的问题中看到。这修复了键盘问题,但带来了另一个错误,只发生在@jenkins。你对解决这个问题还有其他想法吗?除非你给我一个线索;)我建议你用新的细节更新你的问题。它们在每台开发人员机器上都能正常工作,并且是独立的。我接受了这个答案,因为它有助于解决问题。但主要问题尚未解决。看起来您必须以普通用户(包括X服务器)或Windows用户登录的身份运行jenkins:(这只是一个基于“需要X服务器”的猜测-您是否尝试过使用“java.awt.headless=true”运行JVM?如果没有此选项,它可能会很快失败,但值得一试。您好,这解决了键盘问题,但带来了另一个错误,只发生在@jenkins。您对解决此问题有其他想法吗?除非您提供线索;)我建议你用新的细节更新你的问题。它们在每台开发人员机器上都能正常工作,并且是独立的。我接受了这个答案,因为它有助于解决问题。但主要问题尚未解决。看起来您必须以普通用户(包括X服务器)或Windows用户登录的身份运行jenkins:(这只是一个基于“需要X服务器”的猜测——您是否尝试过使用“java.awt.headless=true”运行JVM?如果没有这个,它可能会失败得更快,但值得一试。