Вы находитесь на странице: 1из 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
1.1. Definiciones.
contabilizan por millones [4]. Por esta misa
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


aplicacin multiplataforma.

Cliente

Servidor
Peticin

1.2. Arquitectura
Cliente/Servidor en aplicaciones
web.

Respuesta

Cdigo ejecutable en el
servidor

El funcionamiento de una aplicacin


Internet es anlogo al de una aplicacin
cliente/servidor tradicional, tal y como se
muestra en la ilustracin 1. Al introducir una
direccin web en un navegador, este actua como
cliente y solicita un fichero localizado en un
ordenador accesible por Internet, el cual actuar
de servidor. El servidor procesar la peticin y
enviar este fichero y el navegador, al recibirlo,
lo interpretar y mostrar la pgina web.
Cliente

Servidor

Servidor de
bases de datos

Ilustracin 2. Funcionamiento bsico de una


aplicacin Internet dinamica.
En la ilustracin 2, se muestra como el
esquema anterior es idntico en cuanto al modelo
cliente/servidor. Lo nico que cambia es el
servidor, ya que ahora consta de dos bloques:
uno que enva la pgina web y otro bloque que la
genera dinmicamente.

Peticin

1.3 Una introduccin al proceso


de prueba.

Respuesta

Ilustracin 1. Funcionamiento bsico de una


aplicacin Internet
Las primeras aplicaciones web se reducan a
un simple peticin de una pgina ya creada; sin
importar la fecha o la hora de la peticin,
siempre reciba el mismo fichero. En los sistemas
web actuales, como se muestra en la ilustracin
2, se un paso ms y la pgina a mostrar se genera
dinmicamente con contenidos personalizados.
Tipos de
pruebas
Pruebas
Unitarias.
Pruebas de
Integracin.
Pruebas del
Sistema.
Pruebas del
Sistema.
Pruebas de
Implantacin.
Pruebas de
Aceptacin.

Momento de realizacin

Hoy en da, debido al aumento del tamao y


la complejidad del software, el proceso de prueba
se ha convertido en una tarea vital dentro del
proceso de desarrollo de cualquier sistema
software [3]. Para analizar cmo se pueden
aplicar mtodos de pruebas en metodologas
web, es necesario realizar antes una clasificacin
de los tipos pruebas existentes, en que momento
se aplican y cuales son sus objetivos. En la tabla
1, se recoge la clasificacin de esas pruebas [5]
dependiendo de su cometido y de la fase de
desarrollo en que se realizan.
Descripcin

Durante la construccin del


sistema
Durante la construccin del
sistema

Prueban el diseo y el comportamiento de cada uno de los


componentes de forma aislada.
Comprueban la correcta unin de los componentes entre s a
travs de sus interfaces, y si cumplen con la funcionalidad
establecida.
Despus de la construccin del
Prueban a fondo el sistema, comprobando su funcionalidad e
sistema
integridad globalmente, en un entorno lo ms parecido
posible al entorno final de produccin.
Despus de la construccin del
Prueban a fondo el sistema, comprobando su funcionalidad
sistema
e integridad globalmente, en un entorno lo ms parecido
posible al entorno final de produccin.
Durante la implantacin en el
Comprueba el correcto funcionamiento del sistema dentro
entrono de produccin.
del entorno real de produccin.
Despus de la implantacin en el Verifican que el sistema cumple con todos los requisitos
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


verifican componentes del sistema mientras que
las pruebas del sistema y posteriores verifican
todo el sistema, considerndolo una caja negra.

2. DESCRIPCIN DEL
EJEMPLO.
Se va a tomar como base para aplicar las
pruebas descritas en los siguientes apartados una
aplicacin web muy simple cuya misin es
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
HTML con cdigo de validacin escrito en
JavaScript, la lgica de negocio encargada de
validar dicho cliente e insertarlo en la base de
datos, escrita mediante un script en PHP [9], y
una tabla donde almacenar las entidades clientes,
alojada en un servidor de bases de datos MySQL

