Didi de código abierto Super-jacoco: documentación de la plataforma de recopilación de cobertura de código java

Guía de Jumei: Super-Jacoco es una plataforma integral de recopilación de cobertura de código JAVA completa/diferencial basada en el desarrollo secundario de Jacoco y git, que puede recopilar datos de cobertura de código a bajo costo y sin intrusión; Super-Jacoco no solo admite la ejecución de JVM Además de la recopilación de cobertura del período de tiempo, también puede conectarse sin problemas con el entorno, recopilar la cobertura completa/incremental del código de período de tiempo personalizado del lado del servidor y proporcionar un informe de cobertura visual en HTML para ayudar en el análisis de cobertura y brindar soporte preciso. pruebas.

Se debe realizar un trabajo de análisis e iteración del producto a su alrededor, por lo que el comportamiento operativo en el terminal móvil es particularmente importante. Si se usa bien, puede mejorar la eficiencia y crear valor para el usuario y valor comercial. ¿Cómo podemos usarlo mejor? que hay de ellos

0. 

fondo

En el proceso de producción y entrega de software, utilizamos pruebas unitarias, pruebas de interfaz, pruebas funcionales y otros medios para garantizar la calidad del software; sin importar qué tipo de prueba signifique, es particularmente importante si el diseño del caso es integral y optimizado. Durante el proceso de prueba del proyecto real, el diseño del caso a menudo tiene los siguientes problemas:

1. Los estudiantes de desarrollo escribieron muchas pruebas unitarias, una parte de la lógica del código se ejecutó repetidamente y algunos escenarios o lógica de código anormal no se ejecutaron;

2. Los casos de prueba diseñados por los estudiantes de prueba se han revisado repetidamente, pero todavía hay escenarios anormales que no están cubiertos y hay pruebas omitidas;

3. Como método de regresión diaria, el caso de prueba de automatización de la interfaz no puede determinar si cubre toda la lógica del código y no se puede evaluar su confiabilidad.

Entonces, ¿cómo podemos utilizar el caso más simplificado para garantizar la exhaustividad de la prueba? En la actualidad, la industria reconoce más que el método es complementar el caso de respuesta analizando la tasa de cobertura del código modificado; investigamos las herramientas estadísticas de cobertura de código Java de código abierto de la industria, jacoco y EMMA, y descubrimos que tanto jacoco como EMMA solo admite la recopilación de cobertura de código completa y no puede satisfacer las demandas de un análisis preciso de la cobertura de código incremental. Por lo tanto, necesitamos urgentemente una herramienta que pueda recopilar cobertura de código para cambios.

1. 

Introducción a Super-jacoco

Super-Jacoco es una plataforma integral de recopilación de cobertura de código JAVA completa/diferencial basada en el desarrollo secundario de Jacoco y git, que puede recopilar datos de cobertura de código a bajo costo y sin intrusiones. Además de admitir la recopilación de cobertura durante el tiempo de ejecución de JVM, Super-Jacoco también puede interactuar sin problemas con el entorno para recopilar cobertura completa/incremental del código de período de tiempo personalizado del lado del servidor. También proporciona un informe de cobertura visual en formato html para ayudar en el análisis preciso de la cobertura y respaldar la implementación de pruebas precisas.

Colección de cobertura total/incremental de código de prueba único:

En el modo sobre la marcha, los datos de cobertura se pueden recopilar sin realizar modificaciones en el código de desarrollo;

Colección de cobertura completa/incremental de prueba funcional:

Integrado con la plataforma de implementación del entorno ebase, solo necesita agregar -javaagent:jacocoagent.jar=includes=com.* al comando de inicio de JAVA para recopilar datos de cobertura de pruebas funcionales;

Informe visual:

El informe de tasa de cobertura html visualizado ayuda en el análisis preciso de la situación de cobertura y respalda la implementación de pruebas precisas.

2. 

Principio super-jacoco

2.1 . Proceso general 

Para admitir la recopilación de cobertura incremental, debemos hacer dos cosas: 1) Obtener diferentes archivos de diferencias de código de versión; 2) Desarrollo secundario de jacoco para admitir parámetros de lista de métodos incrementales.

2.2   Obtener código incremental

Proceso principal: extraiga los códigos maestro (rama de referencia) y de característica (rama de prueba), y luego use JGit para comparar los códigos fuente de las dos ramas para obtener códigos incrementales. Los siguientes son algunos fragmentos de código:

2.3 La segunda transformación de jacoco admite parámetros de lista de métodos incrementales  

