Есть ли способ запустить два файла .xml в testng.xml параллельно?

В настоящее время у меня есть два разных TestSuite (SUITE1.XML и SUITE2.xml) с разными конфигурациями (например, браузеры, ОС)...

Я вызываю оба SUITES внутри testng.xml для запуска на соуслабах... и все работает нормально... Единственное, что меня беспокоит, так это то, что я хочу, чтобы эти наборы работали параллельно, а не последовательно...

Результат, который я получаю,

[TestNG] Running:
  /Users/muzamilabbasi/Automation/BaublebarTest/Suite1.xml

This is Browser String FIREFOX
This is Platform String WIN8
This is Version String 25
This is Browser String FIREFOX
This is Platform String WIN8
This is Version String 25
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
Page Title isGoogle
Page Title isGoogle

===============================================
mysuite1
Total tests run: 2, Failures: 0, Skips: 0
===============================================

[TestNG] Running:
  /Users/muzamilabbasi/Automation/BaublebarTest/Suite2.xml

This is Browser String FIREFOX
This is Platform String XP
This is Version String 7
This is Browser String FIREFOX
This is Platform String XP
This is Version String 7
Page Title isGoogle
Page Title isGoogle

Я искал много в Интернете, и в основном ответы, которые я получил, это использование задачи ANT {PARALLEL}, которую я могу выполнить, но как? Мне нужен пример .. Пожалуйста, помогите.

Я использую macOS и TESTNG 6.8.6.


person Muzamil Abbasi    schedule 07.11.2014    source источник


Ответы (3)


Другой вариант — использовать комплект люксов. Я предварю это, сказав, что прошло некоторое время с тех пор, как я работал с этой установкой, но, надеюсь, вы найдете здесь достаточно подробностей, чтобы хотя бы начать.

Во-первых, вы должны определить два (или более) XML-файла комплекта:

<suite name="Suite1">
    <test name="test1">
        <classes>
            <class name="fully.qualified.ClassName" />
        </classes>
        <methods>
            <include name="method1" />
        </methods>
    </test>
</suite>

и...

<suite name="Suite2">
    <test name="test2">
        <classes>
            <class name="fully.qualified.ClassName" />
        </classes>
        <methods>
            <include name="method2" />
        </methods>
    </test>
</suite>

Затем вы должны определить XML-файл набора наборов:

<suite name="suite of suites">
    <suite-files>
        <suite-file path="Suite1.xml" />
        <suite-file path="Suite2.xml" />
    </suite-files>
</suite>

Обратите внимание, что значение пути suite-file — это относительный путь от текущего XML-файла наборов наборов до XML-файла, который вы вызываете. Если они находятся в одном каталоге, достаточно будет просто имени файла.

Кроме того, оба типа XML поддерживают тег <parameter>. Стандартный пакет XML будет читаться как на уровне <suite>, так и на уровне <test>, и я обнаружил, что теги <parameter> на уровне <suite> в XML-файле набора наборов также будут работать.

Наконец, при выполнении вам нужно будет только передать XML-файл набора наборов в качестве аргумента файла набора.

РЕДАКТИРОВАТЬ: Вот как я смог заставить свои два набора работать параллельно. Хитрость заключалась в правильной настройке моего метода main().

public class TestRunner
{
    public static void main(String[] args)
    {
        TestNG testng = new TestNG();
        TestListenerAdapter adapter = new TestListenerAdapter();
        List<String> suites = new ArrayList<String>();

        testng.addListener(adapter);
        suites.add(args[0]);
        testng.setTestSuites(suites);
        testng.setParallel("parallel");
        testng.setSuiteThreadPoolSize(5);
        testng.setOutputDirectory("path to output");
        testng.run();
    }
}

Затем в командной строке:

java -jar ParallelSuiteDemo.jar SuiteOfSuites.xml

Обратите внимание, что моя банка и все файлы xml находились в одном каталоге с этой конфигурацией. Аргументы командной строки и записи <suite-file> должны быть правильно настроены, если вы хотите использовать структуру каталогов.

Это привело к тому, что мои два файла suite.xml работали параллельно в Selenium Grid.

Честно говоря, могут быть лучшие способы сделать это. Это именно то, что сработало для меня, когда я пытался сделать что-то подобное.

