Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как правильно кастомизировать maven-surefire-plugin репорты в TestNg?


(Victor Malyavko) #1

Кастамизирую под себя репорт, который генерит maven-surefire-plugin. Получилось вставить в репорт свое имя теста. заимплементил тестовый класс от ITest и переопределил getТestName(), НО теперь получилось что имя теста дублируется, т.е имеет вид : testName (testName)… кто знает, в чем может быть причина и как от этого избавиться ?


(Дмитрий Жарий) #2

Привет Виктор,
Для увеличения шансов на получение ответа с решением вашей проблемы, опишите достаточный контекст для того, чтобы другие участники форума могли понять что происходит и в чем может быть проблема.
Для этого, было бы классно привести достаточно исходный код с проблемой, такой, чтобы учасники форума могли воспроизвести у себя и другие данные.


(Victor Malyavko) #3

Доброго времени суток !

Вот мой кусок из pom.xml:

...
 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>org.uncommons.reportng.HTMLReporter, org.uncommons.reportng.JUnitXMLReporter</value>
                        </property>
                    </properties>
                    <workingDirectory>target/</workingDirectory>
                </configuration>
            </plugin>
...

В тесте перегруженный метод имеет вид аля :

  @Override
    public String getTestName() {
        return "String";
    }

И получается, что в генерируемом репорте имя теста будет иметь вид - String (String), т.е в скобках получается дублирование…


(Victor Malyavko) #4

Вот о чем я говорю:


(Aleksey) #5

Попробовал немного поковыряться, готового решения вам не дам, но могу попробовать подсказать. Насколько я понял принцип действия при генерации репорта все данные о выполненных сьютах собираются в объекте Context и мержатся со стандартными теймлейтами, которые определяют структуру html-страниц результирующего отчета.
Сами теймплейты вы можете вытянуть отсюда: reportng-1.1.2.jar\org\uncommons\reportng\templates\html\ и попробовать понять почему для переопределенного названия теста появляются дополнительные скобки.
Но вот что делать, если вы сможете понять и поменять как вам надо - не скажу :smile: вернее вы можете юзать подхаченный jar, но оно того не стоит.

Кроме того, вы видели, что если в тестовом классе несколько методов, то все они будут идти с одним и тем же именем? Сомнительное удовольствие как по мне.

Вообще на вашем месте я попробовал бы переформулировать задачу, может то что вам надо (кастомизацию названий классов/тестов?) можно решить другим способом.


(mamax) #6

может вам использовать в перегруженом методе использовать result.getName()

я на проэкте воспользовлся листенером

public class Screenshot extends TestListenerAdapter {

@Override
public void onTestFailure(ITestResult result) {
	File file = new File("");

	Reporter.setCurrentTestResult(result);
	System.out.println(file.getAbsolutePath());
	Reporter.log("screenshot for "+ result +"<div style=\"height:768px; width:1000px; overflow:scroll\"><img src=\"../"+result.getName() +".png"+"\"></div>", true);
	
	try {
		
		TestBase.CaptureScreenshot(result.getName());
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	Reporter.setCurrentTestResult(null);
}

с ReportNG репортами роботает отлично,


(Victor Malyavko) #7

Всем привет !
Ребята, вообще все перепробовал и ничего не получается…
У меня один тестовый метод и ему дата провайдером подаются различные файлы с тестовыми наборами. Вот я пытался сделать, чтобы в репорте вместо имени теста как-раз отображалось имя того файла, который передается…
Пробовал и свой репортер переопределить и листенер… Ничего… Может кто-нить конкретно может сказать, что и как надо сделать, а то уже руки опускаются… Спасибо !


(vmaximv) #8

Самое простое решение “в лоб”

class Test {
    @Test
    public void test1() {}

    public String toString() {
        return "blablabla";
    }

}

в репорте будет

test1 on blablabla

(Victor Malyavko) #9

А можете пояснить как так получается ?
И в какой момент этот метод (toString) отрабатывает ? До теста, после или во время выполнения ?


(vmaximv) #10

А я хз. Попробуйте. Но вроде криво работает.
Максимум что у меня получилось - это через фабрику+дата_провайдер. Копать дальше особого желания нет.


(Victor Malyavko) #11

Спасибо Вам за ответ !