Ir al contenido

Técnicas avanzadas de pruebas

Los conceptos avanzados de pruebas de software pueden ahorrarte mucho tiempo y esfuerzo. Repeato te ayuda a mejorar tus procesos de pruebas.

Crear una prueba a partir de bloques de construcción

Sección titulada «Crear una prueba a partir de bloques de construcción»

¿Alguna vez te has preguntado cómo crear pruebas sin repetir tareas? La automatización de pruebas permite registrar pruebas y reutilizarlas como quieras: una gran ventaja de las pruebas automatizadas frente a las manuales.

En este vídeo mostramos cómo dividir las pruebas en partes reutilizables. También explicaremos algunas posibilidades de scripting de Repeato y por qué puede ser útil hacer que los pasos de prueba sean opcionales. Nuestra aplicación bajo prueba es la lista de tareas «Asana». Probaremos a crear tareas.

Contenido del vídeo

  1. Automatizar la navegación a la pantalla correcta
  2. Automatizar la creación de una tarea
  3. Automatizar la eliminación de todas las tareas
  4. Unirlo todo en una sola prueba

Este es un ejemplo de un caso de automatización más complejo. Automatizamos un juego (reventar burbujas) con un par de «pasos de comprobación de contenido» opcionales y algunas líneas de código.

Consulta el código detallado que se describe a continuación.

Definir una función que se pueda usar en otros pasos

Sección titulada «Definir una función que se pueda usar en otros pasos»

Al definir una función, normalmente solo está disponible dentro del mismo paso. Queremos llamar a nuestra función desde otros pasos, así que debemos usar uno de los objetos de mayor duración para almacenarla. data es uno de esos objetos y podemos definir una función así:

data.checkLastMatchAndShoot = async function() {
// myCode goes here
}

Añadimos async porque usamos código asíncrono dentro de nuestra función. Básicamente, todas las funciones que se usan con await, deben envolverse en async funciones. De lo contrario, nuestro script fallará. Puedes leer más información sobre async / await aquí.

Obtener el resultado del último paso ejecutado

Sección titulada «Obtener el resultado del último paso ejecutado»

Después de ejecutar un paso opcional, podemos comprobar en nuestro script si el resultado devuelto fue satisfactorio. Podemos acceder al resultado de la ejecución del último paso mediante testRunner.lastStepResult.

También se puede comprobar cuántas coincidencias hubo (cuántas veces se encontró el objeto):

testRunner.lastStepResult.matches.length

Si no hubo coincidencias, es decir, no se encontraron pelotas de un color determinado, simplemente retornamos.

De lo contrario, ordenamos las coincidencias de arriba abajo. Esto es importante porque debemos distinguir entre la pelota del lanzador y las pelotas del campo de juego que están arriba.

Lo hacemos comprobando el valor de la posición y de la coincidencia:

// if y position of last match is lower than 70% of the screen height
if(lastMatch.position.y > 0.7)

Si encontramos una pelota de un color determinado, necesitamos saber en qué dirección lanzarla, ¿verdad?

Lo hacemos comprobando el conjunto de resultados de las coincidencias y examinando la coincidencia anterior (la que está justo encima de la pelota del lanzador)

const oneBeforeLastMatch = matches[matches.length - 2]

Podemos usar esta coincidencia para definir la dirección del lanzamiento. Para lanzar, indicamos un gesto de arrastre desde la pelota del lanzador hasta la pelota del mismo color que está justo encima.

Para tener una visión general, este es el código completo:

data.checkLastMatchAndShoot = async function() {
var matches = testRunner.lastStepResult.matches
if(matches.length === 0){ // no ball of this color found
return false
}
// we sort the matches from top to bottom
matches = matches.sort((match1, match2) => match1.position.y - match2.position.y)
// get the most bottom match
const lastMatch = matches[matches.length - 1]
// if most bottom match is not in the field, but at the very bottom, this means that it is inside the launcher
if(lastMatch.position.y > 0.7) {
const oneBeforeLastMatch = matches[matches.length - 2]
testRunner.deviceConnector.sendDown(lastMatch.position.x, lastMatch.position.y)
await sleep(1000)
testRunner.deviceConnector.sendMove(oneBeforeLastMatch.position.x, oneBeforeLastMatch.position.y)
await sleep(1000)
testRunner.deviceConnector.sendUp()
return true
} else {
return false
}
}
ES