我在TestNG中使用Ant Java任务运行Selenium单元测试,如下所示:
<java classpathref="runtime.classpath"
classname="org.testng.TestNG"
failonerror="false">
<arg value="-d" />
<arg value="${grid.location}/target/reports" />
<arg value="${lib.location}/testng.xml"/>
</java>
Run Code Online (Sandbox Code Playgroud)
runtime.classpath是一个包含的路径结构,<pathelement path="${basedir}/target/classes/" />我认为需要让TestNG知道要运行哪些类.
<path id="runtime.classpath">
...
<!-- Target classes -->
<pathelement path="${basedir}/target/classes/" />
</path>
Run Code Online (Sandbox Code Playgroud)
但是,我在日志中一直看到TestNG找到了0个适用的类.
我最终得到了一位同事的帮助,看来这是关键变化:
<path id="runtime.classpath">
...
<!-- path attribute changed to location -->
<pathelement location="${basedir}/target/classes/" />
</path>
Run Code Online (Sandbox Code Playgroud)
这也正确地引入了测试类:
<java classpathref="runtime.classpath"
classname="org.testng.TestNG"
failonerror="false">
<arg value="-d" />
<arg value="${grid.location}/target/reports" />
<arg value="${lib.location}/testng.xml"/>
<classpath>
<pathelement location="${basedir}/target/classes/" />
</classpath>
</java>
Run Code Online (Sandbox Code Playgroud)
path和location属性有什么区别?我已经看过编写一个简单的构建文件(特别是类似路径的结构部分),但是在那本手册中,它看起来比我location更具体path.事实并非如此,但我无法弄清楚原因.
看起来路径和位置之间的区别是许多条目与一个条目.位置是文件或目录,路径可以是列表.
从手册
location属性指定相对于项目基本目录的单个文件或目录(或绝对文件名),而path属性接受以冒号或分号分隔的位置列表.path属性旨在与预定义路径一起使用 - 在任何其他情况下,应首选具有位置属性的多个元素.
请注意,ant使用的JVM与java任务使用的JVM几乎没有关系.默认情况下,ant的环境与通过ant的java任务启动的环境不同.当你想要使用一个蚂蚁想要使用的不同JVM并使事情变得明确时,这实际上是有用的,有助于避免以后出现意外.
查看java任务的文档,特别是clonevm
clonevm:如果设置为true,则分叉Java虚拟机的所有系统属性和bootclasspath将与运行Ant的Java VM的相同.默认值为"false"(如果禁用fork,则忽略).自Ant 1.7起
| 归档时间: |
|
| 查看次数: |
16540 次 |
| 最近记录: |