[8]. En la ilustracin 3 se muestran los elementos


que componen esta aplicacin.
Cliente

Cdigo de
validacin Formulario de
clientes

Servidor

Insercin de
clientes

MySQL

Cliente almacenado
correctamente

Error - Cliente no
almacenado

Ilustracin 3. Componentes de la aplicacin


para insercin de clientes.
En la ilustracin 4 se muestran capturas de
pantallas de las pginas HTML.

Ilustracin 4. Formulario de insercin de clientes.


El cdigo de validacin JavaScript en la
interfaz HTML verificar que no se deje vaco
ningn campo obligatorio del formulario.

El cdigo SQL para el servidor MySQL que


define la tabla donde se almacena la informacin
se muestra en la tabla 2.

CREATE TABLE Clientes(Id BIGINT(20)


UNSIGNED NOT NULL AUTO_INCREMENT
PRIMARY KEY,
Entidad VARCHAR(50) NOT NULL,
Actividad VARCHAR(250) NOT NULL,
Direccion VARCHAR(50) NOT NULL,
Localidad VARCHAR(50) NOT NULL,
Codigo_Postal VARCHAR(10) NOT NULL,
Telefono VARCHAR(50) NOT NULL,
Persona_Contacto VARCHAR(50),
Cargo VARCHAR(50),
Telefono_Contacto VARCHAR(10),
Observaciones VARCHAR(250) );

Tabla 2. Cdigo SQL de la tabla de clientes.


Para probar la aplicacin se desarrollar, en
primer lugar, un conjunto de pruebas unitarias
que verifiquen todos los componentes del lado
cliente y del lado servidor. En segundo lugar se
desarrollar una prueba de integracin que
verifique el correcto funcionamiento del
formulario y del cdigo de insercin trabajando
juntos, que englobaremos las pruebas de
integracin y del sistema. En ltimo lugar,
cuando el sistema est completo y las pruebas no
indiquen ningn error, se realizar una prueba de
carga para comprobar como se comporta ante
grandes cargas de trabajo.

3. PRUEBAS UNITARIAS.
Como se ha visto en el apartado 1.3, las
pruebas unitarias tienen como objetivo probar la
funcionalidad de cada componente de manera
independiente al resto de los componentes. Para
esto vamos a dividir los componentes a probar en
dos grupo, los componentes del lado cliente,
pginas web, cdigo JavaScript, etc. y los
componentes del lado
del servidor, como
ficheros de script y bases de datos [1]. En la
aplicacin de ejemplo, los elementos que
pertenecen a cada divisin se muestran en la
ilustracin 5.
Cliente

Cdigo de
validacin

Formulario de
clientes

Servidor

Error - Cliente no
almacenado

Insercin de
clientes

Cliente almacenado
correctamente

MySQL

Ilustracin 5. Componentes del sistema del


lado cliente y del lado servidor.

Los componentes del lado cliente son


aquellos que se descargan y ejecutan en el
navegador, mientras que los componentes del
lado servidor se ejecutan en el servidor y sus
resultados se envan al cliente. A continuacin se
describe las estrategias y herramientas empleadas
para probar los componentes del lado del
servidor, en el apartado 3.1, y del lado cliente, en
el apartado 3.2, de la aplicacin.

3.1. Pruebas del lado servidor.


