0

我的目标是在以下组合上并行运行测试用例,并为每个组合生成范围报告,总共 8 个组合

  1. Windows(Chrome、Firefox、IE)
  2. Linux(铬、火狐)
  3. Mac(Safari、Chrome、Firefox)

在网上搜索后想出了这个。这会并行<suite>运行所有标签,每个标签都代表一个操作系统和浏览器组合,它们再次并行运行测试类。每个测试类都有一个 RemoteWebDriver 实例。<test><test>

  1. 这个解决方案是正确的还是我需要做任何改变?
  2. 一旦测试类开始增加,复杂性就会增加我想从所有 8 个测试标签中添加/删除测试类。
  3. 如果我只想运行一个组合(操作系统+浏览器),我需要另一个 testng.xml 文件并编辑参数值吗?
  4. 如何获取每个组合的报告。由于所有测试都是并行和多线程运行的,如何跟踪每个测试?

测试Ng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">
    <test name="Windows_Chrome" parallel="classes" thread-count="3">
        <parameter name="os" value="windows" />
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.mag.SeleniumGrid.Test_001" />
            <class name="com.mag.SeleniumGrid.Test_002" />
            <class name="com.mag.SeleniumGrid.Test_00N" />
            <!--Each class create RemoteWebDriver instance based on parameters-->
        </classes>
    </test>
    <!-- ..... all 8 combinations -->
    
    <test name="Linux_Chrome" parallel="classes" thread-count="3">
        <parameter name="os" value="linux" />
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.mag.SeleniumGrid.Test_001" />
            <class name="com.mag.SeleniumGrid.Test_002" />
            <class name="com.mag.SeleniumGrid.Test_00N" />
        </classes>
    </test>
</suite> 
4

1 回答 1

1

不能说我已经使用了这种方法,所以很抱歉,但我使用 maven 运行测试并发现它工作正常。您可以通过执行以下操作将测试添加到组:

@Test(groups = {"WindowsChrome", "LinuxChrome"})
public class Test123 {

您可以使用 Maven 运行测试,例如:

mvn test -Dgroups=WindowsChrome

如果您想在管道中运行它,那么我会检查代码并为每个环境克隆它。在管道中,您可以添加每个环境将使用的 .env 文件,其中包含“OS_TYPE”和“BROWSER_TYPE”等变量。现在你可以这样做:

stage('Windows Chrome Tests') {
     steps {
          bat "mvn test -f WindowsChrome/pom.xml -Dgroups=WindowsChrome"
     }
}
stage('Linux Chrome Tests') {
     steps {
          bat "mvn test -f LinuxChrome/pom.xml -Dgroups=LinuxChrome"
     }
}

为了使日志对并行测试有意义,您需要将 ThreadLocal 与 Logger 一起使用,这将为每个线程创建一个唯一的实例。确保在完成后将其删除,否则使用同一线程的后续测试将继续使用同一实例。我会将操作系统/浏览器放在日志文件名中。

于 2020-11-11T21:41:16.427 回答