jueves, 29 de diciembre de 2011

Buscar / reemplazar en Visual Studio, usando expresiones regulares. Capturando grupos.

Vamos a ver como se capturan los grupos usando expresiones regulares en Visual Studio.
A diferencia de otros entornos, los grupos no se capturan con ( ), sino con { }.
Para hacer referencia a los grupos capturados se emplea la misma notación que en notepad++: \1 para el primer grupo, \2 para el segundo,...

Por ejemplo queremos capturar el contenido de una cadena que empieza por 'a':

^{a.*}


Y queremos reemplazarla por una concatenación de dos cadenas como esas:
\1\1


Por ejemplo,
Entrada:
a2343
basdasd
qweds
afasd

Salida:
a2343a2343
basdasd
qweds
afasdafasd


Vía:
Referencia de buscar/reemplazar en MSDN.

lunes, 26 de diciembre de 2011

Chuleta para expresiones regulares

Vía: http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

Evitar que carguen tu página en un iframe

if((self.parent && !(self.parent===self)) && (self.parent.frames.length != 0)){
self.parent.location=document.location;
}
Implementación vista en yandex.ru, en su versión de 2009.

Vía: http://rmcreative.ru/blog/post/ne-dat-zagruzhat-stranitsu-v-iframe

viernes, 16 de diciembre de 2011

Sikuli - Automatización de pruebas del GUI

¡Y no sólo del GUI(interfaz gráfica de usuario)! Cada vez soporto menos repetir mñas de un par de veces una tarea. Enseguida, busco una forma de automatizarla. Y estoy encantado con Selenium IDE. Ahora mi nivel de vaguedad ha llegado a tal punto, que tampoco quiero arrancar las aplicaciones del escritorio y cargar las pruebas. Siempre o casi siempre lo mismo, quiero pulsar un botón y que se arranque el navegador, se compiler y se despliegue el proyecto, arrancar selenium IDE, cargar las pruebas, que se ejecuten, que se comprueben los resultados,...

Mi último descubrimiento en este campo, con el que espero conseguirlo, es SIKULI.

Permite automatizar la interacción con todo lo accesible y visible en el escritorio, para un montón de plataformas, Windows, Mac, Linux,...

En ello estoy. Prometo compartir mis éxitos y fracasos en ésta tarea :)

jueves, 15 de diciembre de 2011

Ruta relativa de los ficheros desde JMETER

MERDE! Después de traducirlo y probarlo, resulta que la solución que pongo a continuación sólo funciona para ficheros de entrada y salida de los listeners, pero no para scripts externos en samplers. ¡SHIT! ¿Alguien sabe cómo se podría hacer también para samplers?

En los distintos sitios donde podamos hacer referencia a ficheros externos al plan de pruebas, las rutas de los mismos se pueden especificar de dos maneras distintas:
  • ruta absoluta
  • ruta relativa
Las rutas relativas se resuelven en base al directorio actual de trabajo (que por defecto es bin/, donde se encuentra el jmeter.sh o jmeter.bat). A partir de la versión 2.4 de JMeter (aleluya!), existe la posibilidad de utilizar rutas relativas al directorio que contiene el fichero correspondiente al plan actual de pruebas (el fichero JMX). Para ello, la ruta debe comenzar con "~/" (o lo que hayas definido en la propiedad jmeter.save.saveservice.base_prefix, que normalmente se encuentra comentada en el fichero bin/jmeter.properties). En ese caso, las rutas se asumirán como relativas a la localización del fichero JMX.

#jmeter.save.saveservice.base_prefix=~/

Si cambiamos la propiedad y tenemos pensado ejecutar el plan de pruebas en otras instalaciones de jmeter, tendremos que redefinir en ellas también dicha propiedad. Por lo que, por lo general, lo mejor es dejarla como está, para evitarnos quebraderos de cabeza en la portabilidad.

El texto original, que he traducido, se puede encontrar en la sección de listeners del manual de JMeter.

Tiene toda la lógica, y no se entiende que no se haya incluido desde el principio. Desde que apareció la posibilidad de añadir elementos externos al plan de pruebas, debía existir de referenciar esos elementos con relación al fichero de definición del plan y no al ejecutable de jmeter. Así puedo empaquetar y compartir los elementos propios de un plan de pruebas, sin necesidad de restringir la instalación de JMeter en los demás equipos donde quiera que se ejecute.

miércoles, 7 de diciembre de 2011

lunes, 21 de noviembre de 2011

Los peores passwords de 2011

Una lista de los 25 peores passwords, publicado por Splashdata.com.

1. password
2. 123456
3. 12345678
4. qwerty
5. abc123
6. monkey
7. 1234567
8. letmein
9. trustno1
10. dragon
11. baseball
12. 111111
13. iloveyou
14. master
15. sunshine
16. ashley
17. bailey
18. passw0rd
19. shadow
20. 123123
21. 654321
22. superman
23. qazwsx
24. michael
25. football

miércoles, 26 de octubre de 2011

CoffeeScript, javascript más ágil

CoffeeScript logo
CoffeeScript es lenguaje que se compila a javascript, que pretende acelerar el desarrollo y optimizar el código.

El blog de uno de los desarrolladores, Brendan Eich.

Formateadores y validadores de JSON

Herramientas online para validar y formatear JSON


Formateadores de JSON:


http://www.blogger.com/img/blank.gif

Validadores de JSON:



Plugins de JSON para notepad++


También me resultaron muy útiles estos dos plugins para notepad++:

Creo recordar que ambos se pueden instalar directamente desde el plugin manager de Notepad++ (Plugins->Plugin Manager->Show Plugin Manager). Pero si no, se pueden descargar y colocar el correspondiente .dll en la carpeta /plugins dentro del directorio de instalación del notepad++.

JSHint


Tengo que echarle un ojo a JSHint, porque JSLint restringe mucho el estilo de programación, o sigues a rajatabla sus convenciones subyacentes o tu código no pasará la validación.

miércoles, 28 de septiembre de 2011

Ganar dinero traduciendo.

Webs que permiten ganar dinero haciendo traducciones desde casa: ¿Alguien conoce otras?

jueves, 15 de septiembre de 2011

Reutilizar profile con Firefox webdriver de Selenium

¿Es posible reutilizar un profile en las pruebas de Selenium con FireFox webdriver?

Por lo que leo en stackoverflow, de momento no es posible. Se creará una instancia de navegador nueva cada vez con un profile nuevo. Si bien podemos indicar que ese nuevo profile se base en uno existente. Ésto no sé que utilidad tiene, porque no consigo reproducir los aspectos que me gustaría del perfil en el que me baso. Con el driver de Chrome sí he conseguido reutilizar completamente un profile.

miércoles, 17 de agosto de 2011

Buen recurso sobre pruebas automáticas en ruso

automated-testing.info

Xpath en Selenium WebDriver API

XPath en WebDriver

No he probado todavía si es cierto, como dice un comentario de esa página, que el HtmlUnitDriver es case insensitive como el FirefoxDriver.

Selenium Webdriver backed Junit4 test

Caso: Queremos exportar un test case creado con Selenium IDE a código Java, que se pueda ejecutar como un test de JUnit 4. Y además queremos utilizar el Webdriver emulando el Selenium RC, aprovechándo las ventajas de éste:


- Mayor número de navegadores soportados.
- Mejor traducción y soporte de los comandos traducidos desde Selenium IDE.


Por defecto al exportar se nos crea una clase que extiende SeleneseTestCase, siendo ésta deprecated (depreciada).


Debemos cambiar ésta clase por SeleneseTestBase.

viernes, 15 de abril de 2011

JMETER - asignar a una variable el resultado de una operación matemática sobre otra variable

Si quiero que el valor de una variable en Jmeter (asignación en la interfaz gráfica del Jmeter, dentro de un elemento de configuración, como "User defined variables" o un elemento de pre-procesamiento como "User parameters") sea el resultado de una operación matemática sobre el contenido de otra variable de jmeter, puedo usar la función "__jexl", por ejemplo de la siguiente manera, para asignar a MI_VARIABLE el resultado de multiplicar por dos el contenido de la variable OTRA_VARIABLE_JMETER:
MI_VARIABLE --> ${__jexl(${OTRA_VARIABLE_JMETER}*2)}

Si OTRA_VARIABLE_JMETER no contuviera un valor numérico, por ejemplo su valor fuese "s", entonces el resultado de la operación anterior sería 0 (cero).

jueves, 14 de abril de 2011

Como probar un script BeanShell en un fichero desde consola

En JMETER tenemos la posibilidad de ejecutar scripts BeanShell localizados en ficheros externos.

Por ejemplo, en la asignación de una variable de usuario en un módulo de pre-procesamiento, puedo querer asignarle el resultado de un script BeanShell localizado en un fichero "fichero.bsh".

Para probarlos desde la consola de comandos podemos ejecutar el siguiente comando:
java -cp rutaBaseDeLaInstalacionDeJmeter/lib/bsh-2.0b5.jar bsh.Interpreter ficheroScriptBeanShell.bsh

Creo que si se tiene instalado el intérprete bsh, también podemos ejecutar directamente:
bsh ficheroScriptBeanShell.bsh

Referencia desde Jmeter


¡Importante!: La ruta relativa del fichero con el script, debe ser relativa al directorio del script que ha invocado jmeter. Si he ejecutado directamente dirJmeter/bin/jmeter.bsh o dirJmeter/bin/jmeter.bat, entonces la ruta deberá ser relativa a dirJmeter/bin/. Y si he invocado el script rutaMiScript/miScript.sh que a su vez internamente ha llamado al dirJmeter/bin/jmeter.sh, entonces la ruta del fichero con el script BeanShell que ponga dentro de Jmeter tendrá que ser relativa a rutaMiScript/.

En caso de que queramos asignarle a la variable el resultado de ejecutar todo el fichero con el script BeanShell tendríamos, dentro de JMeter, la asignación siguiente:
MI_VARIABLE --> ${__BeanShell(source("rutaFichero/ficheroScriptBeanShell.bsh");)}

También podemos, en vez de ejecutar todo el fichero, invocar un método concreto. Para ello, primero incluimos el script con la misma invocación que en el caso anterior y luego a continuación invocamos el método-

¡Importante! La llamada al método del script de BeanShell debe tener escapadas las comas.
MI_VARIABLE --> ${__BeanShell(source("../wsPlans/ficheroScriptBeanShell.bsh");miMetodo("parametroTextoA"\,"parametroTextoB"\,3\,"parametroTextoC");)}

lunes, 28 de marzo de 2011

Eliminar un bloque de línea con sed saltándose unas líneas desde la línea que hace match

Por ejemplo tengo un fichero con el siguiente formato:

ficheroEntrada.txt:

aaaaaaaaa
una línea
primera línea q quiero eliminar
segunda línea q quiero eliminar
tercera línea q quiero eliminar
otra línea
...
aaaaaaaaa
una línea
primera línea q quiero eliminar
segunda línea q quiero eliminar
tercera línea q quiero eliminar
otra línea
...


Quiero/puedo encontrar las líneas con el patrón "aaaaaaaaa", y a partir de cada una, quiero eliminar el bloque de 3 líneas que se encuentran saltando 1 línea desde la línea que encajó con el patrón de búsqueda.

Para ello puedo ejecutar el siguiente script:

cat ficheroEntrada.txt | sed -e '/aaaaaaaaa/ {n;n;N;N;d}' > ficheroSalida.txt