Queda fuera del objetivo de este trabajo
probar los elementos relativos al servidor de
bases de datos utilizados, por lo que nos
centraremos solo en ver las estrategias de prueba
para cdigo ejecutable en el servidor.
La estrategia para probar el correcto
funcionamiento del cdigo del servidor es muy
similar a la estrategia para realizar pruebas
unitarias
cualquier
otro
lenguajes
de
programacin para aplicaciones no web. La idea
principal es escribir un fragmento de cdigo (un
script PHP en el sistema de ejemplo) de prueba
que invoque al cdigo que queremos probar con
un conjunto de valores de prueba y verifique si el
resultado es el esperado.
Para facilitar y automatizar este proceso,
existen una serie de herramientas que siguen la
filosofa de la herramienta open-source JUnit
[11]. Una lista de herramientas xUnit para
distintas plataformas se puede encontrar en [7].
De entre todas las herramientas disponibles para
cdigo PHP se ha elegido PEAR PHPUnit [13].
La descripcin de la prueba a realizar sobre
el sistema de ejemplo es la siguiente: el sistema
ofrece una funcin para insertar clientes, la cual
admite como parmetro una tabla con toda la
informacin del cliente y devuelve un resultado
indicativo de si el cliente se insert
correctamente o hubo un error. El prototipo de
esta funcin se muestra en la tabla 3.
// $result vale TRUE si el cliente se
// insert correctamente en la
// base de datos o FALSE en otro caso.
function insertarCliente($cliente)
{
//...
return $result;
}

Tabla 3. Estructura de la funcin de insercin


de clientes.
La prueba va a consistir en dos partes, las
cuales se detallan en la tabla 4.

Paso Accin
1
Llamar a la funcin
insertarCliente con
un cliente de prueba
2
Buscar en la base de
datos el cliente de
prueba insertado en el
paso anterior

Verificacin.
Verificar que el
resultado de la funcin.
Verificar que el cliente
existe en la base de
datos y sus valores
coinciden con los
valores del cliente de
prueba.

El cdigo del script en PHP que implementa


esta prueba se muestra a continuacin, en la tabla
5.
Al ejecutar esta prueba, si la funcin
insertarCliente no presenta ningn fallo se
obtiene una salida como la mostrada en la
ilustracin 6, la cual indica que la prueba ha sido
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">

Ilustracin 6. Prueba superada con xito.

3.2. Pruebas unitarias del lado


cliente.
Las pruebas de los componentes de lado
cliente van a tener como objetivo asegurar que el
cdigo HTML es correcto y cumple los
estndares [15] y comprobar el funcionamiento
de las partes dinmicas de las pginas, en este
caso verificar el cdigo JavaScript de validacin
del formulario.
Otras pruebas que pueden encuadrarse en
esta categora son: verificar que las pginas se
visualizan adecuadamente en los navegadores
que usan los clientes, comprobar la usabilidad
del diseo, etc.

3.1.1. Pruebas de pginas HTML.


A diferencia de los scripts del lado del
servidor, una pgina HTML no suele realizar
ninguna tarea, sino que contiene la informacin
que se debe mostrar y como debe mostrarse. Por
tanto se ha decidido elaborar pruebas para
verificar que cada pgina de la aplicacin de
ejemplo cumple con los estndares HTML
propuestos por el consorcio W3C. En la pgina
web del consorcio se puede encontrar una
herramienta de validacin de archivos HTML
[14]. En la tabla 6 se muestra un resumen del
proceso de prueba de las pginas HTML de la
aplicacin.
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:

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.
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
HTML 4.01 Transitional!.
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
modificaciones.

Tabla 6. Prueba del formulario HTML de


insercin de clientes.
Para evitar tener que verificar uno a uno
cada archivo y tener que subirlos de nuevo cada
vez que se realice una modificacin, existe la
opcin de indicarle una URL y la herramienta de
validacin verificar todos los archivos HTML
que sea capaz de alcanzar a partir de dicha URL.
Tambin existen aplicaciones que realizan
automticamente la conexin con la herramienta
de validacin.

3.1.2. Prueba de cdigo JavaScript.


Como vimos en el punto 2, el formulario de
clientes incluye tambin un script en lenguaje
JavaScript para evitar campos obligatorios en
blanco. Este cdigo tambin es necesario
probarlo para verificar que su comportamiento es
correcto, esto es, que detecta todas las posibles
combinaciones invlidas.
Originalmente el cdigo JavaScript se
encontraba incrustado en la pgina HTML que
contiene el formulario de clientes, lo cual
dificultaba su prueba. Por este motivo, el cdigo
fue movido a su propio archivo (validar.js). En
la tabla 7 se muestra un fragmento del cdigo de
validacin del formulario.

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"

