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

Не цепляются аттачи в отчет Allure при запуске через maven + Test NG

testng
allure
Теги: #<Tag:0x00007f7b64a7f300> #<Tag:0x00007f7b64a7f080>

(Crazyk2) #1

Задумка такая. Тестирую API с помощью Rest Assured, Test NG, Allure, Хочу помимо стандартного сообщения в аттаче о несоответствии твоему assert, собственно сам запрос и ответ, чтобы понять тест ли виноват и как выглядел сам тест. У rest assured есть метод log() по дефолту он вываливает все в System.out, то есть на консоль. Через конфиг ему можно подсунуть свой PrintStream

public static PrintStream printStream;
public static ByteArrayOutputStream buf;
public static RequestSpecBuilder requestSpecBuilder;

@BeforeSuite
public void SetUp() {
    System.setProperty("env", "test");
    buf = new ByteArrayOutputStream();
    printStream = new PrintStream(buf);

    requestSpecBuilder = new RequestSpecBuilder()
            .setBaseUri(getStringProp("url.base"))
            .setUrlEncodingEnabled(false)
            .setConfig(
                    RestAssuredConfig.config().logConfig(
                            new LogConfig()
                                    .defaultStream(printStream)
                                    .enableLoggingOfRequestAndResponseIfValidationFails()
                    )
            );
}

И все будет писаться в подсунутый стрим. После каждого метода будем обнулять стрим

@AfterMethod
public void clear(){
    buf.reset();
}

Пишу свой лисенер

package backend.listeners;

import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import ru.yandex.qatools.allure.annotations.Attachment;
import ru.yandex.qatools.allure.annotations.Step;

import static backend.Main.buf;

public class OnFailure extends TestListenerAdapter {
    
     

    @Step("Make Attachment on fail")
    @Override
    public void onTestFailure(ITestResult result) {

        String error = "tests FAILED: " + result.getTestName();
        if (result.getThrowable()!= null) {
            error = error + result.getThrowable().getMessage();
        }

        createAttachment(error + buf.toString());
    }

   @Attachment(value="Failed Request/Response", type = "text/plain")
    public String createAttachment(String error) {
        return error ;
    }
}

Прописываю с помощью аннотации на базовый тестовый класс от которого наследуются остальные тесты

@Listeners({backend.listeners.OnFailure.class})
public class MainTest {
blabla
}

