Можно ли вынести параметры для разный окружений в один testng.xml

TestNG(java mvn)

У меня есть несколько тестовых окружений, они отличаются BaseURL, и несколькими константами , которые я хочу вынести в testng.xml

Вопрос:
я могу эти параметры засунуть в разные как указано ниже(если да то как указывать testname при запуске тестов из терминала), или надо создать под каждый stage отдельный xml с данными?

<suite name="Sanity Suite">
    <test name="S1">
        <parameter name="env" value="STAGE1"/>
        <classes>
            <class name="Test"></class>
        </classes>
    </test>
    
    <test name = "S2">

        <parameter name="env" value="STAGE2"/>
        <classes>
            <class name="Test"></class>
        </classes>
    </test>
</suite>

https://testng.org/doc/documentation-main.html#parameters-testng-xml

Параметры можно указывать с разными значениями на уровне .

  • Parameters are scoped. In testng.xml, you can declare them either under a tag or under . If two parameters have the same name, it’s the one defined in that has precedence. This is convenient if you need to specify a parameter applicable to all your tests and override its value only for certain tests.

Это я вроде бы понял

Меня интересует могу ли я их забить в testng.xml и каким-то образом доставать только те которые нужны при прогоне тестов на конкретном окружении

А обьем тестовых сценариев, то есть содержимое сьюта, изменяется в зависимости от окружения где выполняются тесты? И какой сборщик: Gradle, Maven?
Если Maven, то могу рекомендовать использовать профили и там устанавливать необходимые переменные, или даже прокидывать значение со строки запуска. Как пример строки запуска:

mvn clean test -P stage_env -Dthreads=10

Где профиль будет выглядеть приблизительно так:

        <profile>
            <id>stage_env</id>
            <properties>
                <browser>chrome</browser>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>${surefire.plugin.version}</version>
                        <configuration>
                            <suiteXmlFiles>
                                <suiteXmlFile>${project.build.testOutputDirectory}/regression_suite.xml</suiteXmlFile>
                            </suiteXmlFiles>
                            <systemPropertyVariables>
                                <threads>${threads}</threads>
                            </systemPropertyVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

Здесь переменная с названием браузера (или любая другая) будет в зависимости от профиля, а количество потоков прокидывается уже с места запуска. А в xml будет выглядеть так:

<suite name="Regression Suite" parallel="tests" thread-count="${threads}">
...
</suite>

С профилями получается достаточно гибко все и можно даже другой сьют задавать для разных профилей…
Надеюсь поможет)

1 лайк

В целом можно.
Если у вас тесты олдни и теже то почему нет, модно даже не класть в XML, а передавать
mvn test -Dsuite=suite_name.xml -Denv=PUT_YOUR_ENV_HERE

2 лайка

я использую owner чтобы читать параметры для тестовых окружений из файлов типа dev.properties, intg.properies а тестам передаю -Denv=dev

Я в дотНете использую Microsoft.FeatureManagement, где-то встречал и для java