Как получить значения аргументов из @DataProvider для @Test в аннотации @Before и @AfterMethod в TestNG - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы получить имена аргументов и их значения из @Test в TestNG. Эти аргументы предоставляются @DataProvider. Обычно я могу хранить его в переменных класса, потому что это не очень хорошая идея, когда я хочу запустить тест параллельно. Вот мой код:


import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestHomePage{

    @BeforeMethod(alwaysRun = true)
    public void setup(Method method) throws Exception {
        System.out.println("INFO ====setup===:" + method.getName());
        // how can I get parameters and value from @Test?
        //ex: sLogin="notLogin";sLike=""
    }

    @AfterMethod()
    public void tearnDown(Method method) {
        System.out.println("INFO ====tearnDown===:" + method.getName());
        // how can I get parameters and value from @Test?
    }

    @DataProvider(name = "likedata", parallel = true)
    public Object[][] likeDataprovider() throws Exception {
        return new Object[][] { { "notLogin", "" }, { "loggedIn", "notLike" }, { "loggedIn", "liked" } };
    }

    @Test(dataProvider = "likedata")
    public void verifyLikeFunction(String sLogin, String sLike, Method method) throws Exception {
        // Test
    }

}

Кто-нибудь может мне помочь?

Спасибо.

1 Ответ

1 голос
/ 06 августа 2020

Чтобы получить значение, добавьте params в качестве параметра @BeforeMethod

 @BeforeMethod(alwaysRun = true)
    public void setup(Method method, Object[] params) throws Exception {
        System.out.println("INFO ====setup===:" + method.getName());
        
        System.out.println("Parameter value:");
        for (Object parameter : params) {
            System.out.println(parameter);
        }      
    }

См. Внедрение зависимостей в TestNG для получения дополнительной информации.

А чтобы получить имя параметра,

  @BeforeMethod(alwaysRun = true)
    public void setup(Method method, Object[] params) throws Exception {
        System.out.println("Before , INFO ====setup===:" + method.getName());
       
        Parameter[] parameters= method.getParameters();
        
        System.out.println("Parameter names:");
        for (Parameter parameter : parameters) {
            System.out.println(parameter.getName());
        }     
    }

Получение имен параметров возможно, если во время компиляции включена отладочная информация. См. этот ответ для получения дополнительных сведений

Просто, если вы используете Eclipse go для проектирования -> свойства -> Java Компилятор -> установите флажок «Хранить информацию о параметрах метода ( можно использовать через отражение)

То же, что мы можем сделать в @AfterMethod.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...