Error io qameta allure allurelifecycle could not start step no test case running

Прошу помочь разобрать с ошибкой [ERROR] io.qameta.allure.AllureLifecycle - Could not start step: no test case running лог: * пользователь заполняет поле "Серия поручения" "86" ...
<?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>ru.sbtqa.pprb</groupId>
    <artifactId>xxxxxxx</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <allure.version>1.4.0</allure.version>
    <!--<aspectj.version>1.8.10</aspectj.version>-->
    <aspectj.version>1.9.3</aspectj.version>
    <hostname>${env.COMPUTERNAME}</hostname>
    <pf2.version>11.1.1</pf2.version>
    <maven.build.timestamp.format>yyyy/MM/dd/'${hostname}'-HH-mm</maven.build.timestamp.format>
    <allure.results.directory>${project.build.directory}/allure-results</allure.results.directory>
</properties>

<dependencies>
    <dependency>
        <groupId>ru.sbtqa.tag.pagefactory</groupId>
        <artifactId>html-plugin</artifactId>
        <version>${pf2.version}</version>
        <type>jar</type>
    </dependency>

    <dependency>
        <groupId>ru.sbt.qa</groupId>
        <artifactId>datagens</artifactId>
        <version>2.2</version>
    </dependency>

    <dependency>
        <groupId>com.sikulix</groupId>
        <artifactId>sikulixapi</artifactId>
        <version>1.1.2</version>
        <exclusions>
            <exclusion>
                <groupId>com.sikulix</groupId>
                <artifactId>sikulix2tigervnc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>ru.sbrf.vivat.qa</groupId>
        <artifactId>vivat-files</artifactId>
        <version>1.0.2</version>
    </dependency>

</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <!--ALM PLUGIN-->
            <plugin>
                <groupId>ru.sbt.qa</groupId>
                <artifactId>sbtalm-maven-plugin</artifactId>
                <version>3.2.6</version>
                <configuration>
                    <almProperties>src/test/resources/config/alm.properties</almProperties>
                    <commentTemplate>src/test/resources/config/alm-comment.html</commentTemplate>
                    <!--<baseUrl>http://10.68.195.104/reports/${maven.build.timestamp}/</baseUrl>-->
                    <dataFolder>${allure.results.directory}</dataFolder>
                </configuration>
            </plugin>
            <!--end ALM-->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>2.5</version>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <junitArtifactName>junit:junit</junitArtifactName>
                <testFailureIgnore>false</testFailureIgnore>
                <skipTests>false</skipTests>
                <argLine>
                    -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                    -Dcucumber.options="--plugin io.qameta.allure.cucumber2jvm.AllureCucumber2Jvm --plugin pretty"
                    -Dfile.encoding=UTF-8
                </argLine>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.aspectj</groupId>
                    <artifactId>aspectjweaver</artifactId>
                    <version>${aspectj.version}</version>
                </dependency>
            </dependencies>
        </plugin>

        <!--ALLURE2-->
        <plugin>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-maven</artifactId>
            <version>2.9</version>
        </plugin>
        <!--end ALLURE2-->
        <!--ALLURE2 CATEGORIES-->
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.2</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                       <outputDirectory>${allure.results.directory}</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/test/resources</directory>
                                <includes>
                                    <include>allure.properties</include>
                                    <include>categories.json</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
        <!--END ALLURE2 CATEGORIES-->
    </plugins>
</build>
</project>

Не могу сформировать Allure отчет в своем автотесте.

Запускаю выполнение автотеста с помощью junit: при выполнении не создается папка allure-results и получаю следующие ошибки:

10:18:53.917 [main] ERROR io.qameta.allure.AllureLifecycle - Could not start step: no test case running
10:18:54.316 [main] ERROR io.qameta.allure.AllureLifecycle - Could not update step: no step running
10:18:54.316 [main] ERROR io.qameta.allure.AllureLifecycle - Could not stop step: no step running
10:18:54.317 [main] ERROR io.qameta.allure.AllureLifecycle - Could not start step: no test case running
10:18:54.387 [main] ERROR io.qameta.allure.AllureLifecycle - Could not update step: no step running
10:18:54.387 [main] ERROR io.qameta.allure.AllureLifecycle - Could not stop step: no step running

При запуске с помощью maven, получаю следующий ворнинг:

[ERROR] Directory C:gitetc_testtargetallure-results not found.
[WARNING] Allure report was skipped because there is no results directories found.

