AWS Device Farm игнорирует приоритетные аннотации TestNG

Я создал один класс тестового набора с setUp() а также tearDown() методы объявлены в @BeforeClass а также @AfterClass аннотаций.

Я включил 6 тестовых случаев в этом классе с @Test(priority = #) для каждого теста. Я выполняю этот класс на своем локальном компьютере, и он работает нормально, но когда я загружаю его в AWS Device Farm, он выполняет только один тестовый случай с (приоритет =1) и для всех остальных тестовых случаев ферма устройств при инициализации сервера приложений.

Как побороть этот блокатор?

2 ответа

Вы используете пользовательскую среду? Это ограничение можно ожидать в стандартной среде.

https://aws.amazon.com/premiumsupport/knowledge-center/xml-file-tests-jar-file-device-farm/

Примечание. В стандартной среде Device Farm для файла testng.xml поддерживается только подмножество функций. Если для проекта требуются приоритет, тег включения, тег исключения, сложная группировка или использование параметров из файла testng.xml, используйте пользовательские среды.

[Редактировать]

Я проверил приоритет, используя примеры приложений и тесты

git clone https://github.com/aws-samples/aws-device-farm-appium-tests-for-sample-app.git
cd aws-device-farm-appium-tests-for-sample-app/
mkdir ./src/test/resources
// I used VS code here but any text editor will work
code ./src/test/resources/testng.xml

Затем я добавил код, указанный выше, чтобы не пропустить все тесты:

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
    <test name="test">
        <classes>
            <class name="Tests.LoginTest"/> <!--Package.ClassName-->
        </classes>
    </test>
</suite>

Затем я изменил LoginTest, чтобы использовать приоритетную функцию TestNG.

LoginTest.java

/*
 * Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package Tests;

import Pages.LoginPage;
import Tests.AbstractBaseTests.TestBase;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

/**
 * Tests for a login page
 */
public class LoginTest extends TestBase {
    private static final String LOGIN_SUCCESS_MESSAGE = "You are logged on as admin";
    private static final String LOGIN_FAIL_MESSAGE = "You gave me the wrong username and password";
    private static final String CORRECT_USER_NAME = "admin";
    private static final String CORRECT_PASSWORD = "password";
    private static final String FAIL_USER_NAME = "Wrong User";
    private static final String FAIL_PASSWORD = "12345";
    private static final String BAD_TEXT_ENTRY_MSG = "Username sent to text field incorrectly";

    private LoginPage loginPage;

    @Override
    public String getName() {
        return "Login Page";
    }

    /**
     * Creates a login
     */
    @BeforeTest
    @Override
    public void setUpPage() {
        loginPage = new LoginPage(driver);
    }

    /**
     * Tests logging in with valid credentials by verifying if the login message is correct
     */
    @Test(priority = 1)
    public void loginSuccess() throws InterruptedException {
        Assert.assertTrue(loginPage.login(CORRECT_USER_NAME, CORRECT_PASSWORD), BAD_TEXT_ENTRY_MSG);
        Assert.assertEquals(loginPage.getMessage(), LOGIN_SUCCESS_MESSAGE);
    }

    /**
     * Tests logging in with invalid credentials by verifying if the error message is correct
     */
    @Test(priority = 2)
    public void loginFail() throws InterruptedException {
        Assert.assertTrue(loginPage.login(FAIL_USER_NAME, FAIL_PASSWORD), BAD_TEXT_ENTRY_MSG);
        Assert.assertEquals(loginPage.getMessage(), LOGIN_FAIL_MESSAGE);
    }

    /**
     * After each test method, logout or try again
     */
    @AfterMethod
    public void logOut() {
        loginPage.pressAltButton();
        Assert.assertTrue(loginPage.checkIfBackAtLogin());
    }
}

Я упаковал тесты с помощью команды mvn clean package -DskipTests=true

Выполнение этого в ферме устройств дало следующие результаты:

видео: https://imgur.com/YHnq08X

Поэтому я не могу воспроизвести проблему. Можете ли вы предоставить доказательства того, что пользовательская среда Device Farm не работает с приоритетом?

Пожалуйста, поделитесь URL-адресом запуска, чтобы мы могли извлечь артефакты запуска и отладить, в чем проблема

Другие вопросы по тегам