Este cdigo avisar si algn campo se deja


en blanco, y colocar el foco en el campo en

blanco, como se muestra en la ilustracin 7 e


ilustracin 8.

Ilustracin 7. Validacin del formulario mediante JavaScript.

Ilustracin 8. Detalle de la ventana de alerta.


La primera estrategia posible es validar el
cdigo manualmente, introduciendo todas las
posibles combinaciones en el formulario a mano
y comprobando que los resultados del cdigo
JavaScript son adecuados. Esta solucin es la
ms rpida y sencilla de realizar, pero requiere la
dedicacin exclusiva de una persona, es propensa
a fallos debido a ser una tarea repetitiva y es
necesario repetir el proceso manual de pruebas
cada vez que se modifique el formulario o el
cdigo JavaScript.
Otra estrategia es desarrollar una prueba de
cdigo, escribiendo otro script en JavaScript que
verifique si el cdigo de validar.js se comporta
correctamente para un conjunto de valores, de
manera similar a la prueba realizada en el
apartado 3.1. Como se debe comprobar el cdigo
de validar.js aisladamente, es necesario crear
un objeto que represente el formulario, un
fragmento del cdigo que representa al
formulario se muestra en la tabla 8.
function entidad(valor) {
this.value=valor;
return(this);
}
// Una funcin similar por cada campo.
// ...
function FormularioClientes(e, a,
d, l, c, t) {
this.entidad=new entidad(e);
this.actividad=new actividad(a);
this.direccion=new direccion(d);
this.localidad=new localidad(l);
this.codigo_postal=new
codigo_postal(c);
this.telefono=new telefono(t);
return (this);
}

Tabla 8. Objeto que representa el formulario


de clientes.
Una prueba que verifique el cdigo de
validacin con la ayuda de este representante se
muestra en la tabla 9.
<SCRIPT LANGUAGE="JavaScript"
SRC="validar.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript"
SRC="formularioClientes.js"></SCRIPT
>
<SCRIPT LANGUAGE="JavaScript">
var form= new

FormularioClientes("","a", d", "l",


"c", "t");
if (Validador(form) == false) {
alert("Prueba no superada.");
} else {
alert("Prueba superada.");
}
</SCRIPT>

Tabla 9. Prueba del cdigo JavaScript del


formulario de clientes.
A partir de esta prueba se podran desarrollar
ms pruebas similares cambiando la posicin del
campo que se deja en blanco en la creacin del
objeto formulario.
Sin embargo esta estrategia tampoco es una
buena solucin ya que, aunque comprueba que la
funcin devuelve el valor esperado, no
comprueba que el mensaje de alerta contenga el
texto adecuado o que el foco del formulario se
coloque en el campo vaco. Adems, una vez
ejecutado la instruccin alert del cdigo de
validacin (validar.js) la ejecucin de la prueba
no continua, por lo que tambin hay que
comprobar manualmente que se muestra la
ventana adecuada, no obteniendo ninguna
ventaja respecto a la comprobacin manual.
Otras posibles soluciones para mejorar la
eficiencia de las pruebas de cdigo JavaScript,
que se plantean como futuras lneas de
investigacin, son utilizar un intrprete de
JavaScript independiente del navegador o una
herramienta de captura de pulsaciones de ratn.
Este mismo proceso puede realizarse para
verificar otros tipos de lenguajes ejecutables en
el cliente, como por ejemplo VBScript.

4. PRUEBAS DE
INTEGRACIN.
Una vez verificado cada uno de los
componentes mediante pruebas unitarias, es
necesario comprobar que dichos componentes
son capaces de trabajar correctamente en
conjunto. Para ello desarrollamos pruebas de
integracin.
Dado que los elementos del lado cliente y
servidor en aplicaciones Web se comunican
mediante HTTP en vez de mediante llamadas a
mtodos o funciones, las herramientas tipo xUnit
utilizadas en el apartado anterior no son
adecuadas para probar la integracin de los
componentes del lado cliente y servidor.
Los dos mtodos principales para realizar
pruebas automticas de aplicaciones Web a
travs de su interfaz de usuario son mediante
macros grabadas que puedan reproducirse y