Если я создаю папку allure-results вручную, то при исполнении mvn удалит ее и вернет тот же самый ворнинг.

Мой pom.xml:

<?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>ru.mos</groupId>
    <artifactId>etc_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <aspectj.version>1.8.10</aspectj.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.7.0-RC1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.7.0-RC1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>3.8.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-junit5</artifactId>
            <version>2.13.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M5</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <argLine>
                        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.8.10/aspectjweaver-1.8.10.jar"
                    </argLine>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>io.qameta.allure.junit5.AllureJunit5</value>
                        </property>
                    </properties>
                    <systemProperties>
                        <property>
                            <name>allure.results.directory</name>
                            <value>${project.build.directory}/allure-results</value>
                        </property>
                    </systemProperties>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjweaver</artifactId>
                        <version>1.8.10</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-maven</artifactId>
                <version>2.10.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Структура теста:
TestCase5986:

package ru.mos;

import io.qameta.allure.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

public class TestCase5986 {
    public static LoginPage loginPage;
    public static MainPage mainPage;
    public static WblPage wblPage;
    public static WebDriver driver;

    @BeforeClass
    public static void setup() {
        System.setProperty("webdriver.chrome.driver", ConfProperties.getProperty("chromedriver"));
        driver = new ChromeDriver();
        loginPage = new LoginPage(driver);
        mainPage = new MainPage(driver);
        wblPage = new WblPage(driver);
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get(ConfProperties.getProperty("loginpage"));
    }

    @Epic("Тестирование стенда ETC)
    @Feature(value = "CASE-5986")
    @Severity(SeverityLevel.CRITICAL)
    @Description("Позитивный тест формы логирования в системе")
    @Story (value = "Авторизация с корректным логином")

    @Test
    public void LoginTest() {
        loginPage.inputLogin(ConfProperties.getProperty("login"), ConfProperties.getProperty("password"));
        loginPage.clickSubmitBtn();
        /*mainPage.waybillListClick();
        wblPage.createBtnClick();
        wblPage.carSelect();
        wblPage.createMission();
        wblPage.techOpIdSelect();
        wblPage.facilityIdSelect();
        wblPage.routeIdSelect();
        wblPage.missionSubmitClick();
        wblPage.refillAddRow1();
        wblPage.oneFuelTankContSelect();
        wblPage.depDateFieldInput();
        wblPage.arrivalDateFieldInput();
        wblPage.newDepDate();
        assert wblPage.checkErrorMsg();*/
    }

        @AfterClass
        public static void driverClose () {
        driver.close();

    }

}

loginPage:

package ru.mos;

import io.qameta.allure.Step;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;

public class LoginPage {
    public WebDriver driver;

    public LoginPage(WebDriver driver) {
        PageFactory.initElements(driver, this);
        this.driver = driver;
    }

    @FindBy(id = "login")
    public WebElement loginFld;
    @FindBy(id = "password")
    public WebElement passwordFld;
    @FindBy(id = "submit")
    public WebElement submitBtn;

    @Step("Ввод логина {login} и пароля {password}")
    public void inputLogin(String login, String password) {
        loginFld.sendKeys(login);
        passwordFld.sendKeys(password);

    }
    
    @Step ("Подтверждение авторизации")
    public void clickSubmitBtn() {
        submitBtn.click();
    }

}

У меня два предположения:

  1. чего-то не хватает в pom.xml;
  2. некорректное использование аннотаций.

UPD:
При выполнении команды allure:serve формируется пустой отчет:
Пустой allure-отчет

UPD2: Лог Maven при выполнении кейса:

C:jdk1.8.0_161binjava.exe -Dmaven.multiModuleProjectDirectory=C:gitTestNGAllure_test "-Dmaven.home=C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2pluginsmavenlibmaven3" "-Dclassworlds.conf=C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2pluginsmavenlibmaven3binm2.conf" "-Dmaven.ext.class.path=C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2pluginsmavenlibmaven-event-listener.jar" "-javaagent:C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2libidea_rt.jar=52132:C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2bin" -Dfile.encoding=UTF-8 -classpath "C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2pluginsmavenlibmaven3bootplexus-classworlds-2.6.0.jar;C:UsersTinkovAYAppDataLocalJetBrainsIntelliJ IDEA Community Edition 2020.2pluginsmavenlibmaven3bootplexus-classworlds.license" org.codehaus.classworlds.Launcher -Didea.version=2020.2.1 clean test -Dsuite=src/test/resources/testng.xml.xml -Dversion=83.0 allure:serve
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< ru.dit:TestNGAllure_test >----------------------
[INFO] Building TestNGAllure_test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TestNGAllure_test ---
[INFO] Deleting C:gitTestNGAllure_testtarget
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TestNGAllure_test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ TestNGAllure_test ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ TestNGAllure_test ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ TestNGAllure_test ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to C:gitTestNGAllure_testtargettest-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.20:test (default-test) @ TestNGAllure_test ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.034 s - in TestSuite
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- allure-maven:2.10.0:serve (default-cli) @ TestNGAllure_test ---
[INFO] Allure installation directory C:gitTestNGAllure_test/.allure
[INFO] Try to finding out allure 2.8.1
[INFO] Generate Allure report (serve) with version 2.8.1
[INFO] Generate Allure report to C:gitTestNGAllure_testtargetsite/allure-maven-plugin
[INFO] Found results directory C:gitTestNGAllure_testtargetallure-results
[INFO] Can't find information about categories.
[INFO] Generate report to C:gitTestNGAllure_testtargetsiteallure-maven-plugin
Generating report to temp directory...
Report successfully generated to C:UsersTinkovAYAppDataLocalTemp6365362014998145974allure-report
Starting web server...
2020-08-26 15:35:45.363:INFO::main: Logging initialized @2065ms to org.eclipse.jetty.util.log.StdErrLog
Server started at <http://10.159.209.98:52175/>. Press <Ctrl+C> to exit

Структура проекта

введите сюда описание изображения

и еще куча таких моментов

Stanislav Mischenko

@krigan

вот теперь как раз буду искать утечку, т.к. ни ретраев, ни датапровайдеров нет

Vladimir-edu

@Vladimir-edu

Всем привет! Столкнулся с проблемой [main] ERROR io.qameta.allure.AllureLifecycle — Could not start step: no test case running. Идея какая есть отдельный тестовый класс №1 для проверки работы терминала. В нем все размечено для аллюра — все работает. Все ОК. Тепрь у меня есть другой тестовый класс №2 который проверяет некие плюшки для активного терминала. Когда я пытаюсь вызвать методы проверки активности терминала (из класса №1) внутри методов класса№2 — то все норм. НО как только я пытаюсь перенести эти вызовы внутри класса2 в метод с аннотацией Before (junit4) , что бы не прописывать вызов внутри каждого метода, то получаю [main] ERROR io.qameta.allure.AllureLifecycle — Could not start step: no test case running.

потому что аллюр не умеет фикстуры для junit4

то есть все степы из before — не знают, куда себя девать, о чем и пишут в лог

Vladimir-edu

@Vladimir-edu

@baev А как-нть это можно обойти? Или придется все то что лежало в бефо распихивать в каждый метод — это же куча лишних строк кода выходит

красиво не будет, к сожалению

Vladimir-edu

@Vladimir-edu

И в будущем изменений в данном направлении не предвидится?

у Junit4 нет способа узнать о фикстурах без добавления кастомного раннера

Vladimir-edu

@Vladimir-edu

Жаль, спасибо.

формально можно сделать, например, на аспектах. Но мне совсем не хочется тратить на это время. Но может когда-нибудь появится

я бы лучше для junit5 запилил поддержку фикстур

Vladimir-edu

@Vladimir-edu

@baev Ладно я закостылилил клон метода без Аллюровского обвеса со step и прочее. Причем если тест падает по причине Ассерта сработавшего на уровне бефо — то в отчет эта инфа никак не попадает. А вот это уже действительно неприятно :((( т.е. либо мне затаскивать ассерт в каждый метод (что не смертельно, но неприятно) И вот с этим уже наверно надо что-то делать так как не всегда фикстуры являются примитивными данными.

Vladimir-edu

@Vladimir-edu

Т.е. тест падает в консоли [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.8 s <<< FAILURE!. Но в аллюр отчет эта инфа не попадает. (нет никакого упоминания об упавшем тесте(тестах)) Так как тест класс со всеми его методами свалился на уровне бефо. ИМХО это надо править

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

@pulversss trx вроде аллюр умеет без адаптера

:warning: для тех, кто был на митапе нашем, и заинтересовался — пишите мне в личку :warning:

Stanislav Mischenko

@krigan

а для тех кто не был по географическим соображениям, но очень хочет заинтересоваться — где бы узнать чекак…

Обещали видео «через 2-3 недели», ЕМНИП

@baev , а что писать тебе в личку?)

@Asdwarf хочу на тнт аллюр сервер ))

Писать приветы, я собираю фидбек

Добрый день! Такой вопрос — есть ли возможность скрыть все пункты меню за исключением Overview и Behaviors, по возможности, без ковыряния в исходниках? Для некоторых больших манагеров это дофига сложно.

AlexP

@AlexanderPoleschuk

ниасилили?

сложно не щелкать в ненужные менюшки?)))

