Javac用Selenium为Jenkins编译一个完整的项目

时间:2014-08-12 18:19:04

标签: java selenium ant jenkins javac

背景:我正在使用jUnit来运行Selenium测试。我试图将我的测试设置为每晚与Jenkins一起运行。我能够每晚提取我的测试/源文件,我可以构建和安装我的产品。我正在尝试使用" Execute Shell"来构建java测试文件。关于linux vm的Jenkins选项。

我有一个Java项目,它包含一个共享的Utility项目,selenium jar,以及我的源代码和测试文件。我可以毫无问题地在NetBeans中运行selenium测试。

代码的布局类似于:

公用事业项目:

src
-> utilities
    -> UtilityFunctions.java
    -> Logger.java

我的项目

misc
-> XmlConfigFileForTest.xml
-> PasswordFileForTest.txt    
src
-> objects
    -> User.java
    -> ConfigFile.java
test
-> coreTest
    -> coreTest1.java
    -> coreTest2.java
-> setupTest
    -> setupTest1.java
    -> setupTest2.java
-> testSuites
    -> runAllSetupTests.java

我无法弄清楚如何运行javac,以便生成一个可用于运行测试的jar。

我尝试过:

使用How to set environment variables for javac to be able to find imported packages?我能够包含我的硒罐。

编译完代码后,我相信我可以运行像How to run JUnit test cases from the command line这样的测试。

我最新的javac是:

javac -classpath selenium-java.jar:selenium-server-standalone.jar -sourcepath code -d build/classes code/test/testSuites/runAllSetupTests.java

目前这是失败的,因为它找不到包'对象'。我非常有限的理解是,尝试javac文件应该导致它拉入所有包含的文件。

问题1:有没有办法在这样的结构化项目中指出javac(或其他标准程序)并从中获取jar? 问题2:有更好的方法吗?我正在严格执行此操作,每晚与詹金斯一起进行硒测试。我与使用javac编译它的想法没有结合。

编辑:

目前正在尝试直接使用Ant代替javac。添加了额外输入的标签。

3 个答案:

答案 0 :(得分:0)

我能想到的一件事是你可以继续使用javac来做到这一点,但不是在命令行中添加.jar依赖项,如selenium jar等,你可以有一个.sh文件来设置环境变量说:

CLASSPATH=:./Number1.jar:./Number2.jar:./Number3.jar ...
export CLASSPATH

以下列方式添加所有相关的jar并在运行任何javac命令之前调用此.sh文件。

说,

setpath.sh 
javac -classpath <mention only .class required from the project to commplie this file> JavaFile1.java
javac -classpath <mention only .class required from the project to commplie this file> JavaFile2.java
javac -classpath <mention only .class required from the project to commplie this file> JavaFile3.java ...
.
.

javac -classpath <mention only .class required from the project to commplie this file> MainJavaFile.java

Java -classpath <all class file required> MainJavaFile

这在我的项目中对我来说很好,并且不需要转换为可执行jar。只需要弄清楚依赖的.class文件。

希望这有帮助!

答案 1 :(得分:0)

在没有涉及很多项目特定细节的情况下,我研究并使用ant来编译我的项目。最后,没有必要一直到JAR。 Ant制作一个容易的罐子,它也完成了。创建的jar不是可执行的,因为项目存在运行selenium,因此没有真正的“main”可以执行。

我没有使用Warman的答案,因为我可以假设项目会增长,我不想在开发过程中有一步来更新每个新文件的测试版本。

我将这两个项目作为单个项目导入IntelliJ,并重新构建了生成的代码,以便我可以将正确的目录标记为代码根目录和测试根目录。我还添加了selenium服务器和java jars作为项目的一部分(而不是我框中其他地方存在的库),以便IntelliJ能够在编译时使用它。

然后我使用IntelliJ的Generate Ant Build来创建默认脚本。这在几天的时间内进行了调整,以排除/包含需要使用的更具体的文件并使用Jenkins slave的环境。

.....

对于将来发现此问题的任何人:研究Ant并手动创建脚本。结合两个项目的单个结果ant脚本,编译,jar和运行junit测试是~250行,并且可以由真正了解ant的人减少。

祝你好运。

答案 2 :(得分:0)

我正在研究同样的问题:)

这个程序对我有用: 创建一个新的main方法,通过eclipse创建jar文件direclty,当你有文件时,你可以通过cron job安排它。

这肯定有用。