mediante un API programtico que analice las


respuestas HTTP. Las macros grabadas requieren
revisiones frecuentes y tienden a ser frgiles, ya
que es necesario volverlas a grabar cuando
cambia la interfaz. Un API programtico permite
escribir un programa que realice las peticiones
HTTP adecuadas y recibe y analice las
respuestas del servidor. Esta aproximacin es
ms flexible, minimiza el mantenimiento de las
pruebas y permite probar sistemas web que
devuelven como respuesta pginas HTML muy
variables o complejas. El lado negativo de las
pruebas basadas en API con respecto a las
macros grabadas es que la aproximacin dirigida
al API tardan ms en construirse. Esta es la
aproximacin a utilizar en este trabajo.
Existen varias herramientas open-source que
permiten realizar esta tarea. La herramienta
elegida para este caso prctico es HttpUnit [6]. A
pesar de estar escrita en Java, esta herramienta
permite probar todo tipo de aplicaciones web. En
este caso la vamos a aplicar a una aplicacin en
PHP con una interfaz en HTML.

4.1. Escribiendo una prueba de


integracin.

import
import
import
import
import

Bsicamente HttpUnit funciona como un


cliente web que recibe una pgina y al que se le
puede preguntar por los elementos que incluye
esa pgina e interactuar con ella. Esta
herramienta proporciona muchas de las
funciones de un navegador: control de cookies,
anlisis de contenido HTML, envo de
formularios meditante los mtodos GET y POST,
autentificacin, y ms.
Vamos a escribir una clase Java que conecte
con el servidor y solicite el formulario y despus
realizaremos una serie de comprobaciones sobre
el formulario para verificar que todo est en
orden y una serie de acciones para verificar que
el funcionamiento es el deseado.
La prueba va a realizar las siguientes
comprobaciones:
1. Verificar que es capaz de conectar con el
servidor y solicitar el formulario de clientes.
2. Comprobar que se ha recibido la pgina
adecuada verificando su ttulo.
3. Comprobar que la pgina contiene el
formulario adecuado verificando su ttulo.
4. Comprobar que existen todos los campos
del formulario y asignarles valores de prueba.
5. Comprobar que al pulsar el botn
"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.

net.sourceforge.jwebunit.WebTestCase;
com.meterware.httpunit.*;
com.meterware.servletunit.*;
java.util.*;
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.

Al igual que en el apartado 3.1, sera posible


aadir a la prueba una comprobacin adicional
que verificara que el cliente de prueba existe en
la base de datos. Con ello verificaramos que el
script de insercin funciona correctamente no
solo cuando se invoca directamente, sino cuado
se invoca a travs del formulario HTML.

5. PRUEBA DE CARGA.
Cmo ejemplo de prueba del sistema se ha
optado por desarrollar una prueba de carga. Una
prueba de carga es un tipo de prueba que permite
comprobar el rendimiento de un servidor o
aplicacin cuando el nmero de clientes o hilos
que acceden al l de manera concurrentemente es
elevado. Por ejemplo, para un servidor web, una
prueba de carga tpica ser crear un conjunto de
hilos que accedern simultneamente al servidor,
simulando de este modo clientes que acceden
concurrentemente.
Las pruebas de carga permiten verificar
aspectos como la escalabilidad, tiempo de
respuesta, consumo de memoria y de recursos.
Estas pruebas ayudan a garantizar que el sistema
funcionar en las peores circunstancias sin
ningn problema crtico. Tambin ayudan a
detectar problemas de concurrencia y
sincronizacin no detectados durante el
desarrollo del sistema.
Una prueba de carga tambin sirve para
medir la escalabilidad y potencia de los
servidores donde se aloje el sistema web.

5.2. Un ejemplo prctico.

Para el desarrollo de una prueba de carga


sobre nuestro sistema hemos seleccionado la
herramienta Jmeter [10]. Esta es una herramienta
open.source cuyo objetivo es realizar
simulaciones sobre cualquier recurso software.
Jmeter ha sido desarrollado dentro del proyecto
Apache Jakarta y ha sido escrita en Java. En
sistemas web, Jmeter simula todas las
funcionalidades de un navegador, siendo capaz
de manipular resultados en determinada
requisicin y reutilizarlos para ser empleados en
una nueva secuencia
El componente principal de una prueba en
Jmeter es denominado plan de prueba (test plan),
donde se definen todos los aspectos relacionados
con una prueba de carga, como parmetros
empleados por requisicin, tipo de reportes a
generarse con los resultados obtenidos, la posible
reutilizacin de requisiciones compuestas por
usuarios, entre otros aspectos.
La prueba de carga a desarrollar va a tener
dos partes. En la primera se comprobar como
responde el sistema ante una peticin masiva de
acceso al formulario de clientes. En la segunda
se comprobar la respuesta del sistema ante
inserciones masivas de clientes.
Aunque es posible escribir y ejecutar
pruebas en JMeter desde la lnea de comandos,
se utilizar las facilidades de su interfaz grficas.
Todas las capturas que se muestran en este
trabajo pertenecen a la versin 1.8. Se ha
utilizado esta versin por requerir una cantidad
de recursos sensiblemente inferior que la versin
2.0.
Al iniciar la aplicacin, se muestra la
pantalla principal, como se recoge en la
ilustracin 9.

Ilustracin 9. Pantalla principal desde la cual creamos una nueva prueba.


El primer paso es aadir un grupo de hilos.
Este elemento va a simular los usuarios que van
a solicitar el formulario. Se configura la prueba

para crear 20 usuarios que soliciten la pgina,


cada uno de ellos 2 veces, con 40 accesos en
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
hilo. Para ello se aade una peticin HTTP para

acceder a la pgina del formulario, como se


muestra en la ilustracin 11.

Ilustracin 11. Peticin http que ejecutar cada hilo.


Para completar la primera parte de la prueba,
se aade un elemento que permita ver los
resultados de la prueba de manera grfica. Una

vez hecho esto, ya se puede ejecutar la primera


parte de la prueba. En la ilustracin 12 se
muestra el resultado de varias ejecuciones.

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


Ahora se realizar la segunda parte de la
prueba, la cual va a consistir en la insercin de
varios clientes. Para ello se repiten los mismos
pasos que en la primera parte, solo que ahora en
la peticin HTTP incluimos que llame

directamente
al
script
de
insercin
(InsertarCliente.php), definiendo las variables del
formulario que espera, como se muestra en la
ilustracin 13.

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
comprobar como se comporta nuestra la
aplicacin y los servidores frente a un gran
nmero de peticiones.

6. CONCLUSIONES.
Se ha visto en este trabajo como es
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


las pruebas se realizan utilizando herramientas
desarrolladas en la plataforma Java, con lo que se
demuestra tambin la interoperabilidad de estas
tcnicas y herramientas a pesar de aplicarse
sobre plataformas tecnolgicas diferentes, en este
caso HTML y PHP.
Uno de los principales problemas en el
desarrollo de este ejemplo prctico es la
necesidad de trabajar en varias plataformas de
programacin. Se ha utilizado HTML para la
interfaz de usuario, PHP para la lgica de la
aplicacin y Java para realizar las pruebas. Esto
supone la necesidad de disponer de un equipo
interdisciplinar
especializado
en
varios
lenguajes. El trabajar con componentes tan
heterogneos tambin impone la necesidad de
conocer estrategias distintas de prueba y de
disponer de un conjunto amplio de herramientas
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
disponen de su cdigo fuente accesible, incluso
herramientas comerciales como MySQL.
Es muy importante separar adecuadamente
cada uno de los elementos que conforman un
sistema, esto es, los elementos de presentacin,
como cdigo HTML y los elementos de
programacin, como los scripts. Una correcta
separacin
facilita
el
desarrollo,
la
mantenibilidad y, como hemos visto aqu, el
proceso de prueba.
Futuras lneas de investigacin planteadas a
partir de este trabajo son: profundizar en
estrategias y herramientas para la prueba de
JavaScript e interfaces escritas en HTML,
estudiar ejemplos prcticos con otras plataformas
(.NET, Java) y otro tipo de componentes
(interfaces en Flash) y estudiar estrategias y
herramientas para verificar aplicaciones donde el
cdigo HTML es generado dinmicamente en el
servidor.

