Vous êtes sur la page 1sur 15

Pruebas Funcionales y Pruebas de Carga

sobre Aplicaciones Web


Javier Jess Gutirrez1, Rafael Pineda2, Daro Villadiego3, Maria Jos Escalona1, Manuel Mejas1
Departamento de Lenguajes y Sistemas Informticos
Universidad de Sevilla
1
{javierj, escalona, risoto}@lsi.us.es, 2rafaelpineda@gmail.com, 3dariovifer@yahoo.es,

RESUMEN
El proceso de prueba en el desarrollo de sistemas software permite evaluar la calidad de una aplicacin.
Sin embargo las estrategias clsicas de pruebas del sistema software no son sencillas de aplicar a los
sistemas web debido a sus caractersticas intrnsecas como arquitectura cliente-servidor, mezcla de
elementos heterogneos (pginas HTML, lenguajes de script, etc.), necesidad de soporte de accesos
concurrentes y altas cargas de trabajo, clientes web muy heterogneos, etc.
En este trabajo se documenta un caso prctico en el que se toma como base una aplicacin web muy
sencilla desarrollada utilizando HTML, PHP y MySQL, y sobre la que se aplican tcnicas y herramientas
open-source para desarrollar un conjunto de pruebas funcionales tanto en la interfaz HTML del lado
cliente como en el cdigo PHP del lado del servidor. Por ltimo se desarrolla una prueba de carga o stress
sobre toda la aplicacin.
unitarias sobre dicha aplicacin. En el apartado 4
veremos como realizar pruebas de integracin.
1. INTRODUCCIN. En el apartado 5, como ejemplo de prueba de
sistema, veremos como realizar una prueba de
Internet proporciona a los desarrolladores carga y en el apartado 6 las conclusiones.
una forma innovadora para construir software y
un parque potencias de usuarios que se
contabilizan por millones [4]. Por esta misa 1.1. Definiciones.
razn, los problemas que se presentan en una
aplicacin web, pueden afectar a cientos de miles Una pgina web es todo tipo de
de usuarios y pueden causar cuantiosas prdidas informacin que puede ser vista en una ventana
[2], adems de afectar tambin a las relacin del navegador [2]. Generalmente est compuesta
entre los usuarios y la entidad duea de la por cdigo HTML, generado de manera esttica
aplicacin web. Por este motivo las pruebas de o dinmica, o por componentes ejecutables en el
software cobran una importancia vital en el cliente, como un mdulo Flash.
desarrollo de aplicaciones web. Se llama sitio Web a una agrupacin de
Las primeras aplicaciones web tenan un pginas web, donde los elementos de las pginas
diseo muy simple, basado en pginas estticas estn relacionados semnticamente por el
HTML. Actualmente, las aplicaciones web son contenido y sintcticamente a travs de enlaces.
ms sofisticadas e interactivas, con interfaces de El acceso a la aplicacin web de los usuarios se
usuarios, mediante pginas dinmicas. Analizar, hace mediante peticiones HTTP, y la interfaz
evaluar, mantener y probar las aplicaciones web ms utilizada es un navegador web ejecutado en
actuales presentan muchos y novedosos desafos un PC.
para los desarrolladores y los investigadores del Generalmente, una aplicacin web se
software. construye utilizando diversas tecnologas,
A continuacin, en este apartado, se incluyendo los lenguajes de scripting que
definirn algunos conceptos bsicos utilizados en funcionan dentro del HTML en el cliente, los
todo el trabajo, se presentarn las caractersticas lenguajes interpretados que funcionan en el
bsicas de una aplicacin web segn el modelo servidor, los lenguajes compilados en el servidor,
cliente/servidor y se dar una breve definicin las pginas de mdulos en el servidor, los
del proceso de prueba del software. En el lenguajes de programacin de propsito general
apartado 2 describiremos una sencilla aplicacin (servicios web), se suelen utilizar servidores de
web que servir de ejemplo para aplicar las bases de datos como almacenes de informacin.
tcnicas de pruebas vistas en este trabajo. En el Estas tecnologas cooperan entre s para construir
apartado 3 describiremos como realizar pruebas
este tipo de aplicaciones, obteniendose una Cliente Servidor

aplicacin multiplataforma.
Peticin

1.2. Arquitectura Respuesta

Cliente/Servidor en aplicaciones
web.
Cdigo ejecutable en el
servidor
El funcionamiento de una aplicacin
Internet es anlogo al de una aplicacin
Servidor de
cliente/servidor tradicional, tal y como se bases de datos

muestra en la ilustracin 1. Al introducir una