pom.xml


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <httpcore.version>4.4.4</httpcore.version>
        <rest-assured.version>2.9.0</rest-assured.version>
        <jersey-client.version>2.22.2</jersey-client.version>

        <aspectj.version>1.7.4</aspectj.version>
        <allure.version>1.5.0.RC2</allure.version>
        <hamcrest-core.version>1.3</hamcrest-core.version>
        <assertj-core.version>3.4.1</assertj-core.version>
        <testng.version>6.9.10</testng.version>
        <log4j.version>1.2.17</log4j.version>


        <allure-maven-plugin.version>2.5</allure-maven-plugin.version>
        <maven-site-plugin.version>3.5.1</maven-site-plugin.version>
        <maven-clean-plugin.version>3.0.0</maven-clean-plugin.version>
        <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>

        <json-schema-validator.version>2.9.0</json-schema-validator.version>
        <groovy-all.version>2.4.6</groovy-all.version>
    </properties>


    <dependencies>

        <!-- tests -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>

        <!-- tests Утверждения -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj-core.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>${hamcrest-core.version}</version>
        </dependency>

        <!-- REST клиенты-->
        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>${rest-assured.version}</version>
        </dependency>

        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>json-schema-validator</artifactId>
            <version>${json-schema-validator.version}</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey-client.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>${httpcore.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
        </dependency>

        <!-- Работа с проперти файлами-->

        <dependency>
            <groupId>ru.qatools.commons</groupId>
            <artifactId>properties</artifactId>
            <version>2.0.RC5</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy-all.version}</version>
        </dependency>


        <!-- Отчет Allure-->
        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-testng-adaptor</artifactId>
            <version>${allure.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-maven-plugin</artifactId>
            <version>${allure-maven-plugin.version}</version>
        </dependency>

        <!-- Логирование-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>com.sun.istack</groupId>
            <artifactId>istack-commons-runtime</artifactId>
            <version>2.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <!-- put your configurations here -->
                    <source>1.8</source>
                    <target>1.8</target>
                    
                </configuration>
            </plugin>
            <!-- Сборка сайта отчета  -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>${maven-site-plugin.version}</version>
                <configuration>
                    <!--
                    <outputEncoding>UTF-8</outputEncoding>
                    -->
                    <inputEncoding>UTF-8</inputEncoding>

                </configuration>
            </plugin>

            <!-- Чистка перед запуском -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>${maven-clean-plugin.version}</version>
            </plugin>

            <!-- Запуск тестов  -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <testFailureIgnore>false</testFailureIgnore>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
                    </argLine>
                    <!-- Увеличиваем HEAP для прогрузки всех Groovy классов AssertJ  -->
               <argLine>-Xmx1024m</argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!-- Сервер для просмотра отчета  -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.2.10.v20150310</version>
                    <configuration>
                        <webAppSourceDirectory>${project.build.directory}/site/allure-maven-plugin</webAppSourceDirectory>
                                <stopKey>stop</stopKey>
                                <stopPort>1234</stopPort>
                    </configuration>
            </plugin>

        </plugins>
    </build>

    <reporting>
        <excludeDefaults>true</excludeDefaults>
        <plugins>
            <plugin>
                <groupId>ru.yandex.qatools.allure</groupId>
                <artifactId>allure-maven-plugin</artifactId>
                <version>${allure-maven-plugin.version}</version>
            </plugin>
        </plugins>
    </reporting>

</project>

При запуске через IDEA в дебаге я вижу как захожу в свой листенер. При запуске через мавен ставлю system.out для отладки и вижу что тоже захожу в листенер но в отчетах нет моих аттачей
maven clean test site
Помогите, а??


(Sergey Korol) #2

Вот мне интересно: шапку, которая отображается всегда и везде, над всеми сообщениями и списками, - так плохо видно?

В следующий раз тема будет скрываться без предупреждений.


(Crazyk2) #3

Не понял намека. Гуглил писал листенер в mave-surefire не помогает. Если есть где- то ответ, подскажите, пожалуйста


(Sergey Korol) #4

Намек на форматирование кода. Если раньше можно было делать поблажку новичкам, которые не нашли FAQ, то сейчас пример форматирования кода прямо в шапке показан. И вы все же как-то умудрились налепить абы как, чтобы другим “легче” читалось.


(Sergey Korol) #5

(Crazyk2) #6

Все понял, вроде исправил по гайду. Правда не уверен. я вставлял в теги code, не знал как по-другому. И в шапке у меня, кстати, ничего нет.((


(Sergey Korol) #7

(Sergey Korol) #8

Во-первых, попробуйте 1.4.23 версию алюра, которая релизнулась, как ни странно, на 2 месяца позже 1.5.0 RC2.
Во-вторых, уберите maven-site-plugin. За генерацию репорта отвечает allure-maven-plugin.
В-третьих, покажите содержимое allure-results, куда обычно складируются атачменты. Для начала нужно понять, генерируются ли они в принципе.


(Crazyk2) #9

Попробовал 1.4.23 результат тот же.
Кусочек XML, туда не попадают мои аттачи и степы

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:test-suite start="1461822301988" stop="1461822304692" version="1.4.23" xmlns:ns2="urn:model.allure.qatools.yandex.ru">
    <name>WEBAPI : JSON</name>
    <title>WEBAPI : JSON</title>
    <test-cases>
        <test-case start="1461822303061" stop="1461822303373" status="failed">
            <name>CheckOptionSchemaTest[,com.jayway.restassured.internal.RequestSpecificationImpl@a36b71]</name>
            <title>Check JSON schemas for '\option\'</title>
            <description type="text">Проверяем соответсвие данных полученных от WebAPI приложенной схеме</description>
            <failure>
                <message>AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;404&gt;.
</message>
                <stack-trace>java.lang.AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;404&gt;.

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:80)
    at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:74)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:598)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:760)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:120)
    at com.jayway.restassured.specification.ResponseSpecification$statusCode$2.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:128)
    at com.jayway.restassured.internal.ValidatableResponseOptionsImpl.statusCode(ValidatableResponseOptionsImpl.java:117)
    at backend.tests.OptionTest.CheckOptionSchemaTest(OptionTest.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:281)
    at org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:121)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