если очень хочется, то можно форкнуть и отключить ненужные штуки, это не очень сложно

ocherniavskyi

@ocherniavskyi-lohika-tix

@baev а видос с митапа будет? а то очень интересно

Через .allure/allure-2.7.0/config удалось скрыть разве что Packages

Всем привет! Тут такой вопрос — можно ли, к примеру, поскрывать все пункты меню в репорте, оставив только Overview и Behaviors? Для каких-то больших манагеров это сложнааа и они этого не хотят..

ocherniavskyi

@ocherniavskyi-lohika-tix

@baev а видосы с митапа будут, а то очень интересно

это один из епиков для следующего большого релиза — сделать возможность конфигурировать вообще все

будет, через пару-тройку недель

без ковыряния кода сложно будет

Блин, что с чатиком. То сообщения упорно не отсылаются, то приходит вся пачка..)

@baev , спасибо! Ждём с нетерпением

AlexP

@AlexanderPoleschuk

gitter штормит. у меня теперь текст сообщения, которое я набираю какой-то здоровый. а текст сообщений в чате мельче стал

Stanislav Mischenko

@krigan

всем ку! можно ли поменять на лету имя теста для репорта?

Привет всем!
Подскажите, пожалуйста, как можно добавить логи с тестов к аллюр отчету? Ипользую groovy, spock, wslite (for https requests). Добавил в проект allure-attachments. Но в отчетах только прошел/непрошел ли тест и данные по параметризированым тестам.
Спасибо!

@krigan для JVM: Allure.getLifecycle().updateTestResult(tr -> tr.setName(«new name»))

вызывать в рамках метода надо

@Luceafarul надо добавить interceptor для клинта, который делает запросы

и в нем можно на каждый запрос что-то создать)

Stanislav Mischenko

@krigan

@baev , спасибо, как раз нашел это сейчас, должно подойти

@krigan смотри в целом, как в Allure классе апи сделано

Best Java code snippets using io.qameta.allure.AllureLifecycle (Showing top 20 results out of 315)








public static void step(final String name, final Status status) {
  final String uuid = UUID.randomUUID().toString();
  getLifecycle().startStep(uuid, new StepResult().setName(name).setStatus(status));
  getLifecycle().stopStep(uuid);
}
@Override
public void testStarted(final Description description) {
  final String uuid = testCases.get();
  final TestResult result = createTestResult(uuid, description);
  getLifecycle().scheduleTestCase(result);
  getLifecycle().startTestCase(uuid);
}
@AfterReturning(pointcut = "anyMethod() && withStepAnnotation()")
public void stepStop() {
  getLifecycle().updateStep(s -> s.setStatus(Status.PASSED));
  getLifecycle().stopStep();
}








public void addAttachment(final String name, final String type,
             final String fileExtension, final InputStream stream) {
  writeAttachment(prepareAttachment(name, type, fileExtension), stream);
}
@Override
public void endOfScenarioLifeCycle(final Scenario scenario) {
  final StepUtils stepUtils = new StepUtils(currentFeature, currentScenario);
  synchronized (gherkinSteps) {
    while (gherkinSteps.peek() != null) {
      stepUtils.fireCanceledStep(gherkinSteps.remove());
    }
  }
  final String scenarioUuid = scenarioUuids.remove(scenario);
  lifecycle.stopTestCase(scenarioUuid);
  lifecycle.writeTestCase(scenarioUuid);
}
  final Status status = ResultsUtils.getStatus(result.getError())
      .orElse(Status.FAILED);
  lifecycle.updateStep(stepResult -> stepResult.setStatus(Status.FAILED));
  lifecycle.updateTestCase(scenarioUuid, scenarioResult ->
      scenarioResult.setStatus(status)
          .setStatusDetails(statusDetails));
  lifecycle.stopStep();
  break;
case PENDING:
  lifecycle.updateStep(stepResult -> stepResult.setStatus(Status.SKIPPED));
  lifecycle.updateTestCase(scenarioUuid, scenarioResult ->
      scenarioResult.setStatus(Status.SKIPPED)
          .setStatusDetails(statusDetails));
  lifecycle.stopStep();
  break;
case SKIPPED:
  lifecycle.updateStep(stepResult -> stepResult.setStatus(Status.SKIPPED));
  lifecycle.stopStep();
  break;
case PASSED:
  lifecycle.updateStep(stepResult -> stepResult.setStatus(Status.PASSED));
  lifecycle.stopStep();
  lifecycle.updateTestCase(scenarioUuid, scenarioResult ->
      scenarioResult.setStatus(Status.PASSED)
          .setStatusDetails(statusDetails));
@Override
public void onEvent(final LogEvent event) {
  lifecycle.getCurrentTestCase().ifPresent(uuid -> {
    final String stepUUID = UUID.randomUUID().toString();
    lifecycle.startStep(stepUUID, new StepResult()
        .setName(event.toString())
        .setStatus(Status.PASSED));
    lifecycle.updateStep(stepResult -> stepResult.setStart(stepResult.getStart() - event.getDuration()));
    if (LogEvent.EventStatus.FAIL.equals(event.getStatus())) {
      if (saveScreenshots) {
        lifecycle.addAttachment("Screenshot", "image/png", "png", getScreenshotBytes());
      }
      if (savePageHtml) {
        lifecycle.addAttachment("Page source", "text/html", "html", getPageSourceBytes());
      }
      lifecycle.updateStep(stepResult -> {
        final StatusDetails details = ResultsUtils.getStatusDetails(event.getError())
            .orElse(new StatusDetails());
        stepResult.setStatus(ResultsUtils.getStatus(event.getError()).orElse(Status.BROKEN));
        stepResult.setStatusDetails(details);
      });
    }
    lifecycle.stopStep(stepUUID);
  });
}
  protected void fireFixtureStep(final Match match, final Result result, final boolean isBefore) {
    final String uuid = md5(match.getLocation());
    final StepResult stepResult = new StepResult()
        .setName(match.getLocation())
        .setStatus(Status.fromValue(result.getStatus()))
        .setStart(System.currentTimeMillis() - result.getDuration())
        .setStop(System.currentTimeMillis());
    if (FAILED.equals(result.getStatus())) {
      final StatusDetails statusDetails = ResultsUtils.getStatusDetails(result.getError()).get();
      stepResult.setStatusDetails(statusDetails);
      if (isBefore) {
        final TagParser tagParser = new TagParser(feature, scenario);
        statusDetails
            .setMessage("Before is failed: " + result.getError().getLocalizedMessage())
            .setFlaky(tagParser.isFlaky())
            .setMuted(tagParser.isMuted())
            .setKnown(tagParser.isKnown());
        lifecycle.updateTestCase(scenario.getId(), scenarioResult ->
            scenarioResult.setStatus(Status.SKIPPED)
                .setStatusDetails(statusDetails));
      }
    }
    lifecycle.startStep(scenario.getId(), uuid, stepResult);
    lifecycle.stopStep(uuid);
  }
}
@Override
public void testFinished(final Description description) {
  final String uuid = testCases.get();
  testCases.remove();
  getLifecycle().updateTestCase(uuid, testResult -> {
    if (Objects.isNull(testResult.getStatus())) {
      testResult.setStatus(Status.PASSED);
    }
  });
  getLifecycle().stopTestCase(uuid);
  getLifecycle().writeTestCase(uuid);
}






public static <T> T step(final ThrowableContextRunnable<T, StepContext> runnable) {
  final String uuid = UUID.randomUUID().toString();
  getLifecycle().startStep(uuid, new StepResult().setName("step"));
  try {
    final T result = runnable.run(new DefaultStepContext(uuid));
    getLifecycle().updateStep(uuid, step -> step.setStatus(Status.PASSED));
    return result;
  } catch (Throwable throwable) {
    getLifecycle().updateStep(s -> s
        .setStatus(getStatus(throwable).orElse(Status.BROKEN))
        .setStatusDetails(getStatusDetails(throwable).orElse(null)));
    ExceptionUtils.sneakyThrow(throwable);
    return null;
  } finally {
    getLifecycle().stopStep(uuid);
  }
}