direccin web en un navegador, este actua como Ilustracin 2. Funcionamiento bsico de una
cliente y solicita un fichero localizado en un aplicacin Internet dinamica.
ordenador accesible por Internet, el cual actuar En la ilustracin 2, se muestra como el
de servidor. El servidor procesar la peticin y esquema anterior es idntico en cuanto al modelo
enviar este fichero y el navegador, al recibirlo, cliente/servidor. Lo nico que cambia es el
lo interpretar y mostrar la pgina web. servidor, ya que ahora consta de dos bloques:
Cliente Servidor uno que enva la pgina web y otro bloque que la
genera dinmicamente.
Peticin

1.3 Una introduccin al proceso


Respuesta
de prueba.
Hoy en da, debido al aumento del tamao y
la complejidad del software, el proceso de prueba
Ilustracin 1. Funcionamiento bsico de una
se ha convertido en una tarea vital dentro del
aplicacin Internet
proceso de desarrollo de cualquier sistema
Las primeras aplicaciones web se reducan a software [3]. Para analizar cmo se pueden
un simple peticin de una pgina ya creada; sin aplicar mtodos de pruebas en metodologas
importar la fecha o la hora de la peticin, web, es necesario realizar antes una clasificacin
siempre reciba el mismo fichero. En los sistemas de los tipos pruebas existentes, en que momento
web actuales, como se muestra en la ilustracin se aplican y cuales son sus objetivos. En la tabla
2, se un paso ms y la pgina a mostrar se genera 1, se recoge la clasificacin de esas pruebas [5]
dinmicamente con contenidos personalizados. dependiendo de su cometido y de la fase de
desarrollo en que se realizan.
Tipos de Momento de realizacin Descripcin
pruebas
Pruebas Durante la construccin del Prueban el diseo y el comportamiento de cada uno de los
Unitarias. sistema componentes de forma aislada.
Pruebas de Durante la construccin del Comprueban la correcta unin de los componentes entre s a
Integracin. sistema travs de sus interfaces, y si cumplen con la funcionalidad
establecida.
Pruebas del Despus de la construccin del Prueban a fondo el sistema, comprobando su funcionalidad e
Sistema. sistema integridad globalmente, en un entorno lo ms parecido
posible al entorno final de produccin.
Pruebas del Despus de la construccin del Prueban a fondo el sistema, comprobando su funcionalidad
Sistema. sistema e integridad globalmente, en un entorno lo ms parecido
posible al entorno final de produccin.
Pruebas de Durante la implantacin en el Comprueba el correcto funcionamiento del sistema dentro
Implantacin. entrono de produccin. del entorno real de produccin.
Pruebas de Despus de la implantacin en el Verifican que el sistema cumple con todos los requisitos
Aceptacin. entorno de produccin. indicados y permite que los usuarios del sistema den el visto
bueno definitivo.

Tabla 1. Tipos de prueba.


Las pruebas unitarias y de integracin [8]. En la ilustracin 3 se muestran los elementos
verifican componentes del sistema mientras que que componen esta aplicacin.
las pruebas del sistema y posteriores verifican Cliente Servidor
todo el sistema, considerndolo una caja negra.

2. DESCRIPCIN DEL Cdigo de


validacin Formulario de
EJEMPLO. clientes
Insercin de
clientes MySQL

Se va a tomar como base para aplicar las


pruebas descritas en los siguientes apartados una
aplicacin web muy simple cuya misin es Cliente almacenado
correctamente
insertar entidades clientes en una base de datos.
La aplicacin consta de una interfaz, compuesta
por un formulario para la introduccin de
entidades clientes escrita mediante una pgina Error - Cliente no
HTML con cdigo de validacin escrito en almacenado
JavaScript, la lgica de negocio encargada de
validar dicho cliente e insertarlo en la base de Ilustracin 3. Componentes de la aplicacin
datos, escrita mediante un script en PHP [9], y para insercin de clientes.
una tabla donde almacenar las entidades clientes, En la ilustracin 4 se muestran capturas de
alojada en un servidor de bases de datos MySQL pantallas de las pginas HTML.

Ilustracin 4. Formulario de insercin de clientes.


El cdigo de validacin JavaScript en la El cdigo SQL para el servidor MySQL que
interfaz HTML verificar que no se deje vaco define la tabla donde se almacena la informacin
ningn campo obligatorio del formulario. se muestra en la tabla 2.
Los componentes del lado cliente son
CREATE TABLE Clientes(Id BIGINT(20) aquellos que se descargan y ejecutan en el
UNSIGNED NOT NULL AUTO_INCREMENT navegador, mientras que los componentes del
PRIMARY KEY,
lado servidor se ejecutan en el servidor y sus
Entidad VARCHAR(50) NOT NULL,
Actividad VARCHAR(250) NOT NULL, resultados se envan al cliente. A continuacin se
Direccion VARCHAR(50) NOT NULL, describe las estrategias y herramientas empleadas
Localidad VARCHAR(50) NOT NULL, para probar los componentes del lado del
Codigo_Postal VARCHAR(10) NOT NULL, servidor, en el apartado 3.1, y del lado cliente, en
Telefono VARCHAR(50) NOT NULL, el apartado 3.2, de la aplicacin.
Persona_Contacto VARCHAR(50),
Cargo VARCHAR(50),
Telefono_Contacto VARCHAR(10), 3.1. Pruebas del lado servidor.
Observaciones VARCHAR(250) );
Queda fuera del objetivo de este trabajo
Tabla 2. Cdigo SQL de la tabla de clientes. probar los elementos relativos al servidor de
bases de datos utilizados, por lo que nos
Para probar la aplicacin se desarrollar, en centraremos solo en ver las estrategias de prueba
primer lugar, un conjunto de pruebas unitarias para cdigo ejecutable en el servidor.
que verifiquen todos los componentes del lado La estrategia para probar el correcto
cliente y del lado servidor. En segundo lugar se funcionamiento del cdigo del servidor es muy
desarrollar una prueba de integracin que similar a la estrategia para realizar pruebas
verifique el correcto funcionamiento del unitarias cualquier otro lenguajes de
formulario y del cdigo de insercin trabajando programacin para aplicaciones no web. La idea
juntos, que englobaremos las pruebas de principal es escribir un fragmento de cdigo (un
integracin y del sistema. En ltimo lugar, script PHP en el sistema de ejemplo) de prueba
cuando el sistema est completo y las pruebas no que invoque al cdigo que queremos probar con
indiquen ningn error, se realizar una prueba de un conjunto de valores de prueba y verifique si el
carga para comprobar como se comporta ante resultado es el esperado.
grandes cargas de trabajo. Para facilitar y automatizar este proceso,
existen una serie de herramientas que siguen la
3. PRUEBAS UNITARIAS. filosofa de la herramienta open-source JUnit
[11]. Una lista de herramientas xUnit para
Como se ha visto en el apartado 1.3, las distintas plataformas se puede encontrar en [7].
pruebas unitarias tienen como objetivo probar la De entre todas las herramientas disponibles para
funcionalidad de cada componente de manera cdigo PHP se ha elegido PEAR PHPUnit [13].
independiente al resto de los componentes. Para La descripcin de la prueba a realizar sobre
esto vamos a dividir los componentes a probar en el sistema de ejemplo es la siguiente: el sistema
dos grupo, los componentes del lado cliente, ofrece una funcin para insertar clientes, la cual
pginas web, cdigo JavaScript, etc. y los admite como parmetro una tabla con toda la
componentes del lado del servidor, como informacin del cliente y devuelve un resultado
ficheros de script y bases de datos [1]. En la indicativo de si el cliente se insert
aplicacin de ejemplo, los elementos que correctamente o hubo un error. El prototipo de
pertenecen a cada divisin se muestran en la esta funcin se muestra en la tabla 3.
ilustracin 5.
// $result vale TRUE si el cliente se
Cliente Servidor // insert correctamente en la
// base de datos o FALSE en otro caso.
function insertarCliente($cliente)
{
Cdigo de
//...
Error - Cliente no Insercin de return $result;
validacin
almacenado clientes }

Formulario de
Cliente almacenado Tabla 3. Estructura de la funcin de insercin
clientes correctamente MySQL de clientes.

Ilustracin 5. Componentes del sistema del La prueba va a consistir en dos partes, las
lado cliente y del lado servidor. cuales se detallan en la tabla 4.
Paso Accin Verificacin.
1 Llamar a la funcin Verificar que el El cdigo del script en PHP que implementa
insertarCliente con resultado de la funcin. esta prueba se muestra a continuacin, en la tabla
un cliente de prueba 5.
2 Buscar en la base de Verificar que el cliente Al ejecutar esta prueba, si la funcin
datos el cliente de existe en la base de
insertarCliente no presenta ningn fallo se
prueba insertado en el datos y sus valores
paso anterior coinciden con los obtiene una salida como la mostrada en la
valores del cliente de ilustracin 6, la cual indica que la prueba ha sido
prueba. superada satisfactoriamente.
Tabla 4. Pasos de la prueba.

<?
include_once('./PHPUnit/PHPUnit.php');
include_once('./FuncionInsertarCliente.php');

