Saltar al contenido

¿Cómo ejecutar las pruebas de golang secuencialmente?

Presta atención porque en este artículo hallarás la respuesta que buscas.Este escrito ha sido probado por nuestros especialistas para asegurar la calidad y exactitud de nuestro contenido.

Solución:

No puede / no debe confiar en el orden de ejecución de la prueba. El orden en que se ejecutan las pruebas no está definido, y con el uso de indicadores de prueba es posible excluir la ejecución de las pruebas, por lo que no tiene garantía de que se ejecuten en absoluto.

Por ejemplo, el siguiente comando solo ejecutará pruebas cuyo nombre contenga un 'W' letra:

go test -run W

También tenga en cuenta que si algunas funciones de prueba se marcan a sí mismas como elegibles para ejecución paralela usando el T.Parallel() método, la herramienta go reordenará las pruebas para ejecutar primero pruebas no paralelas y luego ejecutar pruebas paralelas en paralelo bajo ciertas circunstancias (controladas por indicadores de prueba como -p). Puede ver ejemplos de esto en esta respuesta: ¿Las pruebas se ejecutan en paralelo en Go o una por una?

Las pruebas deben ser independiente de cada uno. Si una función de prueba tiene requisitos previos, eso no se puede hacer/implementar en otra función de prueba.

Opciones para realizar tareas adicionales antes de ejecutar una función de prueba:

  • Puede ponerlo en la función de prueba en sí
  • Puedes ponerlo en un paquete. init() función, en el _test.go archivo en sí. Esto se ejecutará una vez antes de que comience la ejecución de las funciones de prueba.
  • Puede optar por implementar un TestMain() función que se llamará primero y en la que puede realizar una configuración adicional antes de llamar M.Run() para desencadenar la ejecución de funciones de prueba.
  • Puede mezclar las opciones anteriores.

En su caso en paquete init() o TestMain() debe verificar si su base de datos está inicializada (hay registros de prueba insertados), y si no, inserte los registros de prueba.

Tenga en cuenta que, a partir de Go 1.7, puede utilizar subpruebas en las que defina el orden de ejecución de las subpruebas. Para obtener más información, consulte la publicación del blog: Uso de subpruebas y subpuntos de referencia, y el documento del paquete del testing paquete.

Aparte de las bibliotecas de terceros como Convey y Ginkgo, con Golang 1.7 simple puede ejecutar pruebas secuencialmente. Usted puede leer más aquí

func TestFoo(t *testing.T) 
    // 
    t.Run("A=1", func(t *testing.T)  ... )
    t.Run("A=2", func(t *testing.T)  ... )
    t.Run("B=1", func(t *testing.T)  ... )
    // 

Y puedes ejecutarlos condicionalmente con:

go test -run ''      # Run all tests.
go test -run Foo     # Run top-level tests matching "Foo", such as "TestFooBar".
go test -run Foo/A=  # For top-level tests matching "Foo", run subtests matching "A=".
go test -run /A=1    # For all top-level tests, run subtests matching "A=1".

Así que digamos que tienes un user paquete de una API REST que desea probar. Debe probar el controlador de creación para poder probar el controlador de inicio de sesión. Por lo general, tendría esto en el user_test.go

type UserTests struct  Test *testing.T
func TestRunner(t *testing.T) 

    t.Run("A=create", func(t *testing.T) 
        test:= UserTestsTest: t
        test.TestCreateRegularUser()
        test.TestCreateConfirmedUser()
        test.TestCreateMasterUser()
        test.TestCreateUserTwice()
    )
    t.Run("A=login", func(t *testing.T) 
        test:= UserTestsTest: t
        test.TestLoginRegularUser()
        test.TestLoginConfirmedUser()
        test.TestLoginMasterUser()
    )


Luego puedo agregar métodos al tipo UserTest que no serán ejecutados por el go test comando en cualquier _test.go expediente

func (t *UserTests) TestCreateRegularUser() 
    registerRegularUser := util.TableTest
        Method:      "POST",
        Path:        "/iot/users",
        Status:      http.StatusOK,
        Name:        "registerRegularUser",
        Description: "register Regular User has to return 200",
        Body: SerializeUser(RegularUser),
    
    response := util.SpinSingleTableTests(t.Test, registerRegularUser)
    util.LogIfVerbose(color.BgCyan, "IOT/USERS/TEST", response)

Para aquellos que, como yo, tienen problemas debido a múltiples pruebas simultáneas que se ejecutan simultáneamente. Encontré una manera de limitar el número máximo de pruebas que se ejecutan en paralelo:

go test -p 1

Con esto, su prueba se ejecutará secuencialmente una por una.

Fuente

Acuérdate de que tienes la capacidad de añadir un diagnóstico si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *