2

我正在使用 Ant 1.7 + Junit 4 + Selenium Grid 2 进行功能测试。

在 Junit 4 中,我使用“@RunWith (Suite.class)”来运行多个类。代码在这里:

package com.black;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({TestGrid.class,TestGrid2.class})
public class TestAll{
}

可以看到,这个TestAll.java 调用了两个类——TestGrid.class 和TestGrid2.class。

TestGrid.class 在一台 Windows 7 (10.1.3.50) 上运行,TestGrid2.class 在另一台 Windows 7 机器 (10.1.3.77) 上运行。

代码在这里:

------------TestGrid.class-------------

package com.blackline;

import static org.junit.Assert.assertEquals;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class TestGrid {
    private WebDriver driver;
    private String baseUrl;
    int sleepTime = 0;
    @Before
    public void setUp() throws Exception {
        System.out.println("TestGrid.java setUp.");
        //Use Firefox
        DesiredCapabilities capability = DesiredCapabilities.firefox();
        driver = new RemoteWebDriver(new URL("http://10.1.3.50:5555/wd/hub"), capability);


        baseUrl = "http://10.1.3.12/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        Capabilities actualCapabilities = ((RemoteWebDriver)driver).getCapabilities(); 
        System.out.println(actualCapabilities); 
    }

    @Test
    public void test01()
    {
        System.out.println(1);
    }
    @Test
    public void test02()
    {
        System.out.println(2);
        assertEquals("a", "b");
    }


  @After
  public void tearDown() throws Exception {
  }

}

----------TestGrid2.java-------------

package com.xbosoft.blackline;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.Select;

public class TestGrid2 {
    private WebDriver driver;
    private String baseUrl;
    int sleepTime = 0;
    @Before
    public void setUp() throws Exception {
        System.out.println("TestGrid2.java setUp.");
        //Use Firefox
        DesiredCapabilities capability = DesiredCapabilities.firefox();
        driver = new RemoteWebDriver(new URL("http://10.1.3.77:5555/wd/hub"), capability);


        baseUrl = "http://10.1.3.12/";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        Capabilities actualCapabilities = ((RemoteWebDriver)driver).getCapabilities(); 
        System.out.println(actualCapabilities); 
    }

     @Test(timeout=10000)
    public void testSelenium() throws InterruptedException
    {
        driver.get("http://seleniumhq.org/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/projects/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/download/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/docs/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/support/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/");
        Thread.sleep(sleepTime);
        driver.get("http://seleniumhq.org/projects/");
        Thread.sleep(sleepTime);

    }

    @After
    public void tearDown() throws Exception {
    }
}

Ant build.xml中的junit和junitReport部分如下

====================

<target name="junit" depends="compile">
    <junit printsummary="yes" fork="true" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
        <classpath>
            <pathelement path="${classes.dir}" />
            <fileset dir="${lib.dir}">
                <include name="*.jar" />
            </fileset>
        </classpath>
        <formatter type="xml" />
        <batchtest todir="${report.dir}">
            <fileset dir="${classes.dir}">
                <include name="**/TestAll.class" />
            </fileset>
        </batchtest>
    </junit>
</target>

<target name="executeRemote">
    <sshexec host="10.1.3.50"
        username="sshuser"
        password="qqqqq"
        trust="true"
        command="D:\bat.bat"/>
</target>

<target name="junitReport" depends="junit">

    <junitreport todir="report">
        <fileset dir="report">
            <include name="TEST-*.xml" />
        </fileset>
        <report styledir="reportstyle" format="frames" todir="report" />
    </junitreport>
    <fail if="tests.failed" />

</target>

===========================

在导出的 HTML 报告中,对于 Hostname 字段,它始终显示为 TestAll.java 所在机器的名称。但它无法获取实际运行脚本的机器的名称。

我不能发图。是这里。 http://i.stack.imgur.com/d6ZL4.png

我检查了 Ant 导出的 TESTS-TestSuites.xml。在这个文件中,它没有远程机器的主机名。

有没有办法将远程机器的主机名输出到这个 TESTS-TestSuites.xml 文件中,然后我可以使用 XSLT 将它们显示到 HTML 报告中?

我想我必须在某处更改 Ant 的源代码?

谢谢!

4

0 回答 0