class InsertarClienteTest extends PHPUnit_TestCase {

var $cliente_prueba;

function testInsertarCliente() {
$this->PHPUnit_TestCase("testInsertarUnCliente");
}
function setUp() {
$this->cliente_prueba['entidad'] = "prueba_entidad";
$this->cliente_prueba['actividad'] = "prueba_actividad";
$this->cliente_prueba['direccion'] = "prueba_direccion";
$this->cliente_prueba['localidad'] = "prueba_localidad";
$this->cliente_prueba['codigo_postal'] = "00000";
$this->cliente_prueba['telefono'] = "000-00-00-00";
}
function testInsertarUnCliente() {
$resultado = insertarCliente($this->cliente_prueba);
$this->assertTrue($resultado);
}
function testClienteInsertado(){
$conn = mysql_connect("localhost", "", "")
mysql_select_db("Clientes")
$sql = "SELECT * FROM Clientes WHERE entidad='".
$this->cliente_prueba['entidad']."'";
$resultado = mysql_query($sql)
$cliente = mysql_fetch_array($resultado) ;
$this->assertEquals($this->cliente_prueba['entidad'],
$cliente['Entidad'], "Entidades distintas.");
// El resto de campos se comprueban de la misma manera.

mysql_free_result($resultado);
}
} // Fin de la clase.

echo "<HTML> <BODY>";


echo "<HR>";
echo "<BR> Prueba Insertar Cliente. <BR>";
$suite = new PHPUnit_TestSuite("InsertarClienteTest");
$result = PHPUnit::run($suite);
echo $result -> toString();
echo "<HR>";
?>

Tabla 5. Prueba de la funcin de insercin de clientes.


Line 107, column 38: document type
does not allow element "BODY" here
<body bgcolor="#FFFFFF" text="#000000">
Line 108, column 75: there is no
attribute "BORDERCOLOR"
... cellpadding="0" align="left"
bordercolor="#0066FF">

El primer error est provocado porque antes de la


etiqueta <body> debera ir el fin de etiqueta </head>
El atributo bordercolor est obsoleto y no cumple la
versin 4.0 de la especificacin HTML [15], ya que se
debe utilizar hojas de estilo para definir los colores.
Ilustracin 6. Prueba superada con xito. Una vez arreglado los dos errores, el archivo pasa la
especificacin y el la herramienta de validacin
muestra el siguiente mensaje: This Page Is Valid
3.2. Pruebas unitarias del lado HTML 4.01 Transitional!.
cliente. Las otras dos pginas web del sistema (la pgina de
cliente insertado correctamente y la pgina de error)
pasaron la validacin sin necesidad de realizar
Las pruebas de los componentes de lado modificaciones.
cliente van a tener como objetivo asegurar que el
cdigo HTML es correcto y cumple los
estndares [15] y comprobar el funcionamiento Tabla 6. Prueba del formulario HTML de
de las partes dinmicas de las pginas, en este insercin de clientes.
caso verificar el cdigo JavaScript de validacin Para evitar tener que verificar uno a uno
del formulario. cada archivo y tener que subirlos de nuevo cada
Otras pruebas que pueden encuadrarse en vez que se realice una modificacin, existe la
esta categora son: verificar que las pginas se opcin de indicarle una URL y la herramienta de
visualizan adecuadamente en los navegadores validacin verificar todos los archivos HTML
que usan los clientes, comprobar la usabilidad que sea capaz de alcanzar a partir de dicha URL.
del diseo, etc. Tambin existen aplicaciones que realizan
automticamente la conexin con la herramienta
3.1.1. Pruebas de pginas HTML. de validacin.

A diferencia de los scripts del lado del 3.1.2. Prueba de cdigo JavaScript.
servidor, una pgina HTML no suele realizar Como vimos en el punto 2, el formulario de
ninguna tarea, sino que contiene la informacin clientes incluye tambin un script en lenguaje
que se debe mostrar y como debe mostrarse. Por JavaScript para evitar campos obligatorios en
tanto se ha decidido elaborar pruebas para blanco. Este cdigo tambin es necesario
verificar que cada pgina de la aplicacin de probarlo para verificar que su comportamiento es
ejemplo cumple con los estndares HTML correcto, esto es, que detecta todas las posibles
propuestos por el consorcio W3C. En la pgina combinaciones invlidas.
web del consorcio se puede encontrar una Originalmente el cdigo JavaScript se
herramienta de validacin de archivos HTML encontraba incrustado en la pgina HTML que
[14]. En la tabla 6 se muestra un resumen del contiene el formulario de clientes, lo cual
proceso de prueba de las pginas HTML de la dificultaba su prueba. Por este motivo, el cdigo
aplicacin. fue movido a su propio archivo (validar.js). En
la tabla 7 se muestra un fragmento del cdigo de
validacin del formulario.
La herramienta de validacin proporciona una opcin
para subir la pgina a validar. En la aplicacin de
ejemplo, al validar el formulario de clientes
aparecieron los siguientes errores:
function Validador(FormularioClientes) {

if (FormularioClientes.entidad.value == "") {
alert("El campo \"Entidad\" es obligatorio.");
FormularioClientes.entidad.focus();
return (false);
}

if (FormularioClientes.actividad.value == "") {
alert("El campo \"Actividad\" es obligatorio.");
FormularioClientes.actividad.focus();
return (false);
}

// Igual para los dems campos obligatorios.


// ....

return (true);
}

Tabla 7. Fragmento del contenido del archivo "validar.js"


blanco, como se muestra en la ilustracin 7 e
ilustracin 8.
Este cdigo avisar si algn campo se deja
en blanco, y colocar el foco en el campo en

Ilustracin 7. Validacin del formulario mediante JavaScript.


FormularioClientes("","a", d", "l",
"c", "t");
if (Validador(form) == false) {
alert("Prueba no superada.");
} else {
alert("Prueba superada.");
}
Ilustracin 8. Detalle de la ventana de alerta. </SCRIPT>

La primera estrategia posible es validar el


cdigo manualmente, introduciendo todas las Tabla 9. Prueba del cdigo JavaScript del
posibles combinaciones en el formulario a mano formulario de clientes.
y comprobando que los resultados del cdigo A partir de esta prueba se podran desarrollar
JavaScript son adecuados. Esta solucin es la ms pruebas similares cambiando la posicin del
ms rpida y sencilla de realizar, pero requiere la campo que se deja en blanco en la creacin del
dedicacin exclusiva de una persona, es propensa objeto formulario.
a fallos debido a ser una tarea repetitiva y es Sin embargo esta estrategia tampoco es una
necesario repetir el proceso manual de pruebas buena solucin ya que, aunque comprueba que la
cada vez que se modifique el formulario o el funcin devuelve el valor esperado, no
cdigo JavaScript. comprueba que el mensaje de alerta contenga el
Otra estrategia es desarrollar una prueba de texto adecuado o que el foco del formulario se
cdigo, escribiendo otro script en JavaScript que coloque en el campo vaco. Adems, una vez
verifique si el cdigo de validar.js se comporta ejecutado la instruccin alert del cdigo de
correctamente para un conjunto de valores, de validacin (validar.js) la ejecucin de la prueba
manera similar a la prueba realizada en el no continua, por lo que tambin hay que
apartado 3.1. Como se debe comprobar el cdigo comprobar manualmente que se muestra la
de validar.js aisladamente, es necesario crear ventana adecuada, no obteniendo ninguna
un objeto que represente el formulario, un ventaja respecto a la comprobacin manual.
fragmento del cdigo que representa al Otras posibles soluciones para mejorar la
formulario se muestra en la tabla 8. eficiencia de las pruebas de cdigo JavaScript,
function entidad(valor) {
que se plantean como futuras lneas de
this.value=valor; investigacin, son utilizar un intrprete de
return(this); JavaScript independiente del navegador o una
} herramienta de captura de pulsaciones de ratn.
// Una funcin similar por cada campo.
// ...
Este mismo proceso puede realizarse para
verificar otros tipos de lenguajes ejecutables en
function FormularioClientes(e, a, el cliente, como por ejemplo VBScript.
d, l, c, t) {
this.entidad=new entidad(e);
this.actividad=new actividad(a);
this.direccion=new direccion(d);
4. PRUEBAS DE
this.localidad=new localidad(l);
this.codigo_postal=new
INTEGRACIN.
codigo_postal(c);
this.telefono=new telefono(t); Una vez verificado cada uno de los
return (this); componentes mediante pruebas unitarias, es
}
necesario comprobar que dichos componentes
son capaces de trabajar correctamente en
Tabla 8. Objeto que representa el formulario conjunto. Para ello desarrollamos pruebas de
de clientes. integracin.
Dado que los elementos del lado cliente y
Una prueba que verifique el cdigo de
servidor en aplicaciones Web se comunican
validacin con la ayuda de este representante se
mediante HTTP en vez de mediante llamadas a
muestra en la tabla 9.
mtodos o funciones, las herramientas tipo xUnit
<SCRIPT LANGUAGE="JavaScript" utilizadas en el apartado anterior no son
SRC="validar.js"></SCRIPT> adecuadas para probar la integracin de los
<SCRIPT LANGUAGE="JavaScript" componentes del lado cliente y servidor.
SRC="formularioClientes.js"></SCRIPT Los dos mtodos principales para realizar
> pruebas automticas de aplicaciones Web a
<SCRIPT LANGUAGE="JavaScript">
travs de su interfaz de usuario son mediante
var form= new
macros grabadas que puedan reproducirse y
mediante un API programtico que analice las Bsicamente HttpUnit funciona como un
respuestas HTTP. Las macros grabadas requieren cliente web que recibe una pgina y al que se le
revisiones frecuentes y tienden a ser frgiles, ya puede preguntar por los elementos que incluye
que es necesario volverlas a grabar cuando esa pgina e interactuar con ella. Esta
cambia la interfaz. Un API programtico permite herramienta proporciona muchas de las
escribir un programa que realice las peticiones funciones de un navegador: control de cookies,
HTTP adecuadas y recibe y analice las anlisis de contenido HTML, envo de
respuestas del servidor. Esta aproximacin es formularios meditante los mtodos GET y POST,
ms flexible, minimiza el mantenimiento de las autentificacin, y ms.
pruebas y permite probar sistemas web que Vamos a escribir una clase Java que conecte
devuelven como respuesta pginas HTML muy con el servidor y solicite el formulario y despus
variables o complejas. El lado negativo de las realizaremos una serie de comprobaciones sobre
pruebas basadas en API con respecto a las el formulario para verificar que todo est en
macros grabadas es que la aproximacin dirigida orden y una serie de acciones para verificar que
al API tardan ms en construirse. Esta es la el funcionamiento es el deseado.
aproximacin a utilizar en este trabajo. La prueba va a realizar las siguientes
Existen varias herramientas open-source que comprobaciones:
permiten realizar esta tarea. La herramienta 1. Verificar que es capaz de conectar con el
elegida para este caso prctico es HttpUnit [6]. A servidor y solicitar el formulario de clientes.
pesar de estar escrita en Java, esta herramienta 2. Comprobar que se ha recibido la pgina
permite probar todo tipo de aplicaciones web. En adecuada verificando su ttulo.
este caso la vamos a aplicar a una aplicacin en 3. Comprobar que la pgina contiene el
PHP con una interfaz en HTML. formulario adecuado verificando su ttulo.
4. Comprobar que existen todos los campos
del formulario y asignarles valores de prueba.
4.1. Escribiendo una prueba de 5. Comprobar que al pulsar el botn
integracin. "Aadir" se obtiene la pgina que indica que se
insert correctamente el cliente.
El cdigo de la prueba se puede ver en la
tabla 10.

