Java >> Java tutorial >  >> Tag >> class

Brug af TestProject Actions i vores testklasser

Efter at vi har skrevet brugerdefinerede TestProject-handlinger, ønsker vi at bruge dem i vores testklasser. Desværre har vi ingen idé om, hvordan vi kan gøre det.

I løbet af dette blogindlæg vil vi skrive to tests til søgefunktionen på min blog, og begge testklasser bruger de tilpassede handlinger, som vi skrev i de tidligere dele af min TestProject-tutorial.

Efter at vi har afsluttet dette blogindlæg, gør vi:

  • Vid, hvordan vi kan downloade en TestProject addon-proxy.
  • Forstå, hvordan vi kan bruge handlingerne fra den downloadede tilføjelsesproxy.
  • Kan bruge TestProject-handlinger i vores testklasser.

Lad os starte med at finde ud af, hvordan vi kan downloade en TestProject addon-proxy.

Download af en TestProject Addon Proxy

Hvis vi vil bruge en brugerdefineret tilføjelse fundet fra TestProject addon butikken, skal vi downloade en addon proxy jar-fil. En addon-proxy er en komponent, der giver os mulighed for at påkalde de faktiske handlinger leveret af en TestProject-addon.

Når en addon-proxy påkaldes af TestProject SDK, kommunikerer TestProject SDK med Agent API på app.testproject.io-webstedet og downloader den påkaldte handling (hvis handlingen ikke er blevet downloadet tidligere). Efter at TestProject SDK har downloadet den påkaldte handling, kører den handlingen i en separat proces.

Vi kan downloade en TestProject addon proxy fra app.testproject.io webstedet ved at følge disse trin:

Først , vi skal vælge den tilføjelse, som vi vil bruge. App.testproject.io-webstedet har en tilføjelsesbutik, der giver os mulighed for at downloade vores private tilføjelser og tilføjelser, som deles af de andre medlemmer af TestProject-fællesskabet. Denne butik har også en søgefunktion, som giver os en nem måde at finde tilføjelser, som ikke er opført på hovedsiden af ​​tilføjelsesbutikken.

Når vi har fundet en tilføjelse, vi vil bruge, skal vi åbne downloaddialogen ved at klikke på det element, der viser de grundlæggende oplysninger om tilføjelsen.

Følgende figur illustrerer layoutet af 'Addons'-siden (hovedsiden af ​​addon-butikken):

Men fordi vi ønsker at bruge den brugerdefinerede tilføjelse, som vi skrev i de tidligere dele af min TestProject-tutorial, skal vi åbne siden 'Mine tilføjelser' og åbne downloaddialogen for vores brugerdefinerede tilføjelse (Blog Search Addon).

Følgende figur illustrerer layoutet af siden 'Mine tilføjelser':

Anden , skal vi downloade addon-proxy-jar-filen ved at klikke på 'Proxy'-linket, der findes fra 'Downloads'-sektionen i den modale dialog.

Følgende figur illustrerer dette trin:

Vi har nu downloadet jar-filen, der indeholder vores addon-proxy. Dernæst vil vi finde ud af, hvordan vi kan tilføje vores addon-proxy til klassestien.

Tilføjelse af den downloadede tilføjelsesproxy til klassestien

Før vi kan bruge handlingerne fundet fra den downloadede jar-fil, skal vi tilføje jar-filen til vores klassesti. Vi kan gøre dette ved at følge disse trin:

Først , skal vi kopiere jar-filen (blog.search.addon.proxy.jar ) til libs bibliotek, der findes fra rodmappen til vores Gradle-projekt. Efter at vi har kopieret vores jar-fil til libs mappe, skal dens indhold se ud som følger:

libs
|__ blog.search.addon.proxy.jar
|__ io.testproject.sdk.java.jar

Anden , fordi vi vil skrive kode, der bruger klasserne fundet fra blog.search.addon.proxy.jar fil, skal vi tilføje denne jar-fil til compile afhængighedskonfiguration. Efter at vi har foretaget de nødvendige ændringer til vores build.gradle fil, dens dependencies blok ser ud som følger:

dependencies {
 compile files('libs/blog.search.addon.proxy.jar')
 tpsdk files('libs/io.testproject.sdk.java.jar')
}

Vi har nu tilføjet vores addon proxy jar til vores classpath. Lad os gå videre og finde ud af, hvordan vi kan skrive test, der bruger tilpassede TestProject-handlinger.

Skrivning af testklasser, der bruger testprojekthandlinger

Lad os skrive disse to testcases til søgefunktionen på min blog:

  • Vi skal sikre, at søgeresultatsiden har den forventede titel.
  • Vi skal bekræfte, at søgeresultatsiden viser mindst ét ​​søgeresultat.

Før vi kan skrive vores klasser, skal vi finde ud af, hvordan vi kan skrive kode, der kører TestProject-handlinger. Dernæst vil vi finde ud af, hvordan vi kan skrive denne kode.

Kørsel af testprojekthandlinger

Vi kan køre en TestProject-handling ved at kalde executeProxy() metode for WebTestHelper klasse. Når vi bruger denne metode, skal vi vide disse tre ting:

  • Det tager den påkaldte handling (en ActionProxy objekt) som en metodeparameter.
  • Det returnerer en værdi af ExecutionResult enum. Returværdien for executeProxy() metode angiver resultatet af den påkaldte handling (ExecutionResult.PASSED eller ExecutionResult.FAILED ).
  • Det kan give en kontrolleret forventning (en Exception). objekt).

Med andre ord, når vi kalder execute() metode, skal vi skrive fejlhåndteringskode, som sikrer, at:

  • Vores test mislykkes, hvis execute() metode returnerer ExecutionResult.FAILED .
  • Vores test mislykkes, hvis execute() metode kaster en undtagelse.

Problemet er, at vi ikke kan tage os af disse ting i vores testklasser, fordi vi ikke ønsker at tilføje dubletkode til vores testsuite. Det er derfor, vi er nødt til at oprette en hjælpeklasse, der kan køre TestProject-handlinger og håndtere fejl forårsaget af de påkaldte handlinger.

Vi kan skrive denne hjælpeklasse ved at følge disse trin:

Først , skal vi oprette en pakke privat klasse kaldet ActionRunner . Efter at vi har oprettet denne klasse, ser dens kildekode ud som følger:

class ActionRunner {

}

Anden , skal vi tilføje en final WebTestHelper feltet til ActionRunner klasse og implementer en konstruktør, der sætter værdien af ​​WebTestHelper felt ved at bruge konstruktørinjektion. Efter at vi har implementeret vores konstruktør, kildekoden til ActionRunner klasse ser ud som følger:

import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

class ActionRunner {

 private final WebTestHelper webTestHelper;

 ActionRunner(WebTestHelper webTestHelper) {
 this.webTestHelper = webTestHelper;
 }
}

Tredje , skal vi tilføje en privat privat runAction() metode til ActionRunner klasse. Denne metode tager en ActionProxy objekt som en metodeparameter, og det kan kaste en FailureException . Efter at vi har tilføjet denne metode til ActionRunner klasse, skal vi implementere det ved at følge disse trin:

  1. Kør TestProject-handlingen.
  2. Hvis den påkaldte handling returnerede ExecutionResult.FAILED , smid en FailureException der ikke består vores test.
  3. Hvis den påkaldte handling gav en Exception , smid en FailureException der ikke består vores test.

Efter at vi implementerede runAction() metode, kildekoden til ActionRunner klasse ser ud som følger:

 
import io.testproject.java.sdk.v2.addons.proxy.ActionProxy;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

class ActionRunner {

 private final WebTestHelper webTestHelper;

 ActionRunner(WebTestHelper webTestHelper) {
 this.webTestHelper = webTestHelper;
 }

 void runAction(ActionProxy proxy) throws FailureException {
 try {
 ExecutionResult result = webTestHelper.executeProxy(proxy);
 if (result == ExecutionResult.FAILED) {
 throw new FailureException(String.format(
 "The invocation of the action proxy: %s failed ",
 proxy.getDescriptor().getClassName()
 ));
 }
 } 
 catch (Exception e) {
 throw new FailureException(e.getMessage(), e);
 }
 }
}

Vi er nu klar til at skrive vores testklasser. Lad os gå videre og finde ud af, hvordan vi kan sikre, at søgeresultatsiden har den forventede titel.

Test 1:Søgeresultatsiden har den forventede titel

Når vi vil sikre, at søgeresultatsiden har den forventede titel, skal vi skrive vores testklasse ved at følge disse trin:

Først , skal vi oprette en ny testklasse og konfigurere navnet og beskrivelsen af ​​vores testcase. Efter at vi har oprettet en ny testklasse, ser dens kildekode ud som følger:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.tests.WebTest;

@Test(
 name = "The search result page must have the expected title",
 description = "Verify that the search result page has the expected title"
)
public class BlogSearchResultTitleTest implements WebTest {
 
}

Anden , skal vi tilføje tre inputparametre til vores testklasse:

  • searchPageUrl angiver URL'en på den side, der viser søgeformularen.
  • searchTerm definerer den brugte søgeterm.
  • expectedSearchResultPageTitle angiver den forventede titel på søgeresultatsiden.

Efter at vi har tilføjet disse inputparametre til vores testklasse, ser dens kildekode ud som følger:

import io.testproject.java.annotations.v2.Parameter;
import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.tests.WebTest;

@Test(
 name = "The search result page must have the expected title",
 description = "Verify that the search result page has the expected title"
)
public class BlogSearchResultTitleTest implements WebTest {

 @Parameter(description = "Contains the url of the search page")
 private String searchPageUrl;

 @Parameter(description = "Contains the submitted search term")
 private String searchTerm;

 @Parameter(description = "Contains the expected title of the search result page")
 private String expectedSearchResultPageTitle;
}

Tredje , skal vi implementere execute() metoden for WebTest grænseflade ved at følge disse trin:

  1. Åbn søgesiden.
  2. Ryd søgefeltet ved at bruge ClearBlogSearchFieldAction klasse, som vi oprettede i en tidligere del af denne øvelse.
  3. Send søgeformularen ved at bruge BlogSearchAction klasse, som vi oprettede i en tidligere del af denne øvelse.
  4. Sørg for, at søgeresultatsiden har den forventede titel.

Efter at vi har implementeret execute() metoden for WebTest interface, ser kildekoden til vores testklasse således ud:

import io.testproject.java.annotations.v2.Parameter;
import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.drivers.WebDriver;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;
import io.testproject.proxy.addon.BlogSearchAddon;
import io.testproject.proxy.addon.net.petrikainulainen.testproject.addon.BlogSearchAction;
import io.testproject.proxy.addon.net.petrikainulainen.testproject.addon.ClearBlogSearchFieldAction;

@Test(
 name = "The search result page must have the expected title",
 description = "Verify that the search result page has the expected title"
)
public class BlogSearchResultTitleTest implements WebTest {

 @Parameter(description = "Contains the url of the search page")
 private String searchPageUrl;

 @Parameter(description = "Contains the submitted search term")
 private String searchTerm;

 @Parameter(description = "Contains the expected title of the search result page")
 private String expectedSearchResultPageTitle;

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 WebDriver browser = webTestHelper.getDriver();
 browser.get(searchPageUrl);

 ActionRunner actionRunner = new ActionRunner(webTestHelper);

 ClearBlogSearchFieldAction clearSearchField = BlogSearchAddon
 .getClearBlogSearchFieldAction();
 actionRunner.runAction(clearSearchField);

 BlogSearchAction blogSearch = BlogSearchAddon.blogSearchAction(searchTerm);
 actionRunner.runAction(blogSearch);

 return browser.getTitle().equals(expectedSearchResultPageTitle)
 ? ExecutionResult.PASSED
 : ExecutionResult.FAILED;
 }
}

Vi har nu skrevet en testklasse, som sikrer, at søgeresultatsiden har den forventede titel. Dernæst vil vi skrive en testklasse, som bekræfter, at søgeresultatsiden viser mindst ét ​​søgeresultat.

Test 2:Søgeresultatsiden viser mindst ét ​​søgeresultat

Når vi vil sikre, at søgeresultatsiden viser mindst ét ​​søgeresultat, skal vi skrive vores testklasse ved at følge disse trin:

Først , skal vi oprette en ny testklasse og konfigurere navnet og beskrivelsen af ​​vores testcase. Efter at vi har oprettet en ny testklasse, ser dens kildekode ud som følger:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.tests.WebTest;

@Test(
 name = "The search result page must display at least one search result",
 description = "Verify that the search result page displays at least one search result"
)
public class BlogSearchResultCountTest implements WebTest {
 
}

Anden , skal vi tilføje to inputparametre til vores testklasse:

  • searchPageUrl angiver URL'en på den side, der viser søgeformularen.
  • searchTerm definerer den brugte søgeterm.

Efter at vi har tilføjet disse inputparametre til vores testklasse, ser dens kildekode ud som følger:

import io.testproject.java.annotations.v2.Parameter;
import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.tests.WebTest;

@Test(
 name = "The search result page must display at least one search result",
 description = "Verify that the search result page displays at least one search result"
)
public class BlogSearchResultCountTest implements WebTest {

 @Parameter(description = "Contains the url of the search page")
 private String searchPageUrl;

 @Parameter(description = "Contains the submitted search term")
 private String searchTerm;
}

Tredje , skal vi implementere execute() metode for WebTest grænseflade ved at følge disse trin:

  1. Åbn søgesiden.
  2. Ryd søgefeltet ved at bruge ClearBlogSearchFieldAction klasse, som vi oprettede i en tidligere del af denne øvelse.
  3. Send søgeformularen ved at bruge BlogSearchAction klasse, som vi oprettede i en tidligere del af denne øvelse.
  4. Udtræk antallet af søgeresultater fra søgeresultatsiden ved at bruge BlogSearchResultFinderAction klasse, som vi oprettede i en tidligere del af denne øvelse.
  5. Sørg for, at søgeresultatsiden viser mindst ét ​​søgeresultat.

Efter at vi har implementeret execute() metoden for WebTest interface, ser kildekoden til vores testklasse således ud:

import io.testproject.java.annotations.v2.Parameter;
import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.drivers.WebDriver;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;
import io.testproject.proxy.addon.BlogSearchAddon;
import io.testproject.proxy.addon.net.petrikainulainen.testproject.addon.BlogSearchAction;
import io.testproject.proxy.addon.net.petrikainulainen.testproject.addon.BlogSearchResultFinderAction;
import io.testproject.proxy.addon.net.petrikainulainen.testproject.addon.ClearBlogSearchFieldAction;

@Test(
 name = "The search result page must display at least one search result",
 description = "Verify that the search result page displays at least one search result"
)
public class BlogSearchResultCountTest implements WebTest {

 @Parameter(description = "Contains the url of the search page")
 private String searchPageUrl;

 @Parameter(description = "Contains the submitted search term")
 private String searchTerm;

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 WebDriver browser = webTestHelper.getDriver();
 browser.get(searchPageUrl);

 ActionRunner actionRunner = new ActionRunner(webTestHelper);

 ClearBlogSearchFieldAction clearSearchField = BlogSearchAddon
 .getClearBlogSearchFieldAction();
 actionRunner.runAction(clearSearchField);

 BlogSearchAction blogSearch = BlogSearchAddon.blogSearchAction(searchTerm);
 actionRunner.runAction(blogSearch);

 BlogSearchResultFinderAction searchResults = BlogSearchAddon
 .getBlogSearchResultFinderAction();
 actionRunner.runAction(searchResults);

 return searchResults.actualSearchResultCount > 0 
 ? ExecutionResult.PASSED 
 : ExecutionResult.FAILED;
 }
}

Vi har nu skrevet to testcases, som demonstrerer, hvordan vi kan bruge TestProject-handlinger i vores testklasser. Lad os opsummere, hvad vi lærte af dette blogindlæg.

Oversigt

Dette blogindlæg har lært os seks ting:

  • Hvis vi vil bruge en brugerdefineret tilføjelse fundet fra TestProject addon butikken, skal vi downloade en addon proxy jar-fil.
  • En addon-proxy er en komponent, der giver os mulighed for at påkalde de faktiske handlinger, der leveres af et TestProject-tilføjelsesprogram.
  • Hvis vi ønsker at bruge en tilføjelse i vores testklasser, skal vi tilføje den downloadede addon proxy jar-fil til compile afhængighedskonfiguration.
  • Vi kan køre en TestProject-handling ved at kalde executeProxy() metode for WebTestHelper klasse.
  • Hvis vi ikke ønsker at tilføje dublet fejlhåndteringskode til vores testpakke, skal vi oprette en hjælpeklasse, der kan køre TestProject-handlinger og håndtere fejl forårsaget af de påkaldte handlinger.
  • Vi bør oprette den påkaldte ActionProxy objekter ved at bruge fabriksmetoderne fra [AddonName]Addon klasse.

Java tag