Testng получает логи метода параллельного выполнения отдельно

Я использовал onTestSuccess, OnTestFailure для результатов выполнения тестового примера. Я могу сообщить, что мой тестовый пример пройден или не пройден.

if (result.getStatus() == ITestResult.SUCCESS) {
//
} else if (result.getStatus() == ITestResult.FAILURE) {
//
}else if (result.getStatus() == ITestResult.SKIP) {
//
}

Но мне также нужно записывать журналы для каждого метода отдельно... это не должно пересекаться с журналами других потоков.

@Test
public void test001() throws IOException {
    System.out.println("Test001");
}

@Test
public void test002() throws IOException {
    System.out.println("Test001");
}

Может кто-нибудь помочь или предложения?


person Rahul    schedule 26.03.2018    source источник
comment
Добро пожаловать в СО! прочитайте stackoverflow.com/help/mcve и улучшите свой пост, чтобы получить дополнительную помощь   -  person Scaramouche    schedule 26.03.2018


Ответы (2)


Да, вы можете сделать это очень легко. Но единственное предостережение заключается в том, что вам потребуется доступ к объекту ITestResult тестового метода (метод @Test), чтобы получить его журналы. Все, что вам нужно сделать, это использовать Reporter.log() для регистрации сообщений, а затем использовать Reporter.getOutput() для получения журналов.

Вот пример, который показывает это в действии.

Вот как будет выглядеть тестовый класс.

import org.testng.Reporter;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(TestCaseLogPrinter.class)
public class TestClassSample {
    @Test
    public void test001() {
        Reporter.log("Test001 : This is first message", true);
        Reporter.log("Test001 : This is second message", true);
    }

    @Test
    public void test002() {
        Reporter.log("Test002 : This is a random message", true);
        Reporter.log("Test002 : This is another random message", true);
    }
} 

Вот слушатель, который извлекает журналы

import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.TestListenerAdapter;

import java.util.List;

public class TestCaseLogPrinter extends TestListenerAdapter {
    @Override
    public void onTestSuccess(ITestResult tr) {
        System.err.println("Printing the test method logs " + asString(Reporter.getOutput(tr)));
    }

    private String asString(List<String> output) {
        StringBuilder builder = new StringBuilder();
        for (String each : output) {
            builder.append(each).append(", ");
        }
        //Removing the last ","
        return builder.toString().substring(0, builder.length() - 2);
    }
}

Вот как выглядит xml-файл пакета:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="49493003_Suite" parallel="methods" verbose="2">
    <test name="49493003_test" verbose="2">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn49493003.TestClassSample"/>
        </classes>
    </test>
</suite>

А вот вывод консоли

... TestNG 6.14.3 by Cédric Beust ([email protected])
...
Test001 : This is first message
Test002 : This is a random message
Test001 : This is second message
Test002 : This is another random message
Printing the test method logs Test001 : This is first message, Test001 : This is second message
Printing the test method logs Test002 : This is a random message, Test002 : This is another random message
PASSED: test001
PASSED: test002

===============================================
    49493003_test
    Tests run: 2, Failures: 0, Skips: 0
===============================================

===============================================
49493003_Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0
person Krishnan Mahadevan    schedule 26.03.2018

Вы также можете получить журнал с помощью AfterMethod из TestNG, например:

@AfterMethod
public void calltestStatus(ITestResult result) throws IOException
{
    testStatus(result);     
}

public void testStatus(ITestResult result) throws IOException
{
    if (result.getStatus() == ITestResult.FAILURE) {
        System.out.println("");     

    } else if (result.getStatus() == ITestResult.SUCCESS) {
        System.out.println(""); 

    } else if (result.getStatus() == ITestResult.SKIP) {
        System.out.println(""); 

    } else {
        System.out.println(""); 
    }
}

Где testStatus — это определяемая пользователем функция, которая обрабатывает каждый статус прохождения/непрохождения метода тестирования, который был вызван AfterMethod, поэтому после завершения каждого теста он будет проходить и возвращать статус.

person Ishita Shah    schedule 27.03.2018