Para cada línea que contiene el patŕon "aaaaaaaaa":

  • Con el primer n salta a la siguiente línea tras la línea que hizo match.

  • Con el segundo n alcanza la primera línea que nos interesa, desechando la anterior.

  • Avanza dos líneas más, pero esta vez agregándolas al pattern space. Por cada línea que agrega, mete delante de la línea el carácter salto de línea.

  • Una vez que hemos acumulado las 3 líneas que queríamos borrar en el pattern space, las borramos con el comando "d". Y aquí termina el ciclo de operaciones que se hace por cada línea "aaaaaaaaa" encontrada.

lunes, 21 de marzo de 2011

Jmeter - Variables compuestas con counter

Si queremos utilizar variables propias cuyo valor, o parte de éste esté en función de la variable counter, deberemos declarar nuestras variables, en vez de como "Config element -> User defined variables", como "Pre processors -> User parameters". Al parecer es debido a que las "user defined variables" se inicializan antes que el counter y probablemente una única vez por instanciación del hilo, mientras que las variables definidas en el pre processador, se generan cada vez (yo por ejemplo las puse como pre proceso de un controlador, así que se generan en cada invocación del controlador). Y como como el counter se inicializa antes que los pre-procesos, éstos ya pueden obtener el su valor correctamente. El counter, como elemento de configuración, se instancia antes que los pre-procesadores, aunque el elemento vaya colocado en el mismo nivel del árbol, detrás de los susodichos pre-procesadores.

Así podremos tener variables compuestas, definidas como MI_VARIABLE_${VAR_COUNTER}.

Yo por ejemplo, lo utilice para poder generar una batería de test para un conjunto de de nombres de usuario, uno distinto para cada iteración.

Ejemplo



Definí los posibles valores de usuarios en el nodo de "User Defined Variables". Para ello, todas las variables que quería recorrer con el controlador For, tienen el mismo prefijo, en este caso 'lolaUser' y tras el separador (también podría no haber usado el separador), números consecutivos.:

jmeter for controllerY luego en el For Controller, hago referencia a dichas variables, por el prefijo que comparten "lolaUser". Como he usado el separador, también he tenido que marcar la opción correspondiente. El valor para cada iteración se guarda en la variable especificada en el controlador FOR, en el registro "output variable name", en éste caso la llamé PROFILE, a la que posteriormente podré acceder dentro de los distintos nodos dentro del bucle con ${PROFILE}:

jmeter for controller

jueves, 17 de marzo de 2011

Información del procesador en ubuntu

Para comprobar las características del procesador en ubuntu podemos invocar lo siguiente en la consola:


cat /proc/cpuinfo


Para comprobar si el procesador es de 64bits ejecutar:


grep --color=always -iw lm /proc/cpuinfo


Con lo que se busca el flag lm (lm -> long mode), que indica que el procesador es capaz de direccionar 64bits.

En vez de lm se puede buscar el flag rm (rm -> real mode) para comprobar si el procesador es de 16bits o el flag pm (pm -> protected mode) si el procesador es de 32 bits.

jueves, 10 de marzo de 2011

JMeter - trucos del regular expression extractor

Al usar el "Regular Expression Extractor":

Para almacenar en la variable "kk" todos los matches, poner en "Match No." -1. De ésta forma, si tenemos 3 matches, cada uno se guardará en la variable "kk_1", "kk_2", "kk_3". Si hubiera N matches para el patrón que hayamos especificado, entonces se guardarían todos en "kk_1", "kk_2", ... "kk_N".
La variable "kk_matchNr" contendrá el número de matches (coincidencias) que se han obtenido/guardado.

Para ver todas estas cosas, añadiríamos "Debug Sampler" y el listener "View results tree", donde en la pestaña "Response data" de la ejecución de cada "Debug sampler" se puede ver el contenido de todas las variables de jmeter (y si lo indicamos en el debug sampler, también podemos ver las propiedades y las variables de sistema) existentes.