person tim-slifer    schedule 11.11.2014
comment
Привет, Тим, на самом деле я попробовал эту конфигурацию с наборами master & slave, но проблема в том, что я использую лаборатории соусов для выполнения своих тестов, поэтому, скажем, у меня есть наборы под названием (SUITE1.xml с 20 тестовыми наборами и SUite2.xml с 20 тестовыми наборами). ) оба для разных конфигураций, я назвал их внутри своего MasterSUite.xml, чего я не понимаю, сначала запустите SUITE1.xml после завершения SUITE1.xml, он запустит SUITE2.xml .... Я хочу, чтобы оба ( SUITE1.xml и SUITE2.xml) для одновременного запуска - person Muzamil Abbasi; 12.11.2014
comment
Я вижу, что ты говоришь. Мне нужно просмотреть старый код, чтобы найти подробности, но у меня это работало так же, как вы описываете то, что хотите увидеть. Единственная разница, однако, заключалась в том, что я работал во внутренней сетке, а не в Sauce... хотя я думаю, что Sauce будет работать с такими вещами, поскольку вся конфигурация находится в коде. Мне понадобится несколько дней, но я верну это в рабочее состояние с моей стороны и опубликую свои выводы в надежде, что вы сможете попробовать то же самое с Соусом и получить желаемый результат. Кажется, я припоминаю, что для этого где-то была неясная установка. - person tim-slifer; 13.11.2014
comment
Я обновил свой ответ, включив в него новую информацию, которая может оказаться полезной, если вы хотите использовать этот подход. С новыми конфигурациями я смог заставить два набора работать параллельно в моей собственной сети. Могут быть другие / лучшие способы сделать это, чем то, что я добавил выше ... это то, что сработало, когда я работал с набором файлов. Надеюсь, это по крайней мере поможет вам начать работу, и вы сможете внести улучшения там, где считаете нужным. - person tim-slifer; 16.11.2014
comment
Команда должна быть: java -jar TestRunner.jar SuiteOfSuites.xml - person timekeeper; 09.05.2018

Вам не нужно запускать костюмы параллельно... вместо этого вы можете написать два теста в одном костюме testng.xml и запускать его параллельно.

Если вы хотите использовать две разные конфигурации для разных тестов (браузер/ОС и т. д.), сделайте это параметром в testng.xml и используйте сетку селена для перенаправления каждого потока на соответствующие узлы.

Посмотрите на приведенный ниже пример

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Test Suit" verbose="2" parallel="tests">

<test name="Regression Test">
    <parameter name="browser" value="firefox" />
    <parameter name="os" value="win7" />
    <classes>
        <class name="pakagename.classname" />
    </classes>
</test>

<test name="Smoke Test">
    <parameter name="browser" value="chrome" />
    <parameter name="os" value="mac" />
    <classes>
        <class name="pakagename.classname" />
    </classes>
</test>

Also may be you can run two testng.xml suits using ANT or MAVEN. But I prefer 1st one. Please add the below section in pom.xml of your MAVEN project

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng1.xml</suiteXmlFile>
                    <suiteXmlFile>testng2.xml</suiteXmlFile>
                </suiteXmlFiles>
                <reportsDirectory>${basedir}/src/test/java/</reportsDirectory>
             <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
      <plugins>
<build>
person Babulu    schedule 09.11.2014
comment
Бхарат, я не пробовал, я избегаю использования maven, поскольку у нас есть ANT, поэтому я посмотрю, смогу ли я где-нибудь вписаться в ANT, если вы можете помочь, буду признателен. - person Muzamil Abbasi; 12.11.2014
comment
@Muzamil: я не работал в ANT. Вы можете попробовать решение "tim-slifer", вызвать его из ANT. Чтобы запускать подчиненные XML-файлы параллельно с использованием основного XML-файла, добавьте «‹suite name=suite of suites verbose=2 thread-count = 5 parallel=suite-files›» в главном XML-файле. Опять же, я не уверен, что это послужит вашей цели, просто намек. - person Babulu; 13.11.2014
comment
Спасибо Бхарат, обязательно попробую. - person Muzamil Abbasi; 14.11.2014

Да, вы можете сделать это, используя атрибут «suitethreadpoolsize» в testng.

<suite-files suitethreadpoolsize="2">
    <suite-file path="suite1.xml" />
    <suite-file path="suite2.xml" />
</suite-files>

Обратитесь к официальному веб-сайту testng за более подробной информацией http://testng.org/doc/documentation-main.html#parallel-running

Спасибо!

person A. K. Sahu    schedule 26.04.2016
comment
Можете ли вы немного уточнить, как именно вы использовали вышеуказанные теги xml? Получение ошибки Атрибут suitethreadpoolsize должен быть объявлен для элемента типа suite-files. и не дает бежать. - person Uday; 12.10.2020