El análisis de JaCoCo de exec se realiza principalmente en el método analyseClass (byte final [] fuente) de la clase Analizador. Se llamará al método createAnalyzingVisitor para generar un visitante de clase ASM para su análisis. Continúe siguiendo el código y descubra que la lógica de cálculo de la sonda a nivel de método está en el método visitMethod de la clase ClassProbesAdapter. Por lo tanto, solo necesitamos modificar el método visitMethod para que solo analice los métodos recién agregados o modificados de cada clase extraída, y no procese clases y métodos no especificados. El fragmento de código central modificado es el siguiente: 

2.4 Ejecución  


Simplemente agregue -Djacoco.diffFile=lista de métodos de cambio al comando mvn ejecutado para recopilar la cobertura del código del método de cambio. Si no se pasa -Djacoco.diffFile o el parámetro Djacoco.diffFile está vacío, se recopila la cobertura completa de forma predeterminada.

2.5 Salida del informe  


El informe de cobertura se muestra en la siguiente figura. En la figura, es la clase de implementación de un determinado servicio. Hay 23 métodos en el código más reciente, pero solo se cubrirán y mostrarán 5 métodos que se han modificado o agregado:

3. 

característica

  • General : admite tanto la recopilación de cobertura de pruebas unitarias como la recopilación de cobertura de pruebas manuales; admite tanto la recopilación de cobertura completa como la recopilación de cobertura diferencial;

  • Sin intrusión : se adopta el modo sobre la marcha y los datos de cobertura se pueden recopilar sin ninguna modificación en el código de desarrollo;

  • Alta disponibilidad : Arquitectura distribuida, la máquina de tareas se puede expandir infinitamente, evitando cuellos de botella en el rendimiento cuando la máquina de tareas está inactiva o hay demasiadas tareas;

  • Visualización : proporcione informes de cobertura en formato html, que es muy legible.

4. 

arquitectura

5. 

cómo utilizar

▍5.1  Instalación e inicialización de la base de datos

5.1.1 Instale la base de datos mysql y ejecute el SQL de creación de tablas en el archivo sql/db.sql después de crear la base de datos

▍5.2  Compilar y empaquetar

5.2.1 Instalar JDK1.8, mavan3

5.2.2 clonar código, cambiar la base de datos y la configuración de gitlab en el archivo application.properties:

spring.datasource.url=jdbc:mysql://IP:puerto/nombre de base de datos?useUnicode=true&characterEncoding=utf8

    spring.datasource.nombre de usuario =

    pring.datasource.contraseña=

    gitlab.nombre de usuario =

    gitlab.contraseña=

5.2.3 Ejecute el paquete mvn -Dmaven.test.skip=true para generar super-jacoco.jar

▍5.3 Despliegue 

5.3.1 Ejecute "nohup java -jar super-jacoco.jar &" para iniciar el servicio de cobertura de código, el puerto predeterminado es 8899

▍5.4 Interfaz de recopilación de cobertura 

5.4.1 Interfaz de cobertura de prueba única

1)启动覆盖率收集
URL:/cov/triggerUnitCover
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","envType":"-Ptest"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:


2)获取覆盖率结果
URL:/cov/getUnitCoverResult
调用方法:GET
参数:uuid(String)
返回:
{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:

5.4.2 Interfaz de cobertura ambiental

1)启动覆盖率收集
URL:/cov/triggerEnvCov
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","address":"127.0.0.1","port":"8088"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:IP和port为模块部署服务器的IP和端口,在dump jacoco.exec时使用,需要提前把org.jacoco.agent-0.8.5-runtime.jar包拷贝到服务器:/home/xxx/目录,服务启动时需要添加启动参数:-javaagent:/home/xxx/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,address=*,port=18513


2)获取覆盖率结果
URL:/cov/getEnvCoverResult
调用方法:GET
参数:uuid(String)
返回:{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:

6. 

Resumir

En el contexto de la iteración empresarial rápida, las pruebas precisas serán la tendencia de desarrollo de las pruebas eficientes, y la cobertura del código es una parte importante de ellas. Super-jacoco hace que las estadísticas de cobertura del código Java sean convenientes y rápidas, lo cual es útil para la promoción y el desarrollo de pruebas precisas. ¡Bienvenido a unirte!

7. 

Dirección del proyecto GitHub

https://github.com/didi/super-jacoco

equipo de código abierto

Los miembros del equipo son todos del equipo técnico de Didi Car Service.

Otras lecturas


内容编辑 | Teeo联系我们 | [email protected]

Supongo que te gusta

Origin blog.csdn.net/DiDi_Tech/article/details/111399149#comments_27749267
Recomendado
Clasificación