</stack-trace>
            </failure>
            <steps/>
            <attachments/>
            <labels>
                <label name="host" value="der112"/>
                <label name="thread" value="10740@der112.main(1)"/>
            </labels>
            <parameters>
                <parameter name="Имя юзера" value="" kind="argument"/>
            </parameters>
        </test-case>

При прогоне через IDEA генерируется норм отчет

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:test-suite start="1461822810027" stop="1461822884195" version="1.4.23" xmlns:ns2="urn:model.allure.qatools.yandex.ru">
    <name>Default Suite : DigitalPlatformAutotest</name>
    <title>Default Suite : DigitalPlatformAutotest</title>
    <test-cases>
        <test-case start="1461822810272" stop="1461822881282" status="broken">
            <name>CheckCardInfoTest</name>
            <title>Check card info data</title>
            <description type="text">Проверяем корректность данных полученных от WebAPI</description>
            <failure>
                <message>SocketException: Socket is not connected: connect</message>
                <stack-trace>java.net.SocketException: Socket is not connected: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
    at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at org.apache.http.client.HttpClient$execute$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at com.jayway.restassured.internal.RequestSpecificationImpl$RestAssuredHttpBuilder.doRequest(RequestSpecificationImpl.groovy:1974)
    at com.jayway.restassured.internal.http.HTTPBuilder.doRequest(HTTPBuilder.java:492)
    at com.jayway.restassured.internal.http.HTTPBuilder.request(HTTPBuilder.java:441)
    at com.jayway.restassured.internal.http.HTTPBuilder$request$2.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
    at com.jayway.restassured.internal.RequestSpecificationImpl.sendHttpRequest(RequestSpecificationImpl.groovy:1396)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1210)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:810)
    at com.jayway.restassured.internal.RequestSpecificationImpl.invokeMethod(RequestSpecificationImpl.groovy)
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48)
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.callCurrent(PogoInterceptableSite.java:58)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at com.jayway.restassured.internal.RequestSpecificationImpl.sendRequest(RequestSpecificationImpl.groovy:1178)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1210)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:810)
    at com.jayway.restassured.internal.RequestSpecificationImpl.invokeMethod(RequestSpecificationImpl.groovy)
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)
    at com.jayway.restassured.internal.filter.SendRequestFilter.filter(SendRequestFilter.groovy:30)
    at com.jayway.restassured.filter.Filter$filter$0.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at com.jayway.restassured.filter.Filter$filter.call(Unknown Source)
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73)
    at com.jayway.restassured.filter.time.TimingFilter.filter(TimingFilter.java:56)
    at com.jayway.restassured.filter.Filter$filter.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:141)
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73)
    at com.jayway.restassured.filter.FilterContext$next.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at com.jayway.restassured.internal.RequestSpecificationImpl.applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy:1596)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1210)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1019)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:810)
    at com.jayway.restassured.internal.RequestSpecificationImpl.invokeMethod(RequestSpecificationImpl.groovy)
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.call(PogoInterceptableSite.java:48)
    at org.codehaus.groovy.runtime.callsite.PogoInterceptableSite.callCurrent(PogoInterceptableSite.java:58)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:182)
    at com.jayway.restassured.internal.RequestSpecificationImpl.get(RequestSpecificationImpl.groovy:160)
    at com.jayway.restassured.internal.RequestSpecificationImpl.get(RequestSpecificationImpl.groovy)
    at com.jayway.restassured.RestAssured.get(RestAssured.java:808)
    at backend.tests.cardInfo.RequisitesTest.CheckCardInfoTest(RequisitesTest.java:131)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
