0

我试图在任意数量的硒网格节点上并行执行相同的测试套件。

  • 测试套件是使用 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>
    

我的问题:

  • 如何正确定义测试套件,以便将其安排在任意数量的正在运行的遥控器上?

谢谢!

4

1 回答 1

2

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

于 2011-09-14T14:25:16.897 回答