Возможность повторного использования тестов в TestNG - PullRequest
0 голосов
/ 22 января 2020

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

Для взаимодействия с самим приложением я уже написал объектную модель страницы, которая использует Selenium. WebDriver для взаимодействия с несколькими компонентами приложения.

А сейчас я собираюсь написать ряд тестов, которые позволят мне запустить ряд автоматических тестов для этого конкретного приложения. И в качестве тестовой среды я хотел бы использовать TestNG.

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

Пример тестового примера 1: Добавить действие к определенной задаче в досье

  1. Войти в приложение
  2. Открыть досье x
  3. Открыть задачу y в досье x
  4. Добавить действие z к задаче y в досье x

Пример тестового примера 2: добавить планирование для определенной операции в задаче в досье

  1. Вход в приложение
  2. Открыть досье x
  3. Открыть задание y внутри досье x
  4. Добавить действие z к заданию y внутри досье x
  5. Добавьте планирование для операции z

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

как Для себя я начал писать классы TestNG. Один для тестового примера 1 и второй для тестового примера 2. Затем в каждом тестовом классе я реализовал несколько методов тестирования, которые соответствуют шагам теста.

См. Пример кода ниже для тестового примера 1:

public class Test_Add_Activity_To_Task_In_Dossier extends BaseTestWeb {

private Dossier d;
private Task t;

@Test
public void login() {
    System.out.println("Test step: login");
}

@Test(dependsOnMethods = "login")
public void open_dossier() {
    System.out.println("Test step: open dossier");
}

@Test(dependsOnMethods = "open_dossier")
public void open_task() {
    System.out.println("Test step: open task");
}

@Test(dependsOnMethods = "open_task")
public void add_activity() {
    System.out.println("Test step: add activity");
}

}

А вот пример кода для тестового примера 2:

public class Test_Add_Planning_For_Activity_To_Task_In_Dossier extends BaseTestWeb {

private Dossier d;
private Task t;

@Test
public void login() {
    System.out.println("Test step: login");
}

@Test(dependsOnMethods = "login")
public void open_dossier() {
    System.out.println("Test step: open dossier");
}

@Test(dependsOnMethods = "open_dossier")
public void open_task() {
    System.out.println("Test step: open task");
}

@Test(dependsOnMethods = "open_task")
public void add_activity() {
    System.out.println("Test step: add activity");
}

@Test(dependsOnMethods = "add_activity")
public void add_planning() {
    System.out.println("Test step: add planning");
}

}

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

Поэтому я хотел бы спросить сообщество здесь о том, как можно было бы сделать все более пригодным для повторного использования и избежать многократного повторения шагов в каждом тестовом примере

Все идеи приветствуются !!

Ответы [ 3 ]

0 голосов
/ 22 января 2020

Как вы уже упоминали, вы используете объектную модель страницы. поэтому я предполагаю, что вы могли бы написать репозитории объектов и их операции для каждой страницы, создав отдельный класс.
Итак, при написании теста просто вызовите эти методы из класса POM. Например, в вашем случае:

контрольный пример 1:

public class Test_Add_Activity_To_Task_In_Dossier extends BaseTestWeb {@Test
    public void add_activity() {

        //To call below methods , please create object of the classes they belong to .

        login();
        open_dossier();
        open_task();

        System.out.println("Test step: add activity");
    }
}

контрольный пример 2:

public class Test_Add_Planning_For_Activity_To_Task_In_Dossier extends BaseTestWeb {
    @Test
    public void add_planning() {

        //To call below methods , please create object of the classes they belong to .

        login();
        open_dossier();
        open_task();
        System.out.println("Test step: add planning");
    }
}    

Надеюсь, это будет полезно.

0 голосов
/ 22 января 2020

Насколько я понимаю, вы хотите удалять повторяющиеся вещи, которые вы делаете перед каждым тестовым примером, например

Login to application
Open dossier x
Open task y within dossier x

Вы можете использовать @BeforeMethod, чтобы он выполнил эти предварительные задачи (в основном вы можете сохранить общая задача, которая нужна перед каждым тестом) перед каждым тестом.

   @BeforeMethod
    public void setUp()
    {           
     login();   
     open_dossier();
     open_task();
    }

Контрольный пример - 1

@Test
     public void testAddActivity() 
{
add_activity();
}

Контрольный пример - 2

@Test
     public void testAddPlanning() 
{
add_planning()
}
0 голосов
/ 22 января 2020

У меня была похожая среда, в которой мне нужно было иметь учетные записи в нужном состоянии, чтобы начать свои тесты. Я сделал пакет под названием «ускорители» и открыл некоторые классы, основанные на процессах, чтобы перемещать учетные записи из процесса в процесс, чтобы привести их в нужное состояние. Мой совет - не ставить аннотацию @Test над методами ускорителей. Но называть эти ускорительные классы и методы внутри ваших реальных тестов.

Если у вас есть дополнительные вопросы, не стесняйтесь их задавать.

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

@ Hans Mens Итак, я создал класс и методы как процессы как ускорители. А внутри аннотации @BeforeTest я вызывал все классы ускорителей, которые я использовал в своих тестах. Затем я расширил классы моих тестовых методов из класса, где находится аннотация @BeforeTest. Таким образом, я могу использовать все объекты, которые я вызывал в @BeforeTest, не вызывая их в тестовых классах, чтобы мои тестовые сценарии были чистыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...