</stack-trace>
            </failure>
            <steps>
                <step start="1461822820029" stop="1461822844048" status="passed">
                    <name>onTestFailure[[TestResult name=CheckCardInfoTest status=FAILURE method=RequisitesTest.CheckCardInfoTest()[pri:0, instanc...]</name>
                    <title>Make Attachment on fail</title>
                    <attachments>
                        <attachment title="Failed JSON Response" source="77604d4a-6130-4083-8466-d14d9e722a18-attachment.txt" type="text/plain"/>
                    </attachments>
                </step>
                <step start="1461822845905" stop="1461822873868" status="passed">
                    <name>onTestFailure[[TestResult name=CheckCardInfoTest status=FAILURE method=RequisitesTest.CheckCardInfoTest()[pri:0, instanc...]</name>
                    <title>Make Attachment on fail</title>
                    <attachments>
                        <attachment title="Failed JSON Response" source="f06123c8-4b01-42aa-8715-2469b832eaf8-attachment.txt" type="text/plain"/>
                    </attachments>
                </step>
            </steps>
            <attachments/>
            <labels>
                <label name="host" value="der112"/>
                <label name="thread" value="12828@der112.main(1)"/>
            </labels>
        </test-case>
    </test-cases>
    <labels>
        <label name="framework" value="TestNG"/>
        <label name="language" value="JAVA"/>
    </labels>
</ns2:test-suite>



(Sergey Korol) #10

Вопрос следующий: а зачем вам атачмент в виде степа, если вы его цепляете на onTestFailure event? Уберите @Step, он там не нужен. Если атачмент цепляется на весь тест, он должен отображаться под всеми степами, отдельной линкой.


(Crazyk2) #11

Все равно не помогает, поставил чисто из примера на

https://github.com/allure-examples/allure-testng-example/blob/master/src/main/java/my/company/steps/OnFailure.java#L14


(Sergey Korol) #12

Ну код довольно старый, я бы не стал “на слово” ему доверять. :slight_smile:

Покажите скрин структуры allure-results и финального репорта (с раскрытым data folder) после запуска site goal.

Попробуйте еще навесить listener через maven-surefire-plugin + заменить расширение TestListenerAdapter на реализацию интерфейса ITestListener. У меня подозрение, что ваш слушатель срабатывает в “неподходящий” момент.

Помню когда-то сталкивался с проблемой атачей из @AfterMethod. Не смотря на то, что они появлялись в output dir, к репорту они не атачились из-за специфики устройства testng-adaptor. У вас то на первый взгляд атачи вызываются в правильном месте. Но не известно, когда сам adaptor / testng их обрабатывает.

Если и тут затык, заливайте код на GitHub - посмотрим.


(Crazyk2) #13

так я же выше приложил два xml. Один через мавен запускаю, другой через IDEA, через мавен не аттачит мои сообщения, через идея все норм. В чем может быть причина. В сам лисенер я захожу в обоих случаях. Я добавил отладочный принт и вижу, что заходит и через IDEA и через maven, но как-то криво. Ломаю голову.

Менял класс TestListenerAdapter на интерфейс ITestListener не помогло, прописывал класс Лисенера в pom.xml прописывал в testng.xml не помогло, во всех случаях он юзается, но аттачи не производятся и только через запуск через maven, через IDEA все норм


(Sergey Korol) #14

Я просил не xml, а структуру каталогов с результатами.

Что значит через maven, и что значит через IDEA? Как именно запускаете в обоих случаях? По шагам распишите, со скринами. А то мы так долго будем ходить вокруг, да около.


(Crazyk2) #15

Запускаю через IDEA

после тестов папка target/allure-results

пример xml после запуска через idea

 <test-case start="1462442170008" stop="1462442178961" status="failed">
            <name>CheckCardInfoRequisitesSchemaTest[135862,com.jayway.restassured.internal.RequestSpecificationImpl@7cdbb2]</name>
            <title>Check JSON schemas for '/card-info-webapi/product/card/$cardId/requisites/'</title>
            <description type="text">Проверяем соответсвие реквизитов по карте полученных от WebAPI приложенной JSON схеме</description>
            <failure>
                <message>AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;500&gt;.
</message>
                <stack-trace>java.lang.AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;500&gt;.

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:80)
    at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:74)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:598)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:760)
    at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:120)
    at com.jayway.restassured.specification.ResponseSpecification$statusCode$2.callCurrent(Unknown Source)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:128)
    at com.jayway.restassured.internal.ValidatableResponseOptionsImpl.statusCode(ValidatableResponseOptionsImpl.java:117)
    at backend.tests.cardInfo.RequisitesTest.CheckCardInfoRequisitesSchemaTest(RequisitesTest.java:131)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:196)
    at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:175)
    at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:208)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:635)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1191)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1116)
    at org.testng.TestNG.run(TestNG.java:1024)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:74)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
</stack-trace>
            </failure>
            <steps>
                <step start="1462442170010" stop="1462442175959" status="passed">
                    <name>getCards[135862, com.jayway.restassured.internal.RequestSpecificationImpl@7cdbb2]</name>
                    <title>Запрос на список карт.</title>
                </step>
                <step start="1462442175961" stop="1462442175979" status="passed">
                    <name>checkResponseAllCard[com.jayway.restassured.internal.RestAssuredResponseImpl@33b2f8]</name>
                    <title>Проверка валидности ответа со всеми картами приложенной схеме</title>
                </step>
                <step start="1462442175980" stop="1462442175997" status="passed">
                    <name>getAllCardId[com.jayway.restassured.internal.RestAssuredResponseImpl@33b2f8]</name>
                    <title>Получение ID всех карт из ответа.</title>
                </step>
                <step start="1462442175998" stop="1462442176002" status="passed">
                    <name>generateRequisitesRequests[[691446, 1459768, 2321023, 2058908, 119916, 167332, 2965126], com.jayway.restassured.internal...]</name>
                    <title>Генерация запросов на реквизиты по всем картам.</title>
                </step>
                <step start="1462442178084" stop="1462442178091" status="passed">
                    <name>checkResponseRequisites[com.jayway.restassured.internal.RestAssuredResponseImpl@4752b3]</name>
                    <title>Проверка валидности ответа с рекквизитами приложенной схеме</title>
                </step>
            </steps>
            <attachments>
                <attachment title="Failed JSON Response" source="7386fbdc-49fb-4932-8ae3-f66387f9344d-attachment.txt" type="text/plain"/>
            </attachments>
            <labels>
                <label name="host" value="der112"/>
                <label name="thread" value="4024@der112.main(1)"/>
            </labels>
            <parameters>
                <parameter name="Имя юзера" value="135862" kind="argument"/>
            </parameters>
        </test-case>

присутствует аттач

pom.xml c настройками maven-surefire-plugin для запуска через maven

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Autotest</groupId>
    <artifactId>DigitalPlatformAutotest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <httpcore.version>4.4.4</httpcore.version>
        <rest-assured.version>2.9.0</rest-assured.version>
        <jersey-client.version>2.22.2</jersey-client.version>

        <aspectj.version>1.8.9</aspectj.version>
        <allure.version>1.4.18</allure.version>
        <hamcrest-core.version>1.3</hamcrest-core.version>
        <assertj-core.version>3.4.1</assertj-core.version>
        <testng.version>6.9.8</testng.version>
        <log4j.version>1.2.17</log4j.version>


        <allure-maven-plugin.version>2.2</allure-maven-plugin.version>
        <maven-site-plugin.version>3.5.1</maven-site-plugin.version>
        <maven-clean-plugin.version>3.0.0</maven-clean-plugin.version>
        <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>

        <json-schema-validator.version>2.9.0</json-schema-validator.version>
        <groovy-all.version>2.4.6</groovy-all.version>
        <persistence-api.version>1.0</persistence-api.version>
        <hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version>
        <spring-data-jpa.version>1.10.1.RELEASE</spring-data-jpa.version>
        <spring-test.version>4.2.5.RELEASE</spring-test.version>
        <hibernate-entitymanager.version>5.1.0.Final</hibernate-entitymanager.version>
    </properties>

    <repositories>
        <repository>
            <id>localFileRepository</id>
            <url>file://${basedir}/libs</url>
        </repository>
    </repositories>

    <dependencies>
        <!-- Работа с БД-->
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>${hibernate-jpa-2.1-api.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate-entitymanager.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
        </dependency>

        <dependency>
            <groupId>local-oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.2</version>
        </dependency>
        <!-- tests -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>

        <!-- tests Утверждения -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj-core.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>${hamcrest-core.version}</version>
        </dependency>

        <!-- REST клиенты-->
        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>${rest-assured.version}</version>
        </dependency>

        <dependency>
            <groupId>com.jayway.restassured</groupId>
            <artifactId>json-schema-validator</artifactId>
            <version>${json-schema-validator.version}</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey-client.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>${httpcore.version}</version>
        </dependency>

        <!-- Работа с проперти файлами-->

        <dependency>
            <groupId>ru.qatools.commons</groupId>
            <artifactId>properties</artifactId>
            <version>2.0.RC5</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy-all.version}</version>
        </dependency>


        <!-- Отчет Allure-->
        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-testng-adaptor</artifactId>
            <version>${allure.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>ru.yandex.qatools.allure</groupId>
            <artifactId>allure-maven-plugin</artifactId>
            <version>${allure-maven-plugin.version}</version>
        </dependency>

        <!-- Логирование-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>

        <dependency>
            <groupId>com.sun.istack</groupId>
            <artifactId>istack-commons-runtime</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-test.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <!-- put your configurations here -->
                    <source>1.8</source>
                    <target>1.8</target>
                    
                </configuration>
            </plugin>


            <!-- Чистка перед запуском -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>${maven-clean-plugin.version}</version>
            </plugin>

            <!-- Запуск тестов  -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
                    </argLine>
                    <!-- Увеличиваем HEAP для прогрузки всех Groovy классов AssertJ  -->
               <argLine>-Xmx1024m</argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!-- Сервер для просмотра отчета  -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.2.10.v20150310</version>
                    <configuration>
                        <webAppSourceDirectory>${project.build.directory}/site/allure-maven-plugin</webAppSourceDirectory>
                                <stopKey>stop</stopKey>
                                <stopPort>1234</stopPort>
                    </configuration>
            </plugin>

        </plugins>
    </build>

    <reporting>
        <excludeDefaults>true</excludeDefaults>
        <plugins>
            <plugin>
                <groupId>ru.yandex.qatools.allure</groupId>
                <artifactId>allure-maven-plugin</artifactId>
                <version>${allure-maven-plugin.version}</version>
            </plugin>
        </plugins>
    </reporting>

</project>

запуск через мавен в корне проекта, открываю cmd и

смотрим папку после запуска через мавен target\allure-results лежит только основной файл, нет отдельных файликов с аттачами.

вот пример с зафейленым тестом при запуске через мавен из allure-results

 <test-case start="1462441338946" stop="1462441343691" status="failed">
            <name>CheckCardInfoRequisitesErrorSchemaTest[115394,com.jayway.restassured.internal.RequestSpecificationImpl@1e12397]</name>
            <title>Check JSON schemas for '/card-info-webapi/product/card/$cardId/requisites/'</title>
            <description type="text">Проверяем соответсвие реквизитов по карте полученных от WebAPI приложенной JSON схеме без error</description>
            <failure>
                <message>AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;500&gt;.
</message>
                <stack-trace>java.lang.AssertionError: 1 expectation failed.
Expected status code &lt;200&gt; doesn't match actual status code &lt;500&gt;.

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:80)
    at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:74)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:598)
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate$1.call(Unknown Source)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.validateResponseIfRequired(ResponseSpecificationImpl.groovy:760)
    at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:210)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:59)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:120)
    at com.jayway.restassured.specification.ResponseSpecification$statusCode$2.callCurrent(Unknown Source)
    at com.jayway.restassured.internal.ResponseSpecificationImpl.statusCode(ResponseSpecificationImpl.groovy:128)
    at com.jayway.restassured.internal.ValidatableResponseOptionsImpl.statusCode(ValidatableResponseOptionsImpl.java:117)
    at backend.tests.cardInfo.RequisitesTest.CheckCardInfoRequisitesErrorSchemaTest(RequisitesTest.java:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.MethodInvocationHelper$1.runTestMethod(MethodInvocationHelper.java:196)
    at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run(AbstractTestNGSpringContextTests.java:175)
    at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:208)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:635)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1191)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1116)
    at org.testng.TestNG.run(TestNG.java:1024)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:132)
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeMulti(TestNGDirectoryTestSuite.java:193)
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:94)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:147)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
</stack-trace>
            </failure>
            <steps/>
            <attachments/>
            <labels>
                <label name="host" value="der112"/>
                <label name="thread" value="12456@der112.main(1)"/>
            </labels>
            <parameters>
                <parameter name="Имя юзера" value="115394" kind="argument"/>
            </parameters>
        </test-case>

аттачментс пустой, хотя я вижу что захожу в свой листенер

package backend.listeners;

import org.apache.log4j.Logger;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import ru.yandex.qatools.allure.annotations.Attachment;

import static backend.util.Util.buf;

public class OnFailure extends TestListenerAdapter {

    private static final Logger LOG = Logger.getLogger(OnFailure.class);
    @Override
    public void onTestFailure(ITestResult result) {
        String error = "tests FAILED: " + result.getTestName() + "\n";
        if (result.getThrowable()!= null) {
            error = error + result.getThrowable().getMessage();
        }
        LOG.error(error);

        createAttachment(buf.toString());
    }


    @Attachment(value="Failed JSON Response", type = "text/plain")
    public String createAttachment(String error) {
       System.out.println("I am into Listener!!!");
        return error ;
    }
}


(Crazyk2) #16

Вопрос решен. Это все от невнимательности и детального подхода к мелочам. Как я и догадывался, разный результат через Идею и через мавен, связан был с pom.xml, а именно

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <testFailureIgnore>true</testFailureIgnore>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
                    </argLine>
                    <!-- Увеличиваем HEAP для прогрузки всех Groovy классов AssertJ  -->
               <argLine>-Xmx1024m</argLine>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>${aspectj.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

Два аргумента argLine . Надо было через пробел подряд указать параметры запуска, а не в две разные строчки. В моем случае бралась последняя строчка и игнорировались остальные.

<argLine>
   -Xmx1024m  -javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
 </argLine>
                    

(Андрей Скрипниченко) #17

Спасибо, за решение. У меня вопрос: Как быть если один метод завязан на 3 датасета (из Датагенератора)? В итоге очитска буфера в @AfterMethod приводит к генерации Логa, кторый хранит все три фейла и аттачит по нарстающей. Первый фейл - FAIL JSON, Второй фейл - FAIL JSON + FAIL JSON из датасета №1. Третий фейл - все три JSON в аттаче.