Selenium:使用网格并行运行测试套件

时间:2011-09-12 10:10:02

标签: selenium selenium-rc selenium-grid

我试图在任意数量的selenium-grid节点上并行执行相同的测试套件。

  • 测试套件是使用selenium IDE创建的,并使用批处理转换器
  • 导出为testng
  • 想法是创建一次测试套件,然后启动任意数量的并行运行该特定套件的节点
  • 现在,我有1个集线器运行+ 2个连接到该集线器的遥控器
  • 我的testng.xml看起来像这样

    <suite name="mysuite1" verbose="20" annotations="JDK" parallel="tests" thread-count="20" >
    
    <parameter name="selenium.host" value="localhost"></parameter>
    <parameter name="selenium.port" value="4444"></parameter>
    <parameter name="selenium.browser" value="*firefox"></parameter>
    <parameter name="selenium.restartSession" value="false"></parameter>
    
    
    <test name="mytest1" preserve-order="true">
        <parameter name="selenium.port" value="5557"></parameter> 
        <parameter name="selenium.browser" value="*firefox"></parameter> 
        <parameter name="selenium.url" value="http://localhost:8080"></parameter> 
        <classes>
            <class name="my.testsuite1" />
            <class name="my.testsuite2" />
        </classes>
    </test>
    

  • 我在build.xml中使用的目标如下所示

    <target name="run-parallel" depends="compile" description="Run-Parallel">
    <echo>${host}</echo>
    <java classpathref="runtime.classpath" classname="org.testng.TestNG" failonerror="true">
        <sysproperty key="java.security.policy" file="lib/testng.policy"/>
        <sysproperty key="webSite" value="${webSite}" />
        <sysproperty key="seleniumHost" value="${host}" />
        <sysproperty key="seleniumPort" value="${port}" />
        <sysproperty key="browser" value="${browser}" />
    
        <arg value="-d" />
        <arg value="${basedir}/target/reports" />
        <arg value="-suitename" />
        <arg value="suite1" />
    
        <arg value="-parallel"/>
        <arg value="tests"/>
        <arg value="-threadcount"/>
        <arg value="20"/>
    
        <arg value="testng.xml"/>
    </java>
    

我的问题:

  • 当我执行上面的测试套件时,只有一个遥控器执行测试,而我的第二个遥控器仍处于空闲状态。
  • 我知道我目前使用“selenium.port”直接处理遥控器,但我正在寻找一种方法来避免这种将测试分配给遥控器的严格方式
  • 当我添加其他元素时,元素(my.testsuite1-4)中列出的所有类都是以随机顺序执行的。

    <test name="mytest2" preserve-order="true">
    <parameter name="selenium.port" value="5558"></parameter> 
    <parameter name="selenium.browser" value="*firefox"></parameter> 
    <parameter name="selenium.url" value="http://localhost:8080"></parameter> 
    <classes>
        <class name="my.testsuite3" />
        <class name="my.testsuite4" />
    </classes>
    

我的问题:

  • 如何正确定义测试套件,以便在任意数量的正在运行的遥控器上进行调度?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的所有测试都应该访问Selenium Grid中心。集线器负责根据请求的功能调度节点。一旦并行运行测试,就会失去定义执行顺序的能力。每个测试都应该是隔离的。这包括您在后端可能需要的任何数据,例如数据库修改。