Java >> Java tutorial >  >> Tag >> JUnit

Bestem udførelsestiden for JUnit-tests

1. Oversigt

Vores builds kører ofte en masse automatiserede testcases til vores projekt. Disse omfatter enheds- og integrationstests. Hvis udførelsen af ​​testpakken tager lang tid, vil vi måske optimere vores testkode eller spore tests, der tager for lang tid.

I dette selvstudie lærer vi et par måder at bestemme udførelsestiden for vores testcases og testpakker.

2. JUnit-eksempler

For at demonstrere rapporteringsudførelsestider, lad os bruge nogle eksempler på testcases fra forskellige lag af testpyramiden. Vi simulerer testcases varighed med Thread.sleep() .

Vi implementerer vores eksempler i JUnit 5. De tilsvarende værktøjer og teknikker gælder dog også for testcases skrevet med JUnit 4.

Først, her er en triviel enhedstest:

@Test
void someUnitTest() {

    assertTrue(doSomething());
}

For det andet, lad os få en integrationstest, der tager længere tid at udføre:

@Test
void someIntegrationTest() throws Exception {

    Thread.sleep(5000);
    assertTrue(doSomething());
}

Endelig kan vi simulere et langsomt end-to-end brugerscenarie:

@Test
void someEndToEndTest() throws Exception {

    Thread.sleep(10000);
    assertTrue(doSomething());
}

I resten af ​​artiklen udfører vi disse testcases og bestemmer deres eksekveringstider .

3. IDE JUnit Runner

Den hurtigste måde at finde udførelsestiden for en JUnit-test på er at bruge vores IDE . Da de fleste IDE'er kommer med indlejret JUnit-løber, udfører og rapporterer de testresultaterne.

De to mest populære IDE'er, IntelliJ og Eclipse, har indlejrede JUnit-løbere.

2.1. IntelliJ JUnit Runner

IntelliJ giver os mulighed for at udføre JUnit-testcases ved hjælp af run/debug-konfigurationer. Når vi har udført testene, viser løberen teststatus sammen med eksekveringstiden:

Da vi udførte alle tre af vores eksempeltestcases, kan vi se den samlede eksekveringstid samt den tid, det tager for hver testcase .

Vi skal muligvis også gemme sådanne rapporter til fremtidig reference. IntelliJ giver os mulighed for at eksportere denne rapport i enten HTML- eller XML-format. Eksportrapportfunktionen er fremhævet på værktøjslinjen i skærmbilledet ovenfor.

2.2. Eclipse JUnit Runner

Eclipse har også en indlejret JUnit-løber . Vi kan udføre og finde ud af eksekveringstiden for en enkelt testcase eller en hel testsuite i testresultatvinduet:

Men i modsætning til IntelliJ-testløberen kan vi ikke eksportere en rapport fra Eclipse.

3. Maven Surefire Plugin

Maven Surefire-plugin'et bruges til at udføre enhedstests i testfasen af ​​byggelivscyklussen. Surefire-plugin'et er en del af standard Maven-konfigurationen. Men hvis en specifik version eller yderligere konfiguration er påkrævet, kan vi erklære det i pom.xml :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <excludes>
            <exclude>**/*IntegrationTest.java</exclude>
        </excludes>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
</plugin>

Der er tre måder at finde udførelsestiden for JUnit-tests, når du tester med Maven. Vi vil undersøge hver enkelt i de næste underafsnit.

3.1. Maven Build Logs

Surefire viser udførelsesstatus og tidspunkt for hver testsag i build-logfilerne:

[INFO] Running com.baeldung.execution.time.SampleExecutionTimeUnitTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.003 s 
- in com.baeldung.execution.time.SampleExecutionTimeUnitTest

Her viser den den kombinerede udførelsestid for alle tre testcases i testklassen.

3.2. Surefire testrapporter

Surefire-plugin'et genererer også en testudførelsesoversigt i .txt- og .xml-formater. Disse er generelt gemt i projektets målmappe . Surefire følger et standardformat for begge tekstrapporter:

----------------------------------------------
Test set: com.baeldung.execution.time.SampleExecutionTimeUnitTest
----------------------------------------------
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.003 s 
- in com.baeldung.execution.time.SampleExecutionTimeUnitTest

og XML-rapporter:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation=
          "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd"
	name="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
	time="15.003" tests="3" errors="0" skipped="0" failures="0">
	<testcase name="someEndToEndTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="9.996" />
	<testcase name="someIntegrationTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="5.003" />
	<testcase name="someUnitTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="0.002" />
</testsuite>

Selvom tekstformatet er mere velegnet til læsbarhed, er XML-formatet maskinlæsbart og kan importeres til visualisering i HTML og andre værktøjer .

3.3. Surefire HTML-rapporter

Vi kan se vores testrapport i HTML i vores browser ved at bruge maven-surefire-report-plugin :

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.0.0-M3</version>
        </plugin>
    </plugins>
</reporting>

Vi kan nu udføre mvn  kommandoer til at generere rapporten:

  1. mvn surefire-report:report – udfører testene og genererer en HTML-rapport
  2. mvn-websted – tilføjer CSS-styling til den HTML, der blev genereret i det sidste trin

Denne rapport viser eksekveringstiden for alle testcases i en klasse eller en pakke sammen med den tid, hver testcase tager.

4. Jenkins testresultater

Hvis vi kører CI i Jenkins, kan vi importere XML-filerne skrevet af surefire. Dette giver Jenkins mulighed for at markere en build som mislykket, hvis testene mislykkes, og vise os testtendenser og -resultater.

Når vi gennemgår testresultaterne i Jenkins, ser vi også udførelsestiderne.

For vores eksempel, efter installation af Jenkins, konfigurerer vi et job ved hjælp af Maven og de surefire XML-rapportfiler for at offentliggøre testresultaterne:

Vi tilføjede en post-build-handling i vores job for at offentliggøre testresultaterne. Jenkins vil nu importere XML-filerne fra den givne sti og tilføje denne rapport til build-udførelsesoversigten:

Dette kan også opnås ved hjælp af Jenkins pipeline builds.

5. Konklusion

I denne artikel diskuterede vi forskellige måder at bestemme udførelsestiden for JUnit-tests. Den mest umiddelbare metode er at bruge vores IDE's JUnit runner.

Vi brugte derefter maven-surefire-plugin at arkivere testrapporterne i tekst-, XML- og HTML-formater.

Til sidst leverede vi vores testrapportoutput til vores CI-server, som kan hjælpe os med at analysere, hvordan forskellige builds klarede sig.

Som altid er eksempelkoden fra denne artikel tilgængelig på GitHub.


Java tag