簡體   English   中英

TestNG與硒並行執行

[英]TestNG Parallel execution with selenium

如果我需要同時在兩個不同的瀏覽器上運行相同的一種方法,那我將如何實現呢? 例如:

public class AppTest2{

@parameters("browser")
@Test(dataProvider="loginData")
public void login(String userName , String password, String param){
  if(param.equals("firefox"){
         //do something
    }
  if(param.equals("chrome"){
        //do something else
    }
 }

}

在我的testng.xml文件中包含:

    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name ="My sutie" parallel = "methods",  thread-count="5">
   <parameter name="browser"  value="firefox"/> 
   <test name ="My Test1">
     <classes>
        <class name="mq.demo.selenium.AppTest2"/>
     </classes>
    </test>
    </suite>

因此,我的目標是使用兩個不同的線程在兩個不同的瀏覽器中同時運行登錄方法。

誰能幫忙?

謝謝

您可以考慮將以下內容作為可能的解決方案

package com.rationaleemotions.stackoverflow;

import org.testng.IAlterSuiteListener;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.collections.Maps;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class MultiBrowserSample {

    @Test
    @Parameters("browser")
    public void testMethod(String browser) {
        System.err.println("Browser : " + browser + " on Thread [" + Thread.currentThread().getId() + "]");
    }

    public static class MySuiteAlterer implements IAlterSuiteListener {

        @Override
        public void alter(List<XmlSuite> suites) {
            XmlSuite suite = suites.get(0);
            //Check if there was a parameter named "browserFlavors" defined at the suite
            String browserFlavors = suite.getParameter("browserFlavors");
            if (browserFlavors == null || browserFlavors.trim().isEmpty()) {
                //If no such parameter was found, then Try querying the JVM arguments to see if it contains
                //value for it. Just to ensure we don't end up in a situation wherein there's no JVM also provided
                //Lets add a default value for the JVM argument which in our case is "firefox"
                browserFlavors = System.getProperty("browserFlavors", "firefox");
            }
            String[] browsers = browserFlavors.split(",");
            List<XmlTest> xmlTests = new ArrayList<>();
            for (String browser : browsers) {
                XmlTest xmlTest = new XmlTest(suite);
                xmlTest.setName(browser + "_test");
                Map<String, String> parameters = Maps.newHashMap();
                parameters.put("browser", browser);
                xmlTest.setParameters(parameters);
                XmlClass xmlClass = new XmlClass();
                xmlClass.setName(MultiBrowserSample.class.getCanonicalName());
                xmlTest.getClasses().add(xmlClass);
                xmlTests.add(xmlTest);
            }
            suite.setTests(xmlTests);
        }
    }
}

套件xml文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="tests" verbose="2">
    <listeners>
        <listener class-name="com.rationaleemotions.stackoverflow.MultiBrowserSample$MySuiteAlterer"/>
    </listeners>
    <!--
    If the below line gets uncommented, then 3 <test> tags will be formed one for each browser flavor.
    Since its now commented, you will have to provide a value for it via the JVM argument 
    -DbrowserFlavors=firefox,chrome,ie (or) the system will default to just working with firefox
    -->
    <!--<parameter name="browserFlavors" value="firefox,chrome,ie"/>-->
</suite>

因此,大家可以看到,我們在這里訴諸使用TestNG的聽眾稱為IAlterSuiteListener實現這將幫助我們構建<test>在動態套件xml文件的數量和標簽<test>套件中的XML文件標簽會直接等於通過套件級別參數browserFlavors (或)通過JVM參數-DbrowserFlavors指定的瀏覽器數量

輸出如下

[TestNG] Running:
  /Users/krmahadevan/githome/PlayGround/testbed/src/test/resources/multi-browsers.xml
[ThreadUtil] Starting executor timeOut:2147483647ms workers:3 threadPoolSize:5
Browser : ie on Thread [13]
Browser : chrome on Thread [12]
Browser : firefox on Thread [11]
PASSED: testMethod("firefox")
PASSED: testMethod("ie")
PASSED: testMethod("chrome")

===============================================
    ie_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
    firefox_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
    chrome_test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
1265_Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM