Automatizar las pruebas de aplicaciones web con Sahi

Existen muchas herramientas comerciales e infraestructuras de código abierto para las pruebas automatizadas de aplicaciones web. Sahi, una herramienta para automatizar las pruebas de aplicaciones web, está ganando popularidad. Sahi es una herramienta de código abierto que permite grabación y reproducción en todos los navegadores. Proporciona distintos controladores de lenguaje para escribir scripts de prueba, y soporta Ajax y aplicaciones web altamente dinámicas. En este artículo, aprenda más sobre Sahi, utilizando una aplicación de muestra y un caso de prueba. Aprenda a formatear scripts para Junit para probar con Apache Ant.

Gang Li, Staff Software Engineer, IBM

Gang Li photoGang Li actualmente trabaja en IBM CDL y es responsable del control de calidad de productos IBM Initiate con un enfoque en la base de la automatización de pruebas.



15-08-2011

Introducción

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
Operación de usuario simulada

Sobre Sahi

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 near e in 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.

Probando con Sahi

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.

Instalación y configuración

Para instalar y configurar Sahi:

  1. Descargue la última versión (vea Recursos), y descomprima el archivo. Sahi requiere Java 1.5 o posterior.
  2. 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
    Como se muestra en la Figura 2, puede seleccionar un icono de navegador para iniciar el navegador que desea usar.
    Figura 2. Panel de instrumentos Sahi
    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. Ejecute start_sahi.bat/start_sahi.sh para iniciarlo, después haga clic en un icono de navegador para iniciar el servidor proxy y el proceso de navegador.
  3. Ingresestart_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:

  1. 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).
  2. Seleccione Record, como se muestra en la Figura 3:
    Figura 3. Controlador Sahi para grabación
    Controlador Sahi para grabación
    Después de la selección, cambiará al botón Stop.
  3. 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
    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.

Integración con Junit

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 BaseTestCaseDescripció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 utilizadasMé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();
		}
	}
    ......
}

Probando con Ant

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.


Temas avanzados

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
DispositivoMétodoCódigo de muestra
Soportar expresiones regularesIdentificador de casi todos los elementosbrowser.link(/Link to .*/)
Localizando con base en relaciones de DOMnear, inbrowser.button("delete").in(browser.cell("item1")).click()

browser.button("delete").near(browser.cell("item1")).click()

Localizando con base en relaciones posicionalesunderbrowser.button("delete").under(browser.cell("item1"))

Resumen

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.


Descargas

DescripciónNombretamaño
Sample web applicationwebapp4sahi.zip7KB
A Sahi test exampleDemo4SahiTest.zip287KB

Recursos

Aprender

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

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Information mgmt
ArticleID=751593
ArticleTitle=Automatizar las pruebas de aplicaciones web con Sahi
publish-date=08152011