REFERENCIAS.
[1] Ash, L. 2003. The Web Testing Companion:
The Insiders Guide to Efficient and Effective
Tests. John Wiley & Sons, Hoboken, USA.
[2] Ye Wu, Jeff Offutt, Xiaochen Du. 2004.
Modeling and Testing of Dynamic Aspects of
Web Applicationsy. Submitted for journal
publication
[3] M.J. Escalona, M. Mejas, J.J. Gutirrez, J.
Torres. 2004. Mtodos de Testing Sobre La
Ingeniera De Requisitos Web de NDT.
IADIS WWW/Internet 2.004. 353-360.

[4] Jeff Offutt et-al. 2004. Web Application


Bypass Testing. ISSRE '04
[5] Mtrica v3.
http://www.csi.map.es/csi/metrica3/
[6] HttpUnit. http://httpunit.sourceforge.net/
[7] Herramientas xUnit.
http://www.xprogramming.com/software.htm
[8] MySQL. http://www.mysql.com
[9] PHP. http://www.php.net/
[10] Apache Jmeter.
http://jakarta.apache.org/jmeter/
[11] Junit. http://junit.org/
[12] Alguna referencia a pruebas unitarias.
[13] PEAR PHPUnit.
http://pear.php.net/package/PHPUnit/
[14]W3C HTML Validator.
http://validator.w3.org/
[15] HTML 4.01 Specification.
http://www.w3.org/TR/html4/

RESEA CURRICULAR.
Javier J. Gutirrez es Ingeniero Informtico
por la Universidad de Sevilla. Actualmente se
encuentra
realizando
los
trabajos
de
investigacin conducentes a la tesis doctoral en
el Departamento de Lenguajes y Sistemas
Informticos la Universidad de Sevilla. Sus reas
de estudio se sitan en el proceso de pruebas en
ingeniera del software, las metodologas giles
de desarrollo y la evolucin del modelo de
software libre.
Rafael Pineda cursa actualmente el ltimo
curso en Ingeniera Tcnica de sistemas en la
Universidad de Sevilla. Actualmente trabaja en
su proyecto de fin de carrera basado en pruebas
en sistemas web.
Daro Villadiego se titul como Ingeniero
Tcnico en Informtica de Sistemas en la
Universidad de Sevilla y actualmente trabaja en
el desarrollo de sistemas web, compaginndolo
con sus estudios en Ingeniera Superior
Informtica.
Mara Jos Escalona se doctor en Lenguajes
y Sistemas Informticos en 2004 con una tesis
basada en el aspecto navegacional de los
sistemas web. Hasta 2001 trabaj como analista
de sistemas para varios organismos pblicos y
actualmente trabaja como profesora en el
departamento de Lenguajes y Sistemas
Informticos de la Universidad de Sevilla. Su
trabajo de investigacin est orientado hacia las
metodologas de desarrollo y la Ingeniera web.
Manuel Mejas se titul como ingeniero
industrial en 1985 y se doctor como Ingeniero
Industrial en 1997 en la Universidad de Sevilla.

Ha trabajado como profesor en ingeniera del


software en la Universidad de Sevilla desde
1987. Dr. Mejas ha centrado su actividad
investigadora en tcnicas de descripcin formal,

modelado de sistemas orientados a objeto,


procesos de desarrollo software, mtricas y
gestin de proyectos software.

Вам также может понравиться