ir a probar

prueba de paquetes

  • testing brinda soporte para pruebas automatizadas de paquetes Go. Con go testel comando , cualquier función del formulario se puede ejecutar
    automáticamente.Para escribir un nuevo conjunto de pruebas, se debe crear un archivo con un nombre que termine en _test.go, que contiene TestXxxla función , como se describe anteriormente.
    Coloque este archivo en el mismo paquete que el que se está probando. Este archivo se excluirá del paquete normal, pero se incluirá cuando se ejecute el comando "ir a prueba".
    Los parámetros comunes con parámetros para la prueba go son:
    • -bench regexp ejecuta los benchmarks correspondientes, por ejemplo -bench=.;
    • -cover Encienda la cobertura de prueba;
    • -run regexp solo ejecuta la función que coincide con regexp, por ejemplo -run=Array luego ejecuta la función que contiene el comienzo de Array;
    • -v Mostrar comandos detallados para la prueba.
    • -benchmem: Analiza la memoria
    • -memprofile: especifica el archivo de resultados del análisis de memoria como memprofile.out
    • -cpuprofile: especifica el archivo de resultados del análisis de la CPU como profile.out
    • El parámetro -o especifica el programa ejecutable binario generado y ejecuta la prueba. El programa no se eliminará después de la prueba.
    • El parámetro -cpu proporciona una lista de la cantidad de CPU. Después de proporcionar esta lista, la prueba establecerá GOMAXPROCS de acuerdo con la cantidad de CPU especificada en esta lista y las probará por separado.
    • -count especifica el número de veces que se ejecuta cada prueba y se ejecuta una vez de forma predeterminada.
    • -timeout La prueba se agota y se cierra. De forma predeterminada, si la ejecución de la prueba supera los 10 minutos, se agotará y se cerrará.
命令使用
    go test -v -cpuprofile cpu.out -memprofile mem.out  // 测试生成内存和cpu文件

análisis de archivos generados pprof

go tool pprof -http :8080 profile.out # 获取CPU文件分析结果
通过 http://localhost:8081/ui/ 访问网页

go tool pprof -http=":8081" memprofile.out # 分析内存

Para obtener parámetros más detallados, consulte: ir a ayuda testflag


tipo Formato efecto
función de prueba El nombre de la función tiene el prefijo Prueba Probar si algún comportamiento lógico del programa es correcto
función de referencia El nombre de la función tiene el prefijo Benchmark Rendimiento de la función de prueba
función de ejemplo El nombre de la función tiene el prefijo Ejemplo Proporcione documentación de ejemplo para la documentación.
func TestXxx(*testing.T){}
func BenchmarkXxx(*testing.B){}
func ExampleXxxx(){}
其中 Xxx 可以是任何字母数字字符串(但第一个字母不能是 [a-z]),用于识别测试例程。

Ejemplo

vim hello_test.go

package main
import "testing"

# Test
func TestHello(t *testing.T) {
    got := Abs(-1)
    if got != 1 {
        t.Errorf("Abs(-1) = %d; want 1", got)
    }
    // t.Fail(): 将当前测试标识为失败,但是仍继续执行该测试。
}
    
# Benchmark 
func BenchmarkHello(b *testing.B) {
     // 基准函数会运行目标代码 b.N 次。在基准执行期间,会调整 b.N 直到基准测试函数持续足够长的时间。
    for i := 0; i < b.N; i++ {
        fmt.Sprintf("hello")
    }
}

# Example 
该包还运行并验证示例代码。示例函数可以包括以 "Output:" 开头的行注释,并在运行测试时与函数的标准输出进行比较。 (比较时会忽略前导和尾随空格。)
func ExampleHello(){
      fmt.Println("hello")
      // Output: hello
}

Principal

Los procedimientos de prueba a veces requieren una configuración o desmontaje adicional antes o después de la prueba.
A veces, las pruebas también necesitan controlar el código que se ejecuta en el subproceso principal. Para admitir estos y otros casos, si el archivo de prueba contiene la función:

func TestMain(m *testing.M)

luego, las pruebas generadas llamarán a TestMain(m) en lugar de ejecutar las pruebas directamente.
TestMain se ejecuta en la rutina principal y puede realizar cualquier configuración y desmontaje antes y después de llamar a m.Run. os.Exit debe llamarse con el valor de retorno de m.Run como argumento.

Ejemplo:

go test 如果遇到了此函数,首先调用此函数
func TestMain(m *testing.M) {
	# call flag.Parse() here if TestMain uses flags
        # 如果 TestMain 使用了 flags,这里应该加上 flag.Parse()
	os.Exit(m.Run())  # 要继续接着执行其他测试,需要执行此语句,否则会直接执行完毕。
}

tipo T

T es un tipo pasado a la función de prueba, que se usa para administrar el estado de la prueba y admitir el formateo de los registros de prueba. Los registros de prueba se acumulan a medida que se ejecutan las pruebas y se vuelcan a la salida estándar cuando se completan las pruebas.

Una prueba finaliza cuando su función de prueba regresa, o cuando una función de prueba llama a FailNow, Fatal, Fatalf, SkipNow, Skip o Skipf. Al igual que los métodos paralelos, estos métodos mencionados anteriormente solo se pueden llamar desde la rutina que ejecuta la función de prueba.

En cuanto a otros métodos de informes, como las variantes de Log y Error, se pueden llamar simultáneamente en múltiples goroutines.

tipo B

B es un tipo pasado a la función de referencia que gestiona el comportamiento de tiempo de la referencia e indica cuántas veces se debe ejecutar la prueba de forma iterativa.

Un punto de referencia finaliza cuando su función de punto de referencia regresa, o cuando su función de punto de referencia llama a cualquiera de los métodos FailNow, Fatal, Fatalf, SkipNow, Skip o Skipf. En cuanto a otros métodos de informes, como las variantes de Log y Error, se pueden llamar simultáneamente en otras rutinas.

Al igual que las pruebas unitarias, los puntos de referencia acumulan registros a medida que se ejecutan y vuelcan los registros al error estándar cuando se completan las pruebas. Pero a diferencia de la prueba unitaria, para evitar que el resultado de la prueba comparativa se vea afectado por la operación de impresión del registro, la prueba comparativa siempre imprimirá el registro.

Supongo que te gusta

Origin blog.csdn.net/weixin_56766616/article/details/129955811
Recomendado
Clasificación