public void startStep(final String uuid, final StepResult result) {
  final Optional<String> current = threadContext.getCurrent();
  if (!current.isPresent()) {
    LOGGER.error("Could not start step: no test case running");
    return;
  }
  final String parentUuid = current.get();
  startStep(parentUuid, uuid, result);
}
@Override
public void testIgnored(final Description description) {
  final String uuid = testCases.get();
  testCases.remove();
  final TestResult result = createTestResult(uuid, description);
  result.setStatus(Status.SKIPPED);
  result.setStatusDetails(getIgnoredMessage(description));
  result.setStart(System.currentTimeMillis());
  getLifecycle().scheduleTestCase(result);
  getLifecycle().stopTestCase(uuid);
  getLifecycle().writeTestCase(uuid);
}





public void updateTestCase(final Consumer<TestResult> update) {
  final Optional<String> root = threadContext.getRoot();
  if (!root.isPresent()) {
    LOGGER.error("Could not update test case: no test case running");
    return;
  }
  final String uuid = root.get();
  updateTestCase(uuid, update);
}
  public static void stepFinish() {
    getLifecycle().stopStep(STEP_UUID_STACK.get().removeFirst());
  }
}





public void updateStep(final Consumer<StepResult> update) {
  final Optional<String> current = threadContext.getCurrent();
  if (!current.isPresent()) {
    LOGGER.error("Could not update step: no step running");
    return;
  }
  final String uuid = current.get();
  updateStep(uuid, update);
}






public void scheduleTestCase(final String containerUuid, final TestResult result) {
  storage.getContainer(containerUuid).ifPresent(container -> {
    synchronized (storage) {
      container.getChildren().add(result.getUuid());
    }
  });
  scheduleTestCase(result);
}
  private void handlePickleStep(final TestStepFinished event) {
    final StatusDetails statusDetails;
    if (event.result.getStatus() == Result.Type.UNDEFINED) {
      statusDetails =
          getStatusDetails(new PendingException("TODO: implement me"))
              .orElse(new StatusDetails());
      lifecycle.updateTestCase(getTestCaseUuid(currentTestCase), scenarioResult ->
          scenarioResult
              .setStatus(translateTestCaseStatus(event.result))
              .setStatusDetails(statusDetails));
    } else {
      statusDetails =
          getStatusDetails(event.result.getError())
              .orElse(new StatusDetails());
    }

    final TagParser tagParser = new TagParser(currentFeature, currentTestCase);
    statusDetails
        .setFlaky(tagParser.isFlaky())
        .setMuted(tagParser.isMuted())
        .setKnown(tagParser.isKnown());

    lifecycle.updateStep(getStepUuid(event.testStep), stepResult ->
        stepResult.setStatus(translateTestCaseStatus(event.result)));
    lifecycle.stopStep(getStepUuid(event.testStep));
  }
}
protected void fireCanceledStep(final Step unimplementedStep) {
  final StepResult stepResult = new StepResult();
  stepResult.setName(unimplementedStep.getName())
      .setStart(System.currentTimeMillis())
      .setStop(System.currentTimeMillis())
      .setStatus(Status.SKIPPED)
      .setStatusDetails(new StatusDetails().setMessage("Unimplemented step"));
  lifecycle.startStep(scenario.getId(), getStepUuid(unimplementedStep), stepResult);
  lifecycle.stopStep(getStepUuid(unimplementedStep));
  final StatusDetails statusDetails = new StatusDetails();
  final TagParser tagParser = new TagParser(feature, scenario);
  statusDetails
      .setFlaky(tagParser.isFlaky())
      .setMuted(tagParser.isMuted())
      .setKnown(tagParser.isKnown());
  lifecycle.updateTestCase(scenario.getId(), scenarioResult ->
      scenarioResult.setStatus(Status.SKIPPED)
          .setStatusDetails(statusDetails
              .setMessage("Unimplemented steps were found")));
}
private void handleTestCaseFinished(final TestCaseFinished event) {
  final String uuid = getTestCaseUuid(event.testCase);
  lifecycle.updateTestCase(
      uuid,
      testResult -> testResult.setStatus(translateTestCaseStatus(event.result))
  );
  final Optional<StatusDetails> details = getStatusDetails(event.result.getError());
  details.ifPresent(statusDetails -> lifecycle.updateTestCase(
      uuid,
      testResult -> testResult.setStatusDetails(statusDetails)
  ));
  lifecycle.stopTestCase(uuid);
  lifecycle.writeTestCase(uuid);
}
public static CompletableFuture<InputStream> addStreamAttachmentAsync(
    final String name, final String type, final String fileExtension, final Supplier<InputStream> body) {
  final String source = lifecycle.prepareAttachment(name, type, fileExtension);
  return supplyAsync(body).whenComplete((result, ex) -> lifecycle.writeAttachment(source, result));
}

#java #automated-tests #appium #android-uiautomator #allure

Вопрос:

Я впервые пишу сценарии тестирования мобильной автоматизации с использованием Appium. Я пытаюсь запустить приложение, установленное на телефоне Android, подключенном к компьютеру. Я написал код на Java в Eclipse. Мой код не запущен, и я вижу следующее сообщение на консоли:

 [RemoteTestNG] detected TestNG version 6.9.10
[TestNG] Running:
N:eclipse-workspaceTestProtestng.xml

[main] ERROR io.qameta.allure.AllureLifecycle - Could not stop test container: container with uuid 67e81eee-0a3a-489a-9b83-5f5e3305f573 not found
[main] ERROR io.qameta.allure.AllureLifecycle - Could not write test container: container with uuid 67e81eee-0a3a-489a-9b83-5f5e3305f573 not found

===============================================
Suite
Total tests run: 0, Failures: 0, Skips: 0
===============================================
 

Вот как я настраиваю желаемые возможности —

 @BeforeClass
public void setup()
{
    try
    {
        DesiredCapabilities caps = new DesiredCapabilities();
        
        
        caps.setCapability("deviceName", "R8KN800EJ0J");
        caps.setCapability("platformName", "Android");
        caps.setCapability("platformVersion", "10");
        caps.setCapability("appPackage", "com.jayway.contacts");
        caps.setCapability("appActivity", "com.jayway.contacts.MainActivity");
        caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 60);
        caps.setCapability("fullReset", false);
        caps.setCapability("noReset", true);
        
        URL url = new URL("http://127/0/0/1:4723/wd/hub");
        driver = new AppiumDriver<MobileElement>(url, caps);
    }
    
    catch(Exception exp)
    {
        System.out.println("Cause: "  exp.getCause());
        System.out.println("Message: "  exp.getMessage());
        exp.printStackTrace();
    }
}
 

Я попытался добавить зависимость allure от моего pom.xml файл и импорт заголовков allure в файл моего класса, но я все равно получил ту же ошибку. Я понятия не имею, что такое очарование и как оно работает, и я не использовал его в своем коде, но все еще получаю ошибку.

Пожалуйста, помогите.

Ответ №1:

Я нашел причины этой ошибки.

  1. Я использовал зависимость allure в своем списке зависимостей в pom.xml файл
  2. Я забыл добавить класс, который я намеревался запустить в testng.xml файл

Как только я исправил проблемы, упомянутые выше, код успешно запустился.

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

Size:
a
a
a

2020 December 06

Всем привет! Поискал в чате и не нашел решения для след. проблемы: В аллюр отчете не отображаются шаги из методов @BeforeClass и  @AfterClass (реализованы в сьюте). При выполнении этих методов в логах так же пишутся erorors из AllureLifecycle (пример: 6560 [main] ERROR io.qameta.allure.AllureLifecycle — Could not start step: no test case running), похоже что для сьюта не создается uuid (не могу знать верно это или нет).  Есть ли какие то решения для данной проблемы (Maven+Junit4)?

Можна aspect-и свои написать на ети анотации и пофиксить

Можна aspect-и свои написать на ети анотации и пофиксить

Тарас привет. Получается Allure EE не поддерживает методы @BeforeClass и  @AfterClass, реализованные в сьютах?

та не, я имею вввиду если не тригает ети fixture то может просто нету реализациии на них, нуужно написать свою

та не, я имею вввиду если не тригает ети fixture то может просто нету реализациии на них, нуужно написать свою

да вот перед тем как писать свое хочется убедиться, что не изобретаю велосипед.

