valores repetir para numeros numero imprimir generar entre entero codigo aleatorios aleatorio javascript selenium testing protractor end-to-end

repetir - random javascript entre dos numeros



Detectar automáticamente el acoplamiento de prueba en el transportador(orden aleatorio de ejecución de prueba) (3)

¿Intentaste barajar los bloques "it" como abajo?

var shuffle = function (items) { var item, randomIndex; for(var i = 0; i < items.length; i++){ randomIndex= (Math.random() * items.length) | 0; item = items[i]; items[i] = items[randomIndex]; items[randomIndex] = item; } } describe(''Suite'', function() { it("should a", function () { console.log("execute a"); }); it("should b", function () { console.log("execute b"); }); it("should c", function () { console.log("execute c"); }); shuffle(this.children); // shuffle the ''it'' blocks });

Fuente: ¿Se pueden ejecutar las pruebas del transportador en un orden aleatorio?

El problema:

Tenemos una base de código de prueba bastante grande. De vez en cuando, en lugar de ejecutar todas las pruebas, las ejecutamos individualmente o en paquetes. Pero, a veces, vemos fallas inesperadas en las pruebas debido a que las pruebas están interconectadas, acopladas. Por ejemplo, una prueba asume que hay datos creados por una prueba anterior: la ejecución individual de este tipo de prueba fallará.

La pregunta:

¿Es posible detectar automáticamente qué pruebas del transportador están acopladas en el proyecto?

Nuestra idea actual es aleatorizar de alguna manera el orden de ejecución de la prueba o recoger aleatoriamente un paquete de pruebas de todas las pruebas disponibles y verificar si no hay fallas. Por lo tanto, la otra pregunta : ¿es posible cambiar / aleatorizar el descubrimiento de prueba del transportador y cambiar el orden de ejecución de la prueba?

Inspirado en el blogpost "Finding testing coust " de Ned Batchelder y en el plugin de nose-randomly del corredor de pruebas de Python:

La aleatoriedad en las pruebas puede ser bastante poderosa para descubrir fallas ocultas en las propias pruebas, así como para darle un poco más de cobertura a su sistema.

Al ordenar aleatoriamente las pruebas, se reduce el riesgo de sorprendentes dependencias entre las pruebas, una técnica que se utiliza en muchos lugares, por ejemplo, el googletest de C ++ de Google, googletest .


Puede ejecutar pruebas al azar (a nivel de archivo) configurando la propiedad random en su configuración . También puedes configurar tu sal / semilla para que sea reproduciblemente aleatoria.

/** * If true, run specs in semi-random order */ random?: boolean, /** * Set the randomization seed if randomization is turned on */ seed?: string,

También puede activar shardTestFiles ( shardTestFiles prueba paralelas), lo que también debería ser muy revelador en cuanto a qué tan juntas están sus pruebas.


Un problema es que es probable que no tenga idea de cómo podrían acoplarse las pruebas. Si una prueba hizo referencia a algunas variables de otra prueba, es posible que pueda encontrarlas automáticamente, pero esa es solo una forma en que las pruebas pueden estar acopladas y probablemente no sea un escenario probable.

Mi primer pensamiento fue ejecutarlos individualmente y ver cuáles fallan. El problema es que si no está limpiando el estado entre las pruebas, puede cambiar el orden (aleatorizarlas, como sugirió) pero si la prueba 50 espera que los datos de la prueba 20 se configuren pero en el nuevo orden, la prueba 20 aún se ejecuta antes prueba 50 ... prueba 50 todavía pasará. Encontrará algunos pero probablemente no todos hasta que los ejecute todos en un orden aleatorio varias veces.

No describe su aplicación, pero mi segundo pensamiento fue que si había una manera de volver a una lista limpia entre las pruebas, debería poder encontrar las pruebas que se basan en otras pruebas para configurar los datos. Estoy un poco sorprendido de que no esté haciendo eso ya, pero si hay un largo proceso de configuración que debe ejecutarse para instalar una pizarra limpia, etc., eso podría ser un problema. Dependiendo de su sistema, es posible que pueda crear una instantánea de una máquina virtual después de una instalación limpia y restaurarla para volver a limpiarla "rápidamente" o puede revertir tablas SQL, etc. Realmente depende de su sistema y sin más Detalles sobre el sistema, es difícil ofrecer consejos.

Otra opción es ir a aquellos que escribieron o mantuvieron las pruebas y hacer que se autoidentifiquen las pruebas que poseen que están acopladas y corregirlas. Es probable que esto no los encuentre a todos, pero podría ser un inicio semi-rápido.

Oh ... Acabo de pensar en una cosa más. Si pudiera invertir el orden de ejecución de la prueba, debería ser mejor que aleatorizar la ejecución. Con el orden inverso, NINGUNA prueba se ejecutaría después de su anterior predecesor y debería poder encontrarlos todos de una vez.