Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как запустить выполнение кейсов один за другим?

java
webdriver
mobile
appium
testng
Теги: #<Tag:0x00007fedb96725d8> #<Tag:0x00007fedb96723f8> #<Tag:0x00007fedb96722b8> #<Tag:0x00007fedb9672178> #<Tag:0x00007fedb9672010>

(Denis Knox) #1

Добрый день, подскажите пожалуйста - есть несколько кейсов, но запускается только один кейс (последний). Что нужно чтобы кейсы выполнялись один за другим?

package com.appium.adnroid;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

public class ICForms_Login {

private static AppiumDriver driver;
@BeforeTest
public void setup() throws MalformedURLException, InterruptedException {

  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "SM T230");
  
  capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
  capabilities.setCapability("appPackage", "com.apg.forms");
  capabilities.setCapability("appActivity", "md51e44cf4d1a9e72882c31911909deb5d7.MainActivity");
  driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  
  driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
  Thread.sleep(3000);

}

@Test
public void ValidLoginValidPassword() {
LoginPage loginpage = new LoginPage(driver);
loginpage.ServerURL(“https://cheftest.com”);
loginpage.LoginPassword(“santaalania”,“123456”);
loginpage.ClickButton(“com.apg.forms:id/LoginFragment_LoginBtn”);
loginpage.SelectConfig(“ListItemView_Title”);
}

@Test
public void EmptyLoginEmptyPassword() {
LoginPage loginpage = new LoginPage(driver);
loginpage.ServerURL(“https://cheftest.com”);
loginpage.LoginPassword("","");
loginpage.ClickButton(“com.apg.forms:id/LoginFragment_LoginBtn”);
loginpage.GetMessageText().contains(“User Name field cannot be empty.”);
loginpage.ClickButton(“android:id/content”);
}

@AfterTest
public void tearDown() {
driver.close();
}
}


#2

А как запускаете Терра тесты то?


(Yaroslav Pernerovskyy) #3

Не делайте так, делайте driver.quit();

А по-поводу, вопроса вам сюда:
http://testng.org/doc/documentation-main.html#dependent-methods


(Denis Knox) #4

Эмм…что есть терра тест? :slight_smile:

Запускаю через эклипс + TestNg


#5

“Терра” - то опечатка была :slight_smile:


#6

Testng запускается либо через xml файл, где указаны нужные тесты для запуска, либо через IDE. Не знаю, как в эклипсе, но в идее есть кнопки отдельные - запустить тест конкретный или весь тестовый класс. Посмотрите, может вы тоже запускаете один тест


(Vadym Zakharchuk) #7

можно сделать тесты зависимыми через параметр dependsOnMethods(или dependsOnMethod) в аннотации.
напр.

 @Test(groups = "myGroup", dependsOnMethod = "ValidLoginValidPassword" )

ну или через параметр priority в той же аннотации проставить порядок выполнения.


(Myroslav Zvarych) #8

http://www.seleniumeasy.com/testng-tutorials/testng-test-case-priority
с помощью параметра priority


(Denis Knox) #9

@Test(priority=1)

Помогло, спасибо, теперь тесты выполняются в нужном порядке.
Но есть еще одна проблемка - как закрыть приложение, без driver.close(); ?

По идее дизайн тестов такой:

  1. Открыть приложение

  2. Попытаться авторизоваться (Правильный логин \ Правильный пароль)

  3. закрыть приложение

  4. Открыть приложение

  5. Попытаться авторизоваться (НеПравильный логин \ Правильный пароль)

  6. закрыть приложение

и т.д.

без явного закрытия приложения, выполняется только первый кейс, а второй падает.


(Myroslav Zvarych) #10

driver.quite(); в методе @After Test


(Myroslav Zvarych) #11

Thread.sleep(3000); костыль уберите итак ожидание 80 сек


(Дмитрий Мирошник) #12

А зачем Вам зависимые тесты? Сделайте их лучше независимыми, потом не будет головняка с попыткой запускать их в несколько потоков.


(Vadym Zakharchuk) #13

Я бы шаги открыть и закрыть вынес в отдельные методы с анотациями @BeforeMethod и @AfterMethod соответственно. На кописпасту похоже.
Если нужно полностью убить драйвер - в @AfterMethod с driver.quit() или driver.dispose().
А вообще, да - http://testng.org/doc/documentation-main.html#introduction


(Denis Knox) #14

Сделать независимыми - значит по разным файлам разнести?


(Дмитрий Мирошник) #15

Нет. Это сделать так, чтобы порядок выполнения тестов был неважен. Иными словами, любой выполненный тест не должен изменить исходное состояние AUT.


(Vadym Zakharchuk) #16

Да, это правильнее, если юзать @BeforeMethod и @AfterMethod и 2 @Test метода без priority - так и будет.


(Алексей Коваленко) #17

Эм, тут есть 1 момент. Вам нужно понять как запускаются тесты и аннотации @Before… и @After… + Нужно понимать состояние объекта в момент выполнения теста. Тестовый класс в первую очередь объект (юзайте дебагер). TestNG не гарантирует запуск тестов по порядку. Поэтому есть priority.


(Александр) #18

закрыть приложение без driver.close можно так:
driver.closeApp();