Всем привет! Поискал в чате и не нашел решения для след. проблемы: В аллюр отчете не отображаются шаги из методов @BeforeClass и  @AfterClass (реализованы в сьюте). При выполнении этих методов в логах так же пишутся erorors из AllureLifecycle (пример: 6560 [main] ERROR io.qameta.allure.AllureLifecycle — Could not start step: no test case running), похоже что для сьюта не создается uuid (не могу знать верно это или нет).  Есть ли какие то решения для данной проблемы (Maven+Junit4)?

Ну так ясно же написано, что степ пытается выполниться вне контекста теста. В тестнг это фиксили емнип. В жюнит4 тоже должно работать. Мб у вас версия старая адаптера аллюра

Ну так ясно же написано, что степ пытается выполниться вне контекста теста. В тестнг это фиксили емнип. В жюнит4 тоже должно работать. Мб у вас версия старая адаптера аллюра

версия адаптера 2.13.7

2020 December 07

Можно ли как то в аллюр ее, при формировании отчетов не прикладывать логин и пароль в сценарии теста?

я тупо отключал листнер перед вводом пароля и включал после

Может кто подсказать ссылку на пример листнера для снятия и прикрепления скринов в отчет, после каждого шага

Может кто подсказать ссылку на пример листнера для снятия и прикрепления скринов в отчет, после каждого шага

вы selenide используете?

2020 December 08

Всем привет, как можно добавить лог на каждый тест к отчёту?

#allure_ee
Всем привет подскажите принцип изменения значка в проекте с manual на automated ? И могу ли я изменить этот значок с автоматизированого обратно в ручной?

#allure_ee
Всем привет подскажите принцип изменения значка в проекте с manual на automated ? И могу ли я изменить этот значок с автоматизированого обратно в ручной?

После того как результаты теста приходят из Idea/Jenkins тест меняет статус на automated, при этом manual тест-кейс сохраняется

После того как результаты теста приходят из Idea/Jenkins тест меняет статус на automated, при этом manual тест-кейс сохраняется

Потом есть возможность выбора оставить manual или заменить полностью на automated

alexey

Всем привет, как можно добавить лог на каждый тест к отчёту?

А что вы имеете в виду?

Вот у меня бежит логер на тест, хотел бы добавить этот лог в отчёт аллур, так же как и добавляю фото в конце теста.

alexey

Вот у меня бежит логер на тест, хотел бы добавить этот лог в отчёт аллур, так же как и добавляю фото в конце теста.

текстовый Attachment можно сделать

I’m submitting a …

— [X] bug report

  • feature request
  • support request => Please do not submit support request here, see note at the top of this template.

What is the current behavior?

Issue description:

  • I’m implementing the IInvokedMethodListener for TestNG
  • Inside it I have Overridden the afterInvocation method
  • I use this to create a log for the current test method Reporter.getOutput(testResult)
  • Then I try to attach this log file using this code
    Allure.addAttachment(attachmentDescription, "text/plain", attachmentContent, ".txt");
  • This works as expected for all @Test methods, but it doesn’t work for configuration methods like @BeforeMethod and @AfterMethod
  • This error is shown in the console [main] ERROR io.qameta.allure.AllureLifecycle - Could not add attachment: no test is running

Debugging Information

Upon debugging this issue I traced it to this method
String io.qameta.allure.AllureLifecycle.prepareAttachment(String name, String type, String fileExtension)

Apparently threadContext.getCurrent(); is returning empty instead of returning the UUID of the current configuration method.

This behavior is shown if I’m running any test, but if I’m debugging it becomes intermittent, and sometimes works as expected!!!

What is the expected behavior?

The attachment should be added successfully, and this error should not happen.

What is the motivation / use case for changing the behavior?

This impacts reporting attachments for any configuration method.

Please tell us about your environment:

| Test framework | testng@7.0.0 |
| Allure integration | allure-testng@2.13.1 |
| AspectJ Weaver | aspectjweaver | 1.9.5 |
| Java run-time environment | JDK | 13 |
| IDE | Eclipse | Build id: 20191212-1212 |

Other information

  • I couldn’t downgrade to acpectj 1.8.0 because it’s not working with JDK 13
  • Tried using a different listener ‘IConfigurationListener’ but the same issue persisted

Понравилась статья? Поделить с друзьями:
  • Error io qameta allure allurelifecycle could not add attachment no test is running
  • Error io pending com порт
  • Error invoking spell
  • Error invoking method при запуске javafx
  • Error invoking method перевод