import net.sourceforge.jwebunit.WebTestCase;
import com.meterware.httpunit.*;
import com.meterware.servletunit.*;
import java.util.*;
import junit.framework.*;

public class TestFormularioClientes extends TestCase {

public TestFormularioClientes() {
super("TestFormularioClientes");
}

public void testInsertarCliente()


throws Exception
{
WebConversation wc = new WebConversation();
WebResponse resp = wc.getResponse( "http://localhost/
/FormularioClientes.htm");
Assert.assertEquals(resp.getTitle().compareTo("Formulario Clientes"), 0);
WebForm form = resp.getFormWithName("FormularioClientes");
Assert.assertNotNull(form);
form.setParameter("entidad", "entidad_prueba");
form.setParameter("actividad", "actividad_prueba");
form.setParameter("direccion", "direccion_prueba");
form.setParameter("localidad", "localidad_prueba");
form.setParameter("codigo_postal", "00000");
form.setParameter("telefono", "00000");
form.setParameter("persona_contacto", "persona_prueba");
form.setParameter("cargo", "cargo_prueba");
form.setParameter("telefono_contacto", "00-00-00");
WebRequest req = form.getRequest("Submit");
resp = wc.getResponse(req);
String output = resp.getText();
Assert.assertEquals( output.indexOf("Error"), -1 );
Assert.assertNotNull( resp.getLinkWith("<<< Volver"));
}
}

Tabla 10. Prueba de integracin para el formulario de clientes.


Para el desarrollo de una prueba de carga
sobre nuestro sistema hemos seleccionado la
Al igual que en el apartado 3.1, sera posible
herramienta Jmeter [10]. Esta es una herramienta
aadir a la prueba una comprobacin adicional
open.source cuyo objetivo es realizar
que verificara que el cliente de prueba existe en
simulaciones sobre cualquier recurso software.
la base de datos. Con ello verificaramos que el
Jmeter ha sido desarrollado dentro del proyecto
script de insercin funciona correctamente no
Apache Jakarta y ha sido escrita en Java. En
solo cuando se invoca directamente, sino cuado
sistemas web, Jmeter simula todas las
se invoca a travs del formulario HTML.
funcionalidades de un navegador, siendo capaz
de manipular resultados en determinada
5. PRUEBA DE CARGA. requisicin y reutilizarlos para ser empleados en
una nueva secuencia
Cmo ejemplo de prueba del sistema se ha El componente principal de una prueba en
optado por desarrollar una prueba de carga. Una Jmeter es denominado plan de prueba (test plan),
prueba de carga es un tipo de prueba que permite donde se definen todos los aspectos relacionados
comprobar el rendimiento de un servidor o con una prueba de carga, como parmetros
aplicacin cuando el nmero de clientes o hilos empleados por requisicin, tipo de reportes a
que acceden al l de manera concurrentemente es generarse con los resultados obtenidos, la posible
elevado. Por ejemplo, para un servidor web, una reutilizacin de requisiciones compuestas por
prueba de carga tpica ser crear un conjunto de usuarios, entre otros aspectos.
hilos que accedern simultneamente al servidor, La prueba de carga a desarrollar va a tener
simulando de este modo clientes que acceden dos partes. En la primera se comprobar como
concurrentemente. responde el sistema ante una peticin masiva de
Las pruebas de carga permiten verificar acceso al formulario de clientes. En la segunda
aspectos como la escalabilidad, tiempo de se comprobar la respuesta del sistema ante
respuesta, consumo de memoria y de recursos. inserciones masivas de clientes.
Estas pruebas ayudan a garantizar que el sistema Aunque es posible escribir y ejecutar
funcionar en las peores circunstancias sin pruebas en JMeter desde la lnea de comandos,
ningn problema crtico. Tambin ayudan a se utilizar las facilidades de su interfaz grficas.
detectar problemas de concurrencia y Todas las capturas que se muestran en este
sincronizacin no detectados durante el trabajo pertenecen a la versin 1.8. Se ha
desarrollo del sistema. utilizado esta versin por requerir una cantidad
Una prueba de carga tambin sirve para de recursos sensiblemente inferior que la versin
medir la escalabilidad y potencia de los 2.0.
servidores donde se aloje el sistema web. Al iniciar la aplicacin, se muestra la
pantalla principal, como se recoge en la
ilustracin 9.
5.2. Un ejemplo prctico.
Ilustracin 9. Pantalla principal desde la cual creamos una nueva prueba.
El primer paso es aadir un grupo de hilos. para crear 20 usuarios que soliciten la pgina,
Este elemento va a simular los usuarios que van cada uno de ellos 2 veces, con 40 accesos en
a solicitar el formulario. Se configura la prueba total, tal y como se muestra en la ilustracin 11.

Ilustracin 10. Definimos un grupo de veinte usuarios que realizarn dos peticiones al servidor.
Ahora se indica la accin a realizar de cada acceder a la pgina del formulario, como se
hilo. Para ello se aade una peticin HTTP para muestra en la ilustracin 11.
Ilustracin 11. Peticin http que ejecutar cada hilo.
Para completar la primera parte de la prueba, vez hecho esto, ya se puede ejecutar la primera
se aade un elemento que permita ver los parte de la prueba. En la ilustracin 12 se
resultados de la prueba de manera grfica. Una muestra el resultado de varias ejecuciones.

Ilustracin 12. Resultados de la primera parte de la prueba.


Ahora se realizar la segunda parte de la directamente al script de insercin
prueba, la cual va a consistir en la insercin de (InsertarCliente.php), definiendo las variables del
varios clientes. Para ello se repiten los mismos formulario que espera, como se muestra en la
pasos que en la primera parte, solo que ahora en ilustracin 13.
la peticin HTTP incluimos que llame
Ilustracin 13. Definicin de la peticin que rellenar y enviar el formulario de clientes.
Por ltimo, la ilustracin 14 muestra una
captura de los resultados de la ejecucin de la
segunda parte de la prueba.

Ilustracin 14. Resultados de la segunda parte de la prueba.

Analizando estos resultados y modificando


el nmero de hilos y repeticiones es posible 6. CONCLUSIONES.
comprobar como se comporta nuestra la
aplicacin y los servidores frente a un gran Se ha visto en este trabajo como es
nmero de peticiones. posible desarrollar una aplicacin web y realizar
varias etapas de pruebas de la misma nicamente
con tecnologas open-source. Todas las tcnicas
aqu presentadas son perfectamente aplicables a
otras plataformas (ASP.NET, JSP Servlets) y
para proyectos de mayor complejidad. Parte de [4] Jeff Offutt et-al. 2004. Web Application
las pruebas se realizan utilizando herramientas Bypass Testing. ISSRE '04
desarrolladas en la plataforma Java, con lo que se [5] Mtrica v3.
demuestra tambin la interoperabilidad de estas http://www.csi.map.es/csi/metrica3/
tcnicas y herramientas a pesar de aplicarse [6] HttpUnit. http://httpunit.sourceforge.net/
sobre plataformas tecnolgicas diferentes, en este [7] Herramientas xUnit.
caso HTML y PHP. http://www.xprogramming.com/software.htm
Uno de los principales problemas en el [8] MySQL. http://www.mysql.com
desarrollo de este ejemplo prctico es la [9] PHP. http://www.php.net/
necesidad de trabajar en varias plataformas de [10] Apache Jmeter.
programacin. Se ha utilizado HTML para la http://jakarta.apache.org/jmeter/
interfaz de usuario, PHP para la lgica de la [11] Junit. http://junit.org/
aplicacin y Java para realizar las pruebas. Esto [12] Alguna referencia a pruebas unitarias.
supone la necesidad de disponer de un equipo [13] PEAR PHPUnit.
interdisciplinar especializado en varios http://pear.php.net/package/PHPUnit/
lenguajes. El trabajar con componentes tan [14]W3C HTML Validator.
heterogneos tambin impone la necesidad de http://validator.w3.org/
conocer estrategias distintas de prueba y de [15] HTML 4.01 Specification.
disponer de un conjunto amplio de herramientas http://www.w3.org/TR/html4/
de pruebas, adaptas a cada tecnologa, y de la
formacin adecuada para su uso.
Todas las herramientas utilizadas son de
libre descarga y uso a travs de Internet y
RESEA CURRICULAR.
disponen de su cdigo fuente accesible, incluso
herramientas comerciales como MySQL. Javier J. Gutirrez es Ingeniero Informtico
Es muy importante separar adecuadamente por la Universidad de Sevilla. Actualmente se
cada uno de los elementos que conforman un encuentra realizando los trabajos de
sistema, esto es, los elementos de presentacin, investigacin conducentes a la tesis doctoral en
como cdigo HTML y los elementos de el Departamento de Lenguajes y Sistemas
programacin, como los scripts. Una correcta Informticos la Universidad de Sevilla. Sus reas
separacin facilita el desarrollo, la de estudio se sitan en el proceso de pruebas en
mantenibilidad y, como hemos visto aqu, el ingeniera del software, las metodologas giles
proceso de prueba. de desarrollo y la evolucin del modelo de
Futuras lneas de investigacin planteadas a software libre.
partir de este trabajo son: profundizar en Rafael Pineda cursa actualmente el ltimo
estrategias y herramientas para la prueba de curso en Ingeniera Tcnica de sistemas en la
JavaScript e interfaces escritas en HTML, Universidad de Sevilla. Actualmente trabaja en
estudiar ejemplos prcticos con otras plataformas su proyecto de fin de carrera basado en pruebas
(.NET, Java) y otro tipo de componentes en sistemas web.
(interfaces en Flash) y estudiar estrategias y Daro Villadiego se titul como Ingeniero
herramientas para verificar aplicaciones donde el Tcnico en Informtica de Sistemas en la
cdigo HTML es generado dinmicamente en el Universidad de Sevilla y actualmente trabaja en
servidor. el desarrollo de sistemas web, compaginndolo
con sus estudios en Ingeniera Superior
Informtica.
REFERENCIAS. Mara Jos Escalona se doctor en Lenguajes
y Sistemas Informticos en 2004 con una tesis
[1] Ash, L. 2003. The Web Testing Companion: basada en el aspecto navegacional de los
The Insiders Guide to Efficient and Effective sistemas web. Hasta 2001 trabaj como analista
Tests. John Wiley & Sons, Hoboken, USA. de sistemas para varios organismos pblicos y
[2] Ye Wu, Jeff Offutt, Xiaochen Du. 2004. actualmente trabaja como profesora en el
Modeling and Testing of Dynamic Aspects of departamento de Lenguajes y Sistemas
Web Applicationsy. Submitted for journal Informticos de la Universidad de Sevilla. Su
publication trabajo de investigacin est orientado hacia las
[3] M.J. Escalona, M. Mejas, J.J. Gutirrez, J. metodologas de desarrollo y la Ingeniera web.
Torres. 2004. Mtodos de Testing Sobre La Manuel Mejas se titul como ingeniero
Ingeniera De Requisitos Web de NDT. industrial en 1985 y se doctor como Ingeniero
IADIS WWW/Internet 2.004. 353-360. Industrial en 1997 en la Universidad de Sevilla.
Ha trabajado como profesor en ingeniera del modelado de sistemas orientados a objeto,
software en la Universidad de Sevilla desde procesos de desarrollo software, mtricas y
1987. Dr. Mejas ha centrado su actividad gestin de proyectos software.
investigadora en tcnicas de descripcin formal,

Vous aimerez peut-être aussi