AWS Device Farm игнорирует приоритетные аннотации TestNG - PullRequest
0 голосов
/ 20 февраля 2019

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

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

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

1 Ответ

0 голосов
/ 21 февраля 2019

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

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

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

scheduling run

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

customer artifacts

results

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

...