在Windows XP上自动启动Selenium RC

时间:2009-08-12 21:07:32

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

问候,

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

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

    这是我的代码:

    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的停止按钮),我试图触发的overnightTests.jar应用程序将启动。每次运行应用程序时都会发生这种情况。这就好像不是启动了overnight_tests.jar,而是将工具放入队列中以“下一步”启动。我试过分配'Runtime.getRuntime()。exec(commands);'到Process变量并在Process上执行wait()并尝试完全忽略返回。结果总是一样的。

    我的问题是:

    1. 我的代码遗漏了什么,它允许它在一个单独的进程中启动LaterTests.jar并忘记它,允许Selenium以它的快乐方式开始并做它的事情?
    2. 对于之前遇到此问题的人来说,是否有更简单,更清洁,更简洁的解决方案?我对触发信号的格式及其发送和接收方式有很大的控制,我的主要要求是解决方案是健壮的。任何有效且不过于复杂或复杂的东西都值得一试。
    3. 任何帮助或建议都会让我感到非常高兴,并且更有可能让我完成这个项目并在月底去度假。

2 个答案:

答案 0 :(得分:1)

一些建议:

  • 如果可以,请使用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进程,这似乎是问题< / LI>

答案 1 :(得分:1)

安装完成后,我对您启动Selenium测试套件的设置并不相信?

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

此外,通过一些智能<veto>,只有在核心项目处于正确状态时才能触发夜间测试。此设置允许您即使在营业时间内手动强制执行“夜间”测试。