Web programming stuff. Tutoriales, noticias, curiosidades de todo lo que me encuentre relacionado con programación web: frameworks, php, javascript, html, css, aplicaciones web y programación en general. Quality Assurance. Automatización de pruebas (Selenium, JUnit,...).
viernes, 30 de diciembre de 2011
jueves, 29 de diciembre de 2011
Buscar / reemplazar en Visual Studio, usando expresiones regulares. Capturando grupos.
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':
Y queremos reemplazarla por una concatenación de dos cadenas como esas:
Por ejemplo,
Entrada:
basdasd
qweds
afasd
Salida:
basdasd
qweds
afasdafasd
Vía:
Referencia de buscar/reemplazar en MSDN.
miércoles, 28 de diciembre de 2011
lunes, 26 de diciembre de 2011
Evitar que carguen tu página en un iframe
self.parent.location=document.location;
}
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
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
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
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.
miércoles, 7 de diciembre de 2011
Datos de conexión de distintos proveedores de ADSL en España
martes, 22 de noviembre de 2011
lunes, 21 de noviembre de 2011
Los peores passwords de 2011
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 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.
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.
martes, 23 de agosto de 2011
domingo, 21 de agosto de 2011
miércoles, 17 de agosto de 2011
Xpath en Selenium WebDriver API
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 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
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:
Creo que si se tiene instalado el intérprete bsh, también podemos ejecutar directamente:
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:
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.
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
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
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.:
Y 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}:
jueves, 17 de marzo de 2011
Información del procesador en ubuntu
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
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.