Как получить имя метода в testng с помощью аннотации @BeforeTest - PullRequest
0 голосов
/ 06 июня 2018

Я работаю над тестированием API отдыха с использованием Rest Assured и использую аннотацию @BeforeTest для вызова данных jxl и записи результатов в них с помощью аннотации @Dataprovider для передачи тестовых данных.

Но здесь у меня всего 4 API, и я хочу прочитать конкретный лист для конкретного API для остальных, основываясь на имени метода в аннотации @Test для разных классов.

Пример:

1.cardvalidation - Лист проверки 2.Purchase - Лист покупки 3.Cancel - отменить лист покупки

Например, если метод называется cardvalidation, тогда я возьму только Лист проверки и т. Д. Для всех 4 API иЯ использую аннотацию Before Method, но она записывает результаты только для одной строки, а не для всех строк тестовых данных.

Пример кода:

@BeforeMethod
    public void excelWriter(Method method) throws BiffException, IOException, RowsExceededException, WriteException {

        File file = new File(inputFile);
        FileInputStream testFile = new FileInputStream(file);
        Workbook workBook = Workbook.getWorkbook(testFile);

        String methodName = method.getName();

        if(methodName.equals("validateTesting")) {
            sheet = workBook.getSheet("Validate_TestData");
        }else if(methodName.equals("purchaseTesting")) {
            sheet = workBook.getSheet("Purchase_TestData");
        }

        int rows = sheet.getRows();
        int columns = sheet.getColumns();

        String dataFile[][] = new String[rows][columns];

        File outputResults = new File(outputFile);
        // Write data into file
        FileOutputStream fileOutputStream = new FileOutputStream(outputResults);
        // Create the workbook
        workbookCopy = Workbook.createWorkbook(fileOutputStream);

        if(methodName.equals("validateTesting")) {
            writablesh = workbookCopy.createSheet("Validate_Results", 0);
        }else if(methodName.equals("purchaseTesting")) {
            writablesh = workbookCopy.createSheet("Purchase_Results", 1);
        }


        // Copy all data from source file to Destination File

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                dataFile[i][j] = sheet.getCell(j, i).getContents();
                Label l = new Label(j, i, dataFile[i][j]);

                Label L2 = new Label(13, 0, "Results");
                writablesh.addCell(l);
                writablesh.addCell(L2);

            }
        }

    }

1 Ответ

0 голосов
/ 06 июня 2018

Попробуйте реализовать интерфейс IInvokedMethodListener, тогда вам нужно будет реализовать следующие методы:

/**
 * A listener that gets invoked before and after a method is invoked by TestNG.
 * This listener will only be invoked for configuration and test methods.
 */

void beforeInvocation(IInvokedMethod method, ITestResult testResult);
void afterInvocation(IInvokedMethod method, ITestResult testResult);

Так что это будет соответствовать вашим потребностям.

Так вот пример кода для достиженияэто:

@Override
public synchronized void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
    Class<?> clazz = (Class<?>) method.getTestMethod().getRealClass();
    Method method = method.getTestMethod().getMethod());

     // so each method You call is basically invoked, and it has to be processed.

}

Попробуйте с этим.Надеюсь, это поможет.

...