Erstellen Sie Testabdeckungsberichte mit JaCoCo

0. Warum einen Testabdeckungsbericht erstellen?

In unserer eigentlichen Arbeit muss das Programm nach Abschluss der Entwicklung den Testern zum Testen vorgelegt werden. Nach dem Testen durch die Tester kann der Code online in die Produktionsumgebung gestellt werden.

Eine Frage ist: Wie können wir nachweisen, dass das Programm vollständig getestet wurde und dass der gesamte Code im Programm getestet wurde? Natürlich kann die Codeabdeckung nach dem Testen nur als Referenz verwendet werden. Wenn die anfänglichen Anforderungen missverstanden werden, ist die Codeabdeckung unabhängig von der Höhe bedeutungslos.

Dann müssen Sie die Codeabdeckung einführen. Um die Codeabdeckung von C++ zu messen, können Sie GCover verwenden, und um die Codeabdeckung von Java zu messen, können Sie JaCoCo verwenden.

JaCoCo ist ein kostenloses Tool zur Erkennung der Java-Codeabdeckung, das die Testabdeckung der folgenden Inhalte zählen kann:

  • Unterrichtsabdeckung
  • Filialabdeckung
  • Abdeckung der zyklomatischen Komplexität
  • Zeilenabdeckung
  • Methodenüberschreibung
  • Klassenabdeckung

Die genaue Bedeutung der verschiedenen Deckungssätze entnehmen Sie bitte der offiziellen Dokumentation: https://www.jacoco.org/jacoco/trunk/doc/counters.html

Wenn Sie JaCoCo zum Generieren der Abdeckung verwenden, können Sie die On-the-Fly-Methode verwenden, die den Originalcode des Programms nicht beeinträchtigt. Sie müssen beim Starten des JAR-Pakets nur einen Parameter hinzufügen, um sicherzustellen, dass der Code getestet wird Der vom Tester erstellte Code stimmt mit der Online-Version überein. Der Code in der Produktionsumgebung ist konsistent.

1. Testklassen erstellen und in Dienste packen

Der Einfachheit halber wird die zu testende Klasse direkt auf Basis von Springboot erstellt und nutzt die RequestMapping-Annotation.

package com.test.JacocoTest.controler;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class Athytics {

    @GetMapping("/+/{a}/{b}")
    public int add(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        int result = 0;

        if(param1 < 0 || param1 > 1000){
            result = b - param1;
        }else{
            result = param1 + b - 1000;
        }
        return result;
    }

    @GetMapping("/-/{a}/{b}")
    public int minus(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 - b;
    }

    @GetMapping("/*/{a}/{b}")
    public int multiply(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 * b;
    }

    @GetMapping("///{a}/{b}")
    public int divide(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 / b;
    }

    @GetMapping("/c/{a}/{b}")
    public String power(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return String.valueOf(Math.round(Math.pow(param1, b)-1));
    }

    @GetMapping("/abs/{a}")
    public String abs(@PathVariable("a") Integer param1){
        return String.valueOf(Math.round(Math.abs(param1)));
    }
}

Erstellen Sie eine SpringBoot-Startup-Klasse:

package com.test.JacocoTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JacocoTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(JacocoTestApplication.class, args);

    }
}

Die Codestruktur ist sehr einfach

2. Starten Sie JaCoCo

2.1 Laden Sie das JaCoCo-Toolkit herunter

Sie können die offizielle Seite zum Herunterladen besuchen : https://search.maven.org/search?q=g:org.jacoco

Laden Sie einfach die beiden Pakete herunter, die Sie benötigen

Das Jacoco-Toolkit und die getesteten Pakete sind wie folgt

2.2 Starten Sie den zu testenden Dienst und fügen Sie JaCoCo zur Startanweisung hinzu

Geben Sie den Paketnamen an, der auf Testcode-Abdeckung überprüft werden muss, und erfassen Sie die IP und den Port der Jacoco-Abdeckungsdatei

java -javaagent:jacocoagent.jar=includes=com.test.*,output=tcpserver,port=6301,address=localhost,append=false -jar JacocoTest-1.0-SNAPSHOT.jar

3. Testfälle ausführen

Da das Springboot-Entwicklungsframework verwendet wird, können Sie den Browser zum Testen direkt öffnen.

Geben Sie die folgende URL ein: http://localhost:9999/+/12/25

4. Generieren Sie Dump- und Reset-Coverage-Statistiken

Geben Sie an, wo Jacoco-Statistiken abgerufen werden sollen. Die Adresse und der Port sollten mit den Startparametern in 2.2 übereinstimmen.

java -jar jacococli.jar dump --address localhost --port 6301 --destfile jacoco.exec --reset

Parameterbeschreibung:

--reset Setzen Sie nach dem Generieren der Abdeckungsdaten die vorherigen Statistiken zurück. Wenn Sie die Statistiken erneut erhalten möchten, müssen Sie die zuvor generierte Exec-Datei löschen.

--address IP des Hosts, auf dem jacocoagent.jar ausgeführt wird

--port Host-Überwachungsport, auf dem jacocoagent.jar ausgeführt wird

Nach der Ausführung wird die in der Anweisung angegebene Exec-Datei jacoco.exec im Verzeichnis generiert.

5. Erstellen Sie einen Abdeckungsbericht

Um einen Bericht zu erstellen, müssen Sie sowohl die Quelldatei als auch die kompilierte Bytecode-Datei angeben.

Geben Sie die Klassendatei und den Quellcodepfad an und generieren Sie einen Berichtsstil im HTML-Format.

java -jar jacococli.jar Bericht jacoco.exec --classfiles D:\Spring\JacocoTest\target\classes --sourcefiles D:\Spring\JacocoTest\src\main\java --html Protokoll

Durch Klicken auf index.html im Verzeichnis werden die Abdeckungsinformationen geöffnet

Geben Sie die Testklasse ein und Sie können die Abdeckung jeder Methode sehen.

Geben Sie die Methode ein und Sie können die Codeabdeckung sehen.

 

Grün ist vollständig bedeckt, Rot ist unbedeckt und Gelb ist teilweise bedeckt.

Um neue Abdeckungsdaten zu erhalten, müssen Sie die in Schritt 3 generierte Exec-Datei löschen, andernfalls handelt es sich um eine kumulative Abdeckung.

6 Hilfe

jacococli.jar-Nutzungshilfe

Verwendung: java -jar jacococli.jar report [] [--encoding] [--help] [--html

] [--name] [--quiet] [--sourcefiles] [--tabwith] [--xml]

: Liste der zu lesenden JaCoCo *.exec-Dateien

--classfiles: Speicherort der Java-Klassendateien

--csv: Ausgabedatei für den CSV-Bericht

--encoding: Quelldateikodierung (standardmäßig ist die Plattformkodierung

gebraucht)

--help: Hilfe anzeigen

--html

--name: Name, der für diesen Bericht verwendet wird

--quiet: Unterdrückt alle Ausgaben auf stdout

--sourcefiles: Speicherort der Quelldateien

--tabwith: Tabstopp-Breite für die Quellseiten (Standard 4)

--xml: Ausgabedatei für den XML-Bericht

Supongo que te gusta

Origin blog.csdn.net/QQ156881887/article/details/129336124
Recomendado
Clasificación