Hoe kan TestNG worden gebruikt om testscenario's voor meerdere gebruikers te maken?

Wat ik moet doen, is het maken van UI-testcases voor onze toepassing en we hebben besloten om Selenium te gebruiken met TestNG (we staan ​​nog open voor andere opties als er aanzienlijke voordelen zijn).

De tests die we proberen te maken, zijn tests waarbij verschillende gebruikers via de toepassing met elkaar communiceren . In principe moeten we meerdere gebruikers tegelijk aanmelden bij onze applicatie en verschillende acties uitvoeren. Er is een verband tussen de acties van de gebruikers, zodat ze hun interactie op sommige punten moeten synchroniseren (een gebruiker moet bijvoorbeeld wachten totdat een andere gebruiker een actie uitvoert voordat hij zijn actie kan uitvoeren). Dit betekent dat er ook een soort gedeelde informatie tussen de gebruikers moet zijn (ik dacht er gewoon over om een ​​object te delen dat voor de synchronisatiepunten zal zorgen).

How should I structure my scenario where I need to describe the actions of different users that will run in parallel using TestNG?

Is hier een beter kader voor of is er een patroon dat dit probleem aanpakt? Alle suggesties zijn welkom! Dank je.

EDIT:
The best I could thing so far is to create a test where each @Test method has the actions of each user and then create a Suite where I define that the test methods should run in parallel. Example:

public class MultiUserTest {
    @Test
    public void user1Interaction() {
        User user1 = new User();
       //user1 performs actions
    }

    @Test
    public void user2Interaction() {
        User user2 = new User();
       //user2 performs actions
    }
}

Maak vervolgens een testsuite waarbij ik specificeer dat de methoden van MultiUserTest parallel moeten lopen.

Ik vind deze oplossing echter niet echt leuk. Ik vind het niet prettig dat ik vertrouw op een XML-configuratie (Test Suite) om het juiste gedrag van mijn test te beschrijven (wat niet vanzelfsprekend is door alleen naar de Java-code te kijken). Ik hou ook niet van het feit dat ik niet in staat zal zijn om de test gewoon uit te voeren door de TestNG-plug-in te gebruiken bij zonsverduistering door "Uitvoeren als - TestNG-test" uit te voeren. Nogmaals, elke suggestie is zeer welkom. Dank je!

1

1 antwoord

Ik denk dat je elk testraamwerk dat je leuk vindt kunt gebruiken.

Het punt is dat je gebruikersacties asynchroon in één testmethode moet uitvoeren en ze op een bepaald moment moet synchroniseren.

De benadering die ik u zou aanraden is om ExecutorService framework van java.util.concurrent pakket.

Dus eerst en vooral moet je de executeur maken

ExecutorService executorService = Executors.newFixedThreadPool(2);

Gebruik vervolgens de uitvoerder om taken asynchroon uit te voeren met behulp van submit methode en synchroniseer acties met haal -methode.

Zie codevoorbeeld hieronder

@Test
public void test() throws Exception {

    final User firstUser = new User();

    Future<?> firstUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            firstUser.doSomething();
            firstUser.doSomethingElse();
        }
    });

    final User secondUser = new User();
    Future<?> secondUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            secondUser.doSomething();
        }
    });


   //synchronization
    firstUserAction.get();
    secondUserAction.get();
   //synchronized now

    secondUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            secondUser.doSomethingElse();
        }
    });




}
0
toegevoegd
Bedankt voor uw suggestie, maar ik was op zoek naar een oplossing waarbij ik kon profiteren van een TestNG-functie die me zou helpen deze tests eenvoudiger en schoner te schrijven.
toegevoegd de auteur Mario Duarte, de bron