【问题标题】:Auto-Starting Selenium RC on Windows XP在 Windows XP 上自动启动 Selenium RC
【发布时间】:2010-11-19 02:49:47
【问题描述】:

您好,

我已经使用 Selenium RC 和 Java 完成了一套测试的开发,我正在尝试将它们与构建系统集成,以便我可以在一夜之间运行测试。流程是这样运行的:

  1. Cruisecontrol 进行完整构建
  2. Cruisecontrol 服务器上的 cron 作业将构建安装在特定的测试集群上。
  3. 构建安装完成后,网页会更新安装结果(通过/失败)。
  4. 在客户端计算机 (Windows XP) 上运行的应用程序 (trigger.jar) 将监视网页。当它检测到安装成功时,它将启动 Selenium 测试:java -jar overnightTests.jar
  5. 触发器应用程序没有必要进行任何日志记录或捕获测试套件的退出代码。所有这些东西都由测试套件处理。

我已经写了所有的片段,但是触发器给我带来了麻烦。

这是我的代码:

try {
    String cmd = "java";
    String jArg = "-jar";
    String program = "overnightTests.jar";
    String aptUrl = "https://apt.qa6.spockmate.com/apt/" ;
    String campaignManagerURL = "http://app01.dev02.sn.spockmate.com:8080/cm/" ;
    String contractDatafile = "C:\\testdata\\MasterDataForSelenium.xls" ;
    String adMapDataDir = "C:\\testdata\\AdMaps\\" ;
    String creativeAssetsFile =  "C:\\testdata\\CreativeAssets\\CreativeAssetsForSeleniumTests.csv";
    String adminURL = "https://admin.qa6.spockmate.com/admin/"; 

    String [] commands = new String[]{cmd, jArg, program, aptUrl, campaignManagerURL, contractDatafile, adMapDataDir, creativeAssetsFile, adminURL};

    Process child = Runtime.getRuntime().exec(commands);

} catch (IOException e) {
    System.out.println("Exception thrown while calling Runtime:");
    System.out.println(e.getCause());
    e.printStackTrace();
}

当“Runtime.getRuntime().exec(commands)”行执行时,trigger.jar 挂起。无论我是从 DOS 命令行还是从 Eclipse 运行应用程序都没有关系。这是奇怪的部分:一旦我终止了 trigger.jar 应用程序(通过 ctrl-c 或 Eclipse 的停止按钮),我试图触发的 nightTests.jar 应用程序就会启动。每次我运行应用程序时都会发生这种情况。就好像不是启动 night_tests.jar 而是将工具放入队列中以“下一个”启动。我试过分配'Runtime.getRuntime().exec(commands);'到 Process 变量并在 Process 上执行 wait() ,我尝试完全忽略返回。结果总是一样的。

我的问题是:

  1. 我的代码缺少什么,可以让它在一个单独的进程中启动 nightTests.jar 并忘记它,让 Selenium 继续它的快乐方式并做它的事情?
  2. 对于以前遇到过此问题的任何人,是否有更简单、更清洁、更简单的解决方案?我对触发信号的格式以及它的发送和接收方式有很大的控制权,我的主要要求是解决方案是健壮的。任何行之有效且不过分繁琐或复杂的事情都值得一试。

任何帮助或建议都会让我非常高兴,并且更有可能完成这个项目并在月底去度假。

【问题讨论】:

    标签: java automation selenium build-automation automated-tests


    【解决方案1】:

    我不相信您在安装完成后触发 Selenium 测试套件的设置?

    没有在 CruiseControl 中创建另一个每晚触发的项目的原因是什么? 假设你的核心项目是XXX,那么我会添加XXX_nightly 测试。

    此外,使用一些智能<veto>,只有在核心项目处于正确状态时,您才能触发夜间测试。此设置将允许您手动强制“夜间”测试,即使在工作时间也是如此。

    【讨论】:

      【解决方案2】:

      几个建议:

      • 如果可以,请使用 Ant,我发现它对于调用 Java 进程非常可靠,并且您可以控制诸如“spawn”和“fork”之类的东西(搜索“ant java task”以获得更多详细信息)。你可以在这里找到一个例子,看看“jmeter-cycle-heapdump”目标(第159行),也看看Ant“并行”/“顺序”元素的用法,我想这会给你一些关于您正在尝试的测试自动化:) --http://code.google.com/p/perfbench/source/browse/trunk/perfbench/build.xml
      • 我会尝试将所有这些命令放入一个普通的批处理文件中并尝试以某种方式调用它,这可能会更简单,而且您不必担心 java 进程调用另一个 java 进程,这似乎是问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-07
        • 2012-04-28
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 2011-01-07
        相关资源
        最近更新 更多