【问题标题】:Selenium Grid multi browser and multi platform right approachSelenium Grid 多浏览器和多平台正确做法
【发布时间】:2021-02-22 02:57:34
【问题描述】:

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

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

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

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

TestNg.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> 

【问题讨论】:

    标签: java selenium testng selenium-grid testng.xml


    【解决方案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 一起使用,这将为每个线程创建一个唯一的实例。确保在完成后将其删除,否则使用同一线程的后续测试将继续使用同一实例。我会将操作系统/浏览器放在日志文件名中。

    【讨论】:

    • 我尝试了与您的方法类似的方法,但无法在网上看到任何答案来确认每个人都在使用网格。我尝试的是创建 1)jenkins 中的主药膏 2)像你一样创建管道作业,它将在所有 8 个组合中并行运行 3)Testng 将负责在每个组合中并行运行测试用例。我从未在这种方法中使用网格。 Jenkins 会负责将项目克隆到特定环境并在本地运行测试。运行后将归档该组合的报告和日志。
    • 抱歉,到底是什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2021-04-14
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多