QTP, Rational Functional tester (RFT), Selenium y Webdrive son algunos ejemplos de las muchas herramientas comerciales e infraestructuras de código abierto para las pruebas automatizadas de aplicaciones web. En este artículo, aprenda sobre Sahi, una herramienta que está ganando popularidad en el dominio de las pruebas automatizadas. Sahi es una herramienta de código abierto que proporciona: habilidades potentes para grabar y reproducir en todos los navegadores; distintos controladores de lenguaje para escribir scripts de prueba (Java, Ruby); y soporte para AJAX y aplicaciones web altamente dinámicas. Sahi también soporta https y autenticaciones NTLM. La Figura 1 muestra cómo Sahi encaja en una operación de usuario simulada.
Figura 1. Operación de usuario simulada
Sahi tiene muchos dispositivos poderosos:
- Controlador Sahi (IDE)
- Funciona en todos los navegadores y graba scripts en dos modos: formato Sahi o Java.
- Identificación de objeto robusto
- Es independiente de la estructura HTML. Sus APIs intuitivas, tales como
nearein method, pueden ayudar a localizar elementos de navegador incluso si la página tiene sólo un cambio menor, eliminando la necesidad de XPaths (que pueden ser difíciles de entender). - Esperas implícitas
- Elimina la necesidad de lidiar con la implementación de espera, aún para AJAX y cargas de página. Los sujetos de prueba no necesitan saber el funcionamiento interno de una aplicación.
El resto de este artículo avanza sobre una aplicación de muestra para mostrarle cómo usar Sahi para pruebas. Es posible descargar la aplicación de muestra y el caso de prueba para seguir adelante.
Para instalar y configurar Sahi:
- Descargue la última versión (vea Recursos), y descomprima el archivo. Sahi requiere Java 1.5 o posterior.
- Inicie el servidor proxy de Sahi. Los scripts de inicio están en
<sahi_root>\userdata\bin.
- Para Windows: start_dashboard.bat
- Para Linux: start_dashboad.sh
Figura 2. Panel de instrumentos Sahi
Para este ejemplo, no necesitamos conocer la configuración del navegador. Alternativamente, Sahi proporciona herramientas GUI para que inicie los navegadores. Ejecutestart_sahi.bat/start_sahi.shpara iniciarlo, después haga clic en un icono de navegador para iniciar el servidor proxy y el proceso de navegador. - Ingrese
start_sahi.bat/start_sahi.sh, que es necesario para la ejecución silenciosa con la asistencia de herramientas de construcción como Ant.Nota: Sólo para Internet Explorer (IE), necesita configurar manualmente el navegador para usar el proxy de Sahi. O puede usar las herramientas proporcionadas por Sahi para establecer el proxy del navegador mientras inicia el servidor proxy de Sahi. El host y puerto de proxy son localhost:9999. (El puerto puede ser modificado mediante <sahi_root>\config\sahi.properties.)
Grabando scripts de pruebas en formato Java
Sahi proporciona dos formatos de script listos para usar: Sahi y Java. Es posible modificar la opción predeterminada, que es Sahi, en <sahi_root>\config\sahi.properties. El formato Sahi es un formato de script parecido a Java, que se ejecuta sólo dentro del motor de script de Sahi Java. El ejemplo en este artículo usa el formato de Java más común, ya que los scripts se pueden integrar fácilmente con otras herramientas de prueba e infraestructuras para proyectos de pruebas grandes. El formato Java involucra un fragmento de código Java común que puede ser integrado como herramientas tales como Junit y TestNG.
Para ejecutar una prueba breve:
- Abra la aplicación web que desea probar. Presione la tecla ALT y haga doble clic en la página. (Firefox 3 fue utilizado para la demostración).
- Seleccione Record, como se muestra en la Figura 3:
Figura 3. Controlador Sahi para grabación
Después de la selección, cambiará al botón Stop. - Haga algunas operaciones en la aplicación web, y después seleccione
Stop. Todos los pasos que ha ejecutado en la aplicación son grabados, como se muestra en la Figura 4:
Figura 4. Scripts grabados por el controlador
Mientras sus operaciones se están grabando, puede insertar algunas afirmaciones si así lo desea. Las herramientas también proporcionan algunas opciones para inserciones, pero se sugiere que usted las agregue manualmente.
Junit, la infraestructura de pruebas de unidad, es muy importante para establecer su desarrollo impulsado por pruebas. En muchos casos, puede crear scripts de prueba en formato Junit para conveniencia e informes. El ejemplo previo grabó scripts de prueba en formato Java.
Para formatear los scripts anteriores en estilo Junit, cree un proyecto Java en Eclipse y después añada la biblioteca junit4 y sahi.jar ubicados en <sahi_root>\lib. Al crear un script de prueba de formato junit4, necesita iniciar algunas variables necesarias para el entorno Sahi. El ejemplo en este artículo extiende BaseTestCase.java de forma que todos los otros casos de prueba pueden ejecutarse al extender esta clase.
La clase demo4sahi extiende la clase
BaseTestCase para implementar todas las tareas de iniciación relacionadas con el proxy Sahi y después verifica dos puntos:
- Si el formato del e-mail está bien, obtendrá
OK. - Si el formato del e-mail es incorrecto, obtendrá
Error.
El Listado 1 muestra un script de prueba típico en formato Junit4.
Listado 1. Script de prueba en formato Junit4
public class test4demo extends BaseTestCase {
@Before
public void setUp() {
login();
}
@After
public void tearDown() {
logout();
}
@Test
public void testDemo1() {
browser.textbox("email").setValue("demo for sahi");
browser.submit("Submit").click();
assertTrue(browser.label("error").exists());
}
@Test
public void testDemo2() {
browser.textbox("email").setValue("demo@sahi.com");
browser.submit("Submit").click();
assertTrue(browser.label("ok").exists());
}
}
|
Para ejecutar los scripts de prueba sin supervisión, necesita implementar toda la inicialización y finalización para el tiempo de ejecución de Sahi. Existen cuatro partes básicas de inicialización, como se indica en la Tabla 1:
Tabla 1. Inicialización del entorno de Sahi
| Método en BaseTestCase | Descripción |
|---|---|
createConn() | Inicia SAHI_BASE_PATH,
USER_DATA_PATH y el tipo de navegador y crea un proceso de navegador. |
delConn() | Limpia el proceso de navegador y regresa el sistema al estado inicial. |
setIEProxy() | Establece el proxy de IE antes de ejecutar la prueba. Usar sólo para IE. |
login(),
logout() y otras utilidades de alto nivel comúnmente utilizadas | Métodos públicos para todos los scripts. |
BaseTestCase, como la clase padre de todos los scripts de prueba, invocará el método createConn durante el tiempo de ejecución, adelantándose a todos los demás métodos, de forma que puede abrir el navegador para simular las operaciones del usuario. El Listado 2 muestra una parte del código para
BaseTestCase.
Listado 2.
BaseTestCase
public class BaseTestCase {
protected Browser browser;
protected Proxy proxy;
protected boolean isProxyInSameProcess = false;
protected String browserType = "firefox";
@Before
public void createConn() throws Exception {
Configuration.initJava("f://Program/sahi", "f://Program/sahi/userdata/");
if (isProxyInSameProcess) {
proxy = new Proxy();
proxy.start(true);
}
browser = new Browser(this.browserType);
browser.open();
}
@After
public void delConn() throws Exception {
browser.setSpeed(100);
browser.close();
if (isProxyInSameProcess) {
proxy.stop();
}
}
public void login(){
browser.navigateTo("http://localhost:8080/demo");
browser.textbox("username").setValue("ligang");
browser.password("password").setValue("welcome");
browser.submit("Login").click();
}
/**
* Setting IE's proxy during testing environment initialization
*
* @param enable
*/
public void setIEProxy(boolean enable) {
try {
Runtime.getRuntime().exec(
new String[] {
SetEnv.sahiBasePath
+ "\\tools\\toggle_IE_proxy.exe",
(enable ? "enable" : "disable") });
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
......
}
|
Apache Ant, una herramienta de construcción común, es utilizada especialmente para proyectos basados en Java. La infraestructura de Sahi incluye un archivo JAR para Ant que es posible usar en el archivo build.xml. Sin embargo, este componente listo para usar está diseñado para la estructura de Sahi. Aunque usted tal vez quiera usar Junit para configurar toda la infraestructura, esta no es lo suficientemente flexible o fuerte. Para las pruebas de regresión del proyecto de ejemplo, se escribió un build.xml que incluye:
- Iniciando y deteniendo el servidor proxy de Sahi, como se muestra en los Listados 3 y 4:
Listado 3. Iniciar el servidor proxy de Sahi<target name="start_sahiserver"> <echo message="starting sahi server" /> <java fork="true" spawn="true" classname="net.sf.sahi.Proxy"> <classpath> <fileset dir="${sahi.dir}"> <include name="**/*.jar" /> </fileset> </classpath> <arg value="${sahihome.dir}" /> <arg value="${sahiuser.dir}" /> </java> <antcall target="proxyon" /> </target>
Listado 4. Detener el servidor proxy de Sahi<target name="stop_sahiserver"> <echo message="going to stop Sahi server" /> <sahi stop="true" sahihost="localhost" sahiport="9999" /v <antcall target="proxyoff" /> </target>
- Abrir y cerrar la configuración del servidor proxy de IE, como se muestra en el Listado 5:
Listado 5. Abrir/cerrar el proxy de IE<target name="proxyon"> <exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe"> <arg value="enable" /> </exec> </target> <target name="proxyoff"> <exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe"> <arg value="disable" /> </exec> </target>
- Informes.
Las acciones pueden ejecutarse por separado para una fácil depuración en el IDE de Eclipse.
En las pruebas de aplicaciones web, es muy importante identificar efectivamente un objeto. A diferencia de muchas otras herramientas de pruebas, Sahi tiene algunas APIs poderosas para localizar objetos en una página web. Tabla 2 señala algunos ejemplos. Consulte la sección Recursos para obtener un enlace a documentación online con una lista completa.
Tabla 2. Métodos de localización especiales
| Dispositivo | Método | Código de muestra |
|---|---|---|
| Soportar expresiones regulares | Identificador de casi todos los elementos | browser.link(/Link to .*/) |
| Localizando con base en relaciones de DOM | near, in |
browser.button("delete").in(browser.cell("item1")).click()
|
| Localizando con base en relaciones posicionales | under | browser.button("delete").under(browser.cell("item1")) |
Este artículo ha explorado Sahi, una herramienta para automatizar las pruebas de aplicaciones web. Sahi es una herramienta de código abierto que permite grabación y reproducción en todos los navegadores. En este artículo, aprendió sobre los distintos controladores de lenguaje para escribir scripts de prueba. Una aplicación de muestra y un caso de prueba mostraron cómo formatear scripts para Junit y cómo probar con Apache Ant. Las APIs avanzadas de Sahi también fueron descritas.
| Descripción | Nombre | tamaño | Metodo de descarga |
|---|---|---|---|
| Sample web application | webapp4sahi.zip | 7KB | HTTP |
| A Sahi test example | Demo4SahiTest.zip | 287KB | HTTP |
Información sobre métodos de descarga
Aprender
- Sahi: Aprenda todo sobre Sahi, una herramienta lista para la empresa para automatización de pruebas de aplicaciones web. Acceda a documentos, tutoriales y foros de soporte.
- Sahi: Lea más sobre
Sahi.
- Zona de desarrollo Web de developerWorks: Encuentre artículos que cubren diversas soluciones basadas en web.
-
Eventos técnicos y webcasts de developerWorks: Manténgase al día con los eventos técnicos y webcasts de developerWorks.
Obtener los productos y tecnologías
- Sahi: Descargar Sahi.
- Software de prueba IBM: Innove su siguiente proyecto de desarrollo con el software de prueba de IBM, disponible para descarga o en DVD.
Comentar
- Participar en el foro de debate.
- Cree su perfil developerWorks hoy y configure una lista de seguimiento en Sahi. Conéctese y permanezca en contacto con la
comunidad developerWorks.
- Encuentre a otros miembros de developerWorks interesados en el desarrollo Web.
- Únase a uno de nuestros grupos de developerWorks enfocados en temas Web:
Comparta lo que sabe.
- Roland Barcia habla en su blog sobre Web 2.0 y middleware.
- Follow developerWorks' members' shared bookmarks on web topics .
- Visite el foro Web 2.0 Apps: Obtenga respuestas rápidamente.
- Visite el foro Ajax: Obtenga respuestas rápidamente.
