testing - usar - selenium manual
Uso de Selenium IDE con valores aleatorios (12)
Aquí hay una solución de una línea para generar una cadena aleatoria de letras en JS:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")
Útil para pegar en Selenium IDE.
¿Es posible crear pruebas de Selenium utilizando el complemento de Firefox que usa valores generados aleatoriamente para ayudar a hacer las pruebas de regresión?
La historia completa: me gustaría ayudar a mis clientes a realizar pruebas de aceptación al proporcionarles un conjunto de pruebas que utilizan algunos conocimientos para crear valores aleatorios (o al menos pseudoaleatorios) para la base de datos. Uno de los problemas con mis pruebas IDE de Selenium en este momento es que tienen valores predefinidos, lo que hace que algunos tipos de pruebas sean problemáticos.
Aquí otra variación en el ejemplo de Gmail:
<tr>
<td>runScript</td>
<td>emailRandom=document.getElementById(''email'');console.log(emailRandom.value);emailRandom.value="myEmail+" + Math.floor(Math.random()*11111)+ "@gmail.com";</td>
<td></td>
</tr>
En primer lugar, el Selenium IDE es bastante limitado, debería considerar cambiarse a Selenium RC, que puede ser controlado por Java o Perl o Ruby o algunos otros idiomas.
Usando solo Selenium IDE, puede incrustar expresiones JavaScript para derivar parámetros de comando. Debería poder escribir un número aleatorio en un campo de texto, por ejemplo:
type fieldName javascript{Math.floor(Math.random()*11)}
Actualización: puede definir funciones auxiliares en un archivo llamado "user-extensions.js". Ver la referencia de selenio .
Hice una pequeña mejora en la función generateRandomString. Cuando FF falla, es bueno poder usar el mismo número aleatorio de nuevo.
Básicamente, le pedirá que ingrese una cadena usted mismo. Si no ingresas nada, lo generará.
function generateRandomString( length, chars ) { var string=prompt("Please today''s random string",''''); if (string == '''') {for ( var i = 0 ; i < length ; i++ ) string += chars[ Math.floor( Math.random() * chars.length ) ]; return string;} else { return string;} }
Math.random puede ser "suficientemente bueno" pero, en la práctica, la clase Random es a menudo preferible a Math.random (). Usando Math.random, los números que obtienes pueden no ser completamente al azar. El libro "Effective Java Second Edition" cubre esto en el Item # 47.
Mientras daba sentido a la publicación de RajendraChary, pasé algún tiempo escribiendo una nueva extensión IDE de Selenium.
Mi extensión permitirá que el usuario llene una variable con texto lorem ipsum. Hay una serie de opciones configurables y se convirtió en un pequeño y agradable comando. Puede hacer cosas como "5 palabras | wordcaps | nomarks" para generar 5 palabras lorem ipsum, todas en mayúscula, sin puntuación.
Expliqué detalladamente la instalación y el uso, y proporcioné la base de código completa aquí.
Si echa un vistazo al código, tendrá una idea de cómo crear una funcionalidad similar.
Puede agregar usuario exentions.js para obtener los valores aleatorios.
Copie el código siguiente y guárdelo como extensión .js (randomgenerator.js) y agréguelo a las extensiones principales de Selenium (SeleniumIDE -> Opciones ---> pestaña general)
Selenium.prototype.doRandomString = function( options, varName ) {
var length = 8;
var type = ''alphanumeric'';
var o = options.split( ''|'' );
for ( var i = 0 ; i < 2 ; i ++ ) {
if ( o[i] && o[i].match( /^/d+$/ ) )
length = o[i];
if ( o[i] && o[i].match( /^(?:alpha)?(?:numeric)?$/ ) )
type = o[i];
}
switch( type ) {
case ''alpha'' : storedVars[ varName ] = randomAlpha( length ); break;
case ''numeric'' : storedVars[ varName ] = randomNumeric( length ); break;
case ''alphanumeric'' : storedVars[ varName ] = randomAlphaNumeric( length ); break;
default : storedVars[ varName ] = randomAlphaNumeric( length );
};
};
function randomNumeric ( length ) {
return generateRandomString( length, ''0123456789''.split( '''' ) );
}
function randomAlpha ( length ) {
var alpha = ''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ''.split( '''' );
return generateRandomString( length, alpha );
}
function randomAlphaNumeric ( length ) {
var alphanumeric = ''01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ''.split( '''' );
return generateRandomString( length, alphanumeric );
}
function generateRandomString( length, chars ) {
var string = '''';
for ( var i = 0 ; i < length ; i++ )
string += chars[ Math.floor( Math.random() * chars.length ) ];
return string;
}
Manera de usar
Command Target Value
----------- --------- ----------
randomString 6 x
type username ${x}
El código anterior genera 6 caracteres de cadena y los asigna a la variable x
El código en formato HTML se ve a continuación:
<tr>
<td>randomString</td>
<td>6</td>
<td>x</td>
</tr>
<tr>
<td>type</td>
<td>username</td>
<td>${x}</td>
</tr>
Selenium RC te brinda mucha más libertad que Selenium IDE, ya que puedes:
- (1) Ingrese cualquier valor a un cierto campo
- (2) Elija cualquier campo para probar en una determinada forma HTML
- (3) Elija cualquier orden / paso de ejecución para probar un cierto conjunto de campos.
Preguntaste cómo ingresar un valor aleatorio en un campo usando Selenium IDE, otras personas te han respondido cómo generar e ingresar valores aleatorios en un campo usando Selenium RC. Eso cae en la fase de prueba (1): "Ingrese cualquier valor en un campo determinado".
Con Selenium RC, puede hacer fácilmente la fase (2) y (3): probar cualquier campo en cualquier paso de ejecución mediante la programación en un lenguaje admitido como Java, PHP, CSharp, Ruby, Perl, Python.
A continuación se detallan los pasos para hacer la fase (2) y (3):
- Crea una lista de tus campos HTML para que puedas iterarlos fácilmente
- Cree una variable aleatoria para controlar el paso, digamos RAND_STEP
- Cree una variable aleatoria para controlar el campo, digamos RAND_FIELD
- [Eventualmente, cree una variable aleatoria para controlar el valor ingresado en un campo determinado, digamos RAND_VALUE, si desea hacer la fase (1)]
- Ahora, dentro de su algoritmo de fuzzing, itere primero a través de los valores de RAND_STEP, luego con cada iteración, itere a través de RAND_FIELD, luego itere por RAND_VALUE.
Vea mi otra respuesta sobre prueba de fuzzing, Selenium y prueba de caja blanca / negra
Un trazador de líneas para elegir al azar de un pequeño conjunto de alternativas:
javascript{[''brie'',''cheddar'',''swiss''][Math.floor(Math.random()*3)]}
Una solución más, que he copiado y pegado en cientos de pruebas:
<tr>
<td>store</td>
<td>javascript{var myDate = new Date(); myDate.getFullYear()+"-"+(myDate.getMonth()+1)+"-"+myDate.getDate()+"-"+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds()+myDate.getMilliseconds();}</td>
<td>S_Unique</td>
</tr>
<tr>
<td>store</td>
<td>Selenium Test InternalRefID-${S_Unique}</td>
<td>UniqueInternalRefID</td>
</tr>
<tr>
<td>store</td>
<td>Selenium Test Title-${S_Unique}</td>
<td>UniqueTitle</td>
</tr>
<tr>
<td>store</td>
<td>SeleniumEmail-${G_Unique}@myURL.com</td>
<td>UniqueEmailAddress</td>
</tr>
Cada conjunto de pruebas comienza estableciendo una serie de variables (si se trata de una suite grande, use un archivo separado como Set_Variables.html). Esas variables se pueden usar en toda la suite para establecer, probar y eliminar datos de prueba. Y dado que las variables usan la fecha en lugar de un número aleatorio, puede depurar su suite de pruebas buscando los objetos que comparten una fecha.
(Basado en la respuesta de Thilo) Puede mezclar literales y números aleatorios como este:
javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}
Gmail hace posible que automáticamente todo lo que use alias, por ejemplo, [email protected]
vaya a su dirección [email protected]
Multiplicar * 11111 para darte más valores aleatorios que 1 a 9 (en el ejemplo de Thilo)
<tr>
<td>store</td>
<td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '''').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>