Как реализовать вход нескольких пользователей для тестов, которые извлекают данные для входа из файла, содержащего идентификаторы пользователей

#java #testng #synchronized #multiple-login #parallel-execution

#java #testng #синхронизировано #множественный вход #параллельное выполнение

Вопрос:

У меня есть веб-приложение, которое я тестирую с помощью Selenium и Maven, выполняющих параллельные тесты. На данный момент я определяю идентификаторы входа для каждого теста. Мне нужно решение, в котором у меня будет пул пользователей, доступных для тестов. Во время выполнения тесты будут выбирать идентификаторы пользователей для входа в систему из этого пула. После выполнения параллельного теста идентификатор пользователя должен быть выпущен и стать доступным для следующих тестов. Пул должен контролироваться, и тесты должны выполняться только при наличии одного или нескольких пользователей, поэтому я буду избегать сбоев из-за недоступности пользователей.

Я новичок в этом, поэтому я ищу некоторые идеи / советы, как я могу реализовать вышеизложенное. Я использую Java.

Комментарии:

1. Вам нужно будет поместить их в какое-то хранилище данных и обработать это самостоятельно. Вы в основном описываете поведение общего пула ресурсов, поэтому может быть полезно посмотреть, как работают пулы баз данных.

2. Есть ли у вас приблизительная оценка того, сколько тестов может выполняться параллельно одновременно? мы говорим о 2, 10 или 1000? Я не уверен, что это хорошая идея, чтобы ваши тесты зависели от небольшого пула, поскольку это свяжет их вместе и потенциально создаст узкие места. Представьте, что тесты выходят из строя и не освобождают пользователей, вы можете даже заблокировать всех пользователей, и больше тесты не смогут выполняться

Ответ №1:

Вы можете сделать это, определив доступность пользователя как логическое значение. Рассмотрим эти четыре класса:

Класс для определения testUser как объекта:

 package theo;

public class testUser {

    public String id;
    public String pwd;
    public boolean availability;

    public String getId() {
        return id;
    }

    public String getPwd() {
        return pwd;
    }

    public boolean getAvailability() {
        return availability;
    }

    public void setAvailability(boolean availability) {
        this.availability = availability;
    }

    public testUser(String id, String pwd, boolean availability) {
        this.id = id;
        this.pwd = pwd;
        this.availability = availability;
    }
}
  

Класс с testUsers:

 package theo;

public class testUsers {

    testUser Jessica = new testUser("Jessica", "Jessica's password", true);
    testUser Julie = new testUser("Julie", "Julie's password", false);
    testUser Jane = new testUser("Jane", "Jane's password", true);

    public testUser[] allTestUsers = {
            Jessica,
            Julie,
            Jane
    };
}
  

Класс с методом тестирования:

 package theo;

public class testMethod extends testUsers {

    public void testWhatever(testUser user) {

        System.out.println("Starting test with "   user.getId()   "'s credentials.");       
        user.setAvailability(false);        
        System.out.println(user.getId()   "'s availability is: "   user.getAvailability());     
        String id = user.getId();
        String pwd = user.getPwd();     
        // load login page, perform login and desired tests
        // ...      
        // possibly logout the user
        // ...      
        System.out.println("Login test finished, going to release user.");

        // and releasing the user
        user.setAvailability(true);

        System.out.println(user.getId()   "'s availability is: "   user.getAvailability());

    }
}
  

Класс для выполнения тестов из-за доступности пользователя:

 package theo;

import org.junit.Test;

public class testDemo extends testMethod {

    @Test
    public void performTestDueToUserAvailability() {
        for (testUser testUser: allTestUsers) {
            if (testUser.getAvailability()) {
                testWhatever(testUser);
            }
            else {
                System.out.println("User locked, skipping test.");
            }
        }
    }

}
  

Вывод:

 Starting test with Jessica's credentials.
Jessica's availability is: false
Login test finished, going to release user.
Jessica's availability is: true
User locked, skipping test.
Starting test with Jane's credentials.
Jane's availability is: false
Login test finished, going to release user.
Jane's availability is: true
  

Комментарии:

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

2. В общем, да, я согласен. Но «… тесты должны выполняться только тогда, когда один или несколько пользователей доступны …» Условие в performTestDueToUserAvailability() можно настроить.

3. правильно, я понимаю это предложение как ожидание доступных пользователей для запуска тестов. Ожидание, а не пропуск.

4. Я вижу. Он может просто добавить функцию для ожидания, пока user.getAvailability() не вернет true . Например, подождите максимум несколько минут и вызовите исключение TimeoutException.