Невозможно использовать переменную, определенную в @BeforeGroup в методе @Test

2
I have 3 '@Test' methods in three different classes that extends one base class.

Тест 1:

@Test(groups = "group1")
public void test1() {
    System.out.println("Test1 value : " + var); 
}

Тест 2:

@Test(groups = "group2",dependsOnGroups={"group1"})
public void test2() {
    System.out.println("Test2 value : " + var); 
}

Тест 3:

@Test
public void test3() {
    System.out.println("Test3 value : " + var); 
}

Базовый класс:

открытый класс TestBase {

public int var = 0;

@BeforeGroups(value = { "group1", "group2" })

void initialize() {

    System.out.println("Before group");

    var = 1; 

} 

}

Мне понадобится метод initialize() чтобы выполнить выполнение до того, как "test1()" и "test2()". Значение переменной var используется только в этих методах.

Ожидаемый результат:

Тест: перед группой

Значение Test1:1

Значение Test3: 0

Тест: перед группой

Значение Test2: 1

Но с приведенным выше кодом значение var в test2 также равно 0. Как исправить код для инициализации переменной для методов, относящихся к группам group1 и group2?

Теги:
testng

3 ответа

1

Во-первых, TestNG создает один экземпляр дочерними классами, где var равно 0.

Затем он вызывает @BeforeGroups только один раз на одном экземпляре, который он создал ранее.

Если TestNG работает должным образом, вы должны найти var=1 где-нибудь. Если вы хотите разделить значение по всему экземпляру, вы можете использовать static var или, лучше, использовать тестовый контекст: http://testng.org/doc/documentation-main.html#native-dependency-injection и http://testng.org/javadocs/org/testng/ITestContext.html

1

Это то, что вы хотите:

package practise;

import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

class TestBase {
    public int var = 0;

    @BeforeGroups(value = { "group1", "group2" })
    void initialize() {
        System.out.println("Running Before group");
        var = 1;
    }
}

/**
 * @author mrunal
 *
 */
public class SO39910848 extends TestBase {

    @Test(groups = "group1")
    public void test1() {
        System.out.println("Running test1 with value of var as: " + var);
    }

    @Test(groups = "group2",dependsOnGroups={"group1"})
    public void test2() {
        System.out.println("Running test2 with value of var as: " + var);
    }

    public void test3() {

    }
}

Вывод:

Запуск до группы
Запуск test1 со значением var as: 1
Запуск до группы
Запуск test2 со значением var as: 1
PASSED: test1
PASSED: test2

===============================================
Тест по умолчанию

Пробеги: 2, Неудачи: 0, Пропуски: 0

===============================================
Набор по умолчанию
Всего прогонов тестов: 2, Ошибки: 0, Пропуски: 0

  • 0
    Наличие групп в разных классах не работает. Код: public class TestBase {public int var = 0; @BeforeGroups (value = {"group1", "group2"}) void initialize () {System.out.println ("Перед группой"); var = 1; }} открытый класс TestClass1 extends TestBase {@Test (groups = "group1") public void test1 () {System.out.println ("Значение Test1:" + var); }} открытый класс TestClass2 extends TestBase {@Test (groups = "group2", depenOnGroups = {"group1"}) public void test2 () {System.out.println ("Значение Test2:" + var); }}
  • 0
    Результат выполнения вышеуказанного сценария выглядит следующим образом: Значение группы Test1 перед группой: 1 Значение Test2 группы перед: 0 Значение var, заданное в @BeforeGroups, не отражается в методе TestClass2.
Показать ещё 4 комментария
0

Ответ:

  1. Сделайте var как public глобальную переменную в вашем базовом классе.
  2. Назначьте значение var в @BeforeGroups методе @BeforeGroups.
  3. Доступ к var в подклассах.

Но несколько вещей в вашем тестовом наборе настроены,

  1. Зачем вам нужна настройка базового и суб-класса?
  2. Что делать, если вы хотите инициализировать var с разными значениями во время выполнения тестов.

Если ответ на оба вопроса заключается в том, чтобы получить значение var в нескольких тестах, вы можете подумать о возможности использования TestNG для передачи параметров методам, аннотированным одной из аннотаций TestNG.

Таким образом, ваш код будет выглядеть более чистым и скомпонованным. Вы можете посмотреть, как настроить параметры в TestNG?

  • 0
    1. Мой базовый класс - это база тестов со всеми общими вещами, необходимыми для тестовых случаев, у каждого подкласса есть один или несколько тестов. 2. Я хочу, чтобы значение var было одинаковым для тестов в группах group1 и group2. На самом деле значение, которое мне нужно использовать в тесте, не является целочисленным. БД загружается в BeforeSuite, и объект БД создается в BeforeGroups, к которой я пытаюсь получить доступ из тестовых случаев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню