Allure 2. Ошибка при использовании @Step. Gradle+Junit+Allure.

gradle
junit
java
allure
Теги: #<Tag:0x00007fedbba57d18> #<Tag:0x00007fedbba57a70> #<Tag:0x00007fedbba577a0> #<Tag:0x00007fedbba57570>

(Kseniya Orlova) #1

1)Если в тесте используются методы с аннотацией @Step, тест падает с ошибкой: java.lang.NoSuchMethodError: io.qameta.allure.aspects.StepsAspects.aspectOf()Lio/qameta/allure/aspects/StepsAspects;
2)Не связанная с этим проблема - @Description теста не выводится в отчете.

Смотрела в зависимостях - StepsAspects действительно не содержит такого метода(aspectOf()).

Пример теста:

import io.qameta.allure.Description;
import io.qameta.allure.Step;
import io.qameta.allure.Story;

@io.qameta.allure.Feature("Получение фич")
@Story("Объекты запрошенного датакласса отдаются с корректно заполненными полями(api v2)")
public class ApiV2FeatureFieldsFillingTests extends BaseOnSpecialDbTest {

    @Description("Объекты(Land) отдаются по запросу land с корректно заполнеными полями")
    @Test
    public void returnLandCorrectlyIfIsRequest() throws IOException, ParseException, SAXException {
        ...
        List<Land> result = testReturnIfIsRequest(expectedDataClass, Land.class);
        ...
    }

    @Step
    private <T> List<T> testReturnIfIsRequest(String expectedDataClass, Class<T> clazz) throws IOException {
        BeijingClient beijingClient = new BeijingClient(expectedDataClass, clazz);
        String jobId = beijingClient.createJob(GeometryExamples.SEGMENT_866287625);
        String streamId = beijingClient.createFeatureStream(new StreamParams()
                .jobId(jobId)
                .portionSize(portionSize)
                .fromVersion(0));
        List<T> receivedObjects = beijingClient.getFeaturesAndCheckSize(streamId, objectsNumber);
        beijingClient.deleteJob(jobId);
        return receivedObjects;
    }
...
}

Настройка зависимостей build.gradle:

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
        maven {
            url "http://artifactory.c.test:8081/artifactory/plugins-release-local/"
        }
        jcenter()
    }

    dependencies {
        classpath "io.qameta.allure:allure-gradle:2.3"
    }
}

apply plugin: 'io.qameta.allure'

ext {
    allureVersion = '2.0-BETA10'
    aspectjVersion= '1.8.10'
...
}

configurations {
    agent
}

dependencies {
...
    testCompile("junit:junit:$junitVersion")
    testCompile("com.google.dagger:dagger:$daggerVersion")
    testCompile("io.rest-assured:rest-assured:$restAssuredVersion")
    testApt("com.google.dagger:dagger-compiler:$daggerVersion")
    testApt("org.projectlombok:lombok:$lombokVersion")
    testCompile("org.mockito:mockito-core:$mockitoVersion")
    testCompile("io.ebean:ebean:$ebeanOrmVersion")
    testCompile("org.jdom:jdom:$jdomVersion")
    testCompile("xmlunit:xmlunit:$xmlUnitVersion")
    agent "org.aspectj:aspectjweaver:1.8.10"
    testCompile("io.qameta.allure:allure-junit4:$allureVersion")
}
test {
    doFirst { jvmArgs "-javaagent:${configurations.agent.singleFile}"}
    useJUnit {
        excludeCategories 'ru.dgis.world.beijing.testCategories.IntegrationTest'
    }
    systemProperty 'allure.results.directory', 'build/allure-results'
}

allure {
    version = '2.2.1'
    autoconfigure = true
    aspectjweaver = true
}

(Sergey Korol) #2

Ну вы ведь Step наверняка используете не только в тестах, так ведь?
А почему тогда Allure зависимость вынесена в testCompile, а не compile?

Насколько я помню слова разработчиков, по задумке второй версии Description теперь генерится из javadocs. Т.е. в аннотации вам нужно указать useJavaDoc = true, и создать над тестом описание соответствующего формата:

    /**
     * Объекты(Land) отдаются по запросу land с корректно заполнеными полями.
     */
```

П.С. Зависимости Allure у вас тоже outdated, если что (как репорта, так и адаптера).

(Kseniya Orlova) #3

Step использую только в тестах, и, т.к. не хочу, чтобы зависимости тестирования попадали в итоговую jar приложения, использую testCompile. В любом случае, при использовании compile ситуация не меняется, результат тот же.
Судя по документации, https://docs.qameta.io/allure/latest/#_features , этот вариант описания Description верен.
allureVersion пробовала устанавливать ‘2.0-BETA18’ , однако ситуация та же, а ‘2.0-BETA10’ сейчас поставила потому, что нашла в интернете статью, где описывалась работа с ‘2.0-BETA10’ и нареканий не было, думала, вдруг это баг новой версии.
Версию адаптера пробовала ставить 2.3.5, однако судя по зависимостям, он подтягивал те же версии, что и 2.2.1, поэтому решила оставить как в примере из доки (https://docs.qameta.io/allure/latest/#_junit_4).


(Sergey Korol) #4

Ок, понял. Приведите тогда полный стектрейс.

Но в целом, проблемы с NoSuchMethodError возникают либо ввиду отсутствия / конфликта каких-либо зависимостей, либо из-за не соответствующей версии Java.

В build.gradle не заметил source / target. Под какой джавой собираете проект?

Агент точно подтягивается?

Касательно документации. Она апдейтится силами коммьюнити. И далеко не всегда будет соответствовать действительности. Я конечно могу уточнить у разработчиков, должен ли работать старый формат. Но вариант с javadocs все же рекомендую попробовать.

Версия адаптера - BETA18 последняя. Репорт, при этом, не влияет на работу аспектов.

В общем, пересмотрите еще раз зависимости на предмет конфликтов, и версию Java (1.8). Если не поможет, вечером чекну.