En este capítulo se muestra la arquitectura del sistema de testing final y se mostrará con un ejemplo ilustrativo el funcionamiento de la ejecución de las pruebas del sistema automático. También se incluirán los resultados obtenidos con el proyecto.
6.1 ARQUITECTURA FINAL DEL SISTEMA
La Figura6.1ilustra la arquitectura del sistema automático de testing con algunas diferencias.
En este caso el software de control de versiones no es GitHub si no que se utiliza Subversion, en el servidor de ejecución aún no se usa docker pero es algo en lo que se está trabajando actualmente y por último la FPGA en el sistema de distribución de claves se traduce en el dispositivo cifrador de claves, el cual no tiene conexión con la red privada.
La interacción entre los componentes de esta arquitectura presenta las siguientes características:
• En primer lugar se desarrollan los test y se prueban en la máquina de desarrollo.
• Una vez las pruebas están desarrolladas se suben al repositorio de control de versiones Subver- sion. Estos dos primeros pasos se realizarán continuamente.
• Por otro lado Jenkins se encuentra a la espera de la generación de nuevas versiones del sistema EKMS-ESP, para ello realiza checks periódicos cada 15 minutos de los ficheros del repositorio de control de versiones. Este check periódico se debe configurar en el apartado’Build triggers’
de la configuración de Jenkins, esta frecuencua de tiempo se expresa en formato CRON [2], un check cada quince minutos se expresa con la expresión’ 0 – H/15 * * * * ’. Una vez Jenkins detecta un nuevo cambio empieza el proceso de verificación explicado en la sección Diagrama de Secuencia5.2.2.
• Una vez el sistema queda verificado, el servidor de ejecución genera los reportes de esta verificación y Jenkins los guarda en su repositorio local.
• Todos estos componentes se pueden comunicar a través de la red privada de la empresa, por lo que es posible acceder a Jenkins desde cualquier máquina que cuente con permisos de acceso.
Esto permite que cualquier miembro del equipo pueda hacer una revisión de los reportes, aunque normalmente será el tester del equipo el encargado de realizar esta revisión dado que será el que mejor entiende la estructura de los test y podrá determinar con mayor rapidez qué es lo que falla.
74 6.2. EJEMPLO EJECUCIÓN DE TEST
Developer Dispositivo Cifrador
eth
eth eth
eth Server External Service
Server Ejecución commit
hook
build
exercise report
report Subversion
Figura 6.1:Arquitectura Sistema Automático de Testing
6.2 EJEMPLO EJECUCIÓN DE TEST
Para ilustrar el trabajo realizado en este TFG y su integración dentro del proyecto EKMS se va a mostrar y explicar la ejecución de uno de los test desarrollados que posteriormente se han ejecutado con el sistema automático.
En la siguiente secuencia se muestran los estados por los que el sistema pasa a lo largo del test.
Adicionalmente se explica que es lo que sucede en ese estado, que acciones hacen falta para llegar a él y se aporta el fragmento de código correspondiente a esta dichas acciones.
En resumen en el caso de prueba se debe realizar una distribución de claves entre dos cuentas, cada una representa un nodo distinto de la red de comunicaciones de la NDA. La cuenta principal de la NDA correspondería con la cuenta que loguea en el sistema y comienza la operación de distribución.
Como resultado de esta operación deben generarse una serie de movimientos y documentos los cuales deben ser comprobados.
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 75
Estado Inicial
La imagen6.2representa la ventana de login inicial del EKMS-ESP que como es deducible sirve para iniciar sesión con un usuario en el sistema introduciendo nombre y contraseña.
Todos los test empiezan en esta ventana, y realizan la acción de login, por ello en el método beforeEach()6.1de cada batería se incluye la llamada al método de login el cual loguea al usuario.
Listado 6.1:BeforeEach()
1 b e f o r e E a c h (() = > {
2 b r o w s e r
3 . g e t T i t l e ()
4 . t h e n ( f u n c t i o n ( t i t l e T x t ) {
5 if ( t i t l e T x t . i n c l u d e s ( m y T e x t s . t i t l e L o g i n ) ) {
6 m y F u n c t . u s e r L o g i n ( m y T e x t s . t e s t e r N a m e L o g i n I n f o , m y T e x t s . t e s t e r P a s s L o g i n I n f o ) ;
7 }
8 })
9 . t h e n (() = > {
10 b r o w s e r . w a i t ( b r o w s e r . get ( b a s e U r l ) , m a x W a i t T i m e ,
’ W a i t i n g ␣ for ␣ the ␣ H o m e ␣ P a g e ␣ to ␣ l o a d ’) ;
11 }) ;
12 }) ;
https://EKMS/Login A Web Page
Login User
Password
Bienvenido a EKMS
Figura 6.2:Estado Inicial
76 6.2. EJEMPLO EJECUCIÓN DE TEST
Login de Usuario
Como se ha explicado en el punto anterior, antes de cada test se el usuario se loguea en el sistema, por lo que se ha creado una función de login para evitar esta repetición de código.
Esta función es la correspondiente al código6.2, en ella se introduce un nombre de usuario registrado en el sistema y su contraseña en los textbox correspondientes, después se pulsa el botón de login y se espera a que cargue la página de Home.
Listado 6.2:Login
1 / ∗ ∗
2 ∗ Promises to l o g i n with the " Username " + " Password " given .
3 ∗ @returns True when logged , f a l s e i f not .
4 ∗ /
5 e x p o r t f u n c t i o n u s e r L o g i n ( us e r n a m e , p a s s w o r d ) : p r o m i s e . Promise <boolean> {
6 w a i t F o r ( m y E l e m . l o g i n B t n , C L I C K A B L E ) . t h e n (
7 f u n c t i o n s u c c e s s () {
8 p r o t r a c t o r . p r o m i s e
9 . all ([ m y E l e m . u s e r n a m e T e x t B o x . s e n d K e y s ( u s e r n a m e ) , m y E l e m . p a s s w o r d T e x t B o x . s e n d K e y s ( p a s s w o r d ) ])
10 . t h e n (() = > {
11 m y E l e m . l o g i n B t n . c l i c k () ;
12 w a i t F o r ( m y E l e m . l o g i n B t n , I N V I S I B L E ) ;
13 })
14 . t h e n (() = > {
15 d e f e r r e d . f u l f i l l (t r u e) ;
16 })
17 . t h e n (() = > {}) ;
18 } ,
19 f u n c t i o n e r r o r ( r e a s o n ) {
20 d e f e r r e d . r e j e c t (’ F a i l ␣ w h i l e ␣ t r y i n g ␣ to ␣ L o g i n . ’ + r e a s o n ) ;
21 }
22 ) ;
23 r e t u r n d e f e r r e d . p r o m i s e ;
24 }
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 77
https://EKMS/Login A Web Page
Login Sergio
...
Bienvenido a EKMS
Figura 6.3:Login
Menú Home
Una vez el usuario se encuentra registrado en el sistema es reconducido a esta página. En la barra de menú de esta ventana se pueden escoger las distintas opciones que aporta el sistema EKMS-ESP, para realizar una exportación se debe pulsar en el botón de Claves y posteriormente en exportación. En este test no se realiza la pulsación de botones ya que eso se comprueba en otro test; en su lugar para agilizar el test se introduce la url de la página de exportación directamente y se espera a que cargue. Como se puede observar, para saber que dicha página ha cargado nos fijamos en que un cierto elemento sea Clickable, es decir, que esté cargado.
Listado 6.3:Home
1 b r o w s e r
2 . w a i t (
3 b r o w s e r . get ( b a s e U r l + ’ /#/ E K M S / e x p o r t k e y s ’) ,
4 m a x W a i t T i m e ,
5 ’ W a i t i n g ␣ for ␣ the ␣ D i s t r i b u t e K e y s ␣ p a g e ␣ to ␣ l o a d . ’
6 )
7 . t h e n (() = > {
8 w a i t F o r ( m y E l e m .
d i s t r i b u t e K e y s A v a i l a b l e T r e e S h o r t T i t l e . get (0) , C L I C K A B L E ) ;
9 })
78 6.2. EJEMPLO EJECUCIÓN DE TEST
https://EKMS/Home A Web Page
Home Claves Equipos Operaciones Documentos Administador
Menú de Inicio
Figura 6.4:Home
Selección de las Claves a Exportar
El primer paso para preparar una exportación de claves en el EKMS-ESP es seleccionar la clave que se quiere exportar en el árbol de claves electrónicas disponibles, en este caso laClave1. Adicionalmente se debe limpiar el árbol de la derecha pulsando el botón de Limpiar porque es posible que se encuentre relleno con datos de exportaciones realizadas anteriormente.
Listado 6.4:Selección Clave
1 })
2 . t h e n (() = > {
3 m y E l e m . d i s t r i b u t e K e y s P a g e C l e a r B t n . c l i c k () ;
4 w a i t F o r ( m y E l e m . c o n f i r m Y e s B t n , C L I C K A B L E ) ;
5 })
6 . t h e n (() = > {
7 expect < any >( m y E l e m . c o n f i r m D i a l o g . g e t T e x t () ) . t o C o n t a i n (
8 m y T e x t s . u i G r o w l M s g S u c c e s f u l D i s t r i b u t i o n U n s a v e d C h a n g e s
9 ) ;
10 })
11 . t h e n (() = > {
12 m y E l e m . c o n f i r m Y e s B t n . c l i c k () ;
13 w a i t F o r ( m y E l e m . c o n f i r m D i a l o g , I N V I S I B L E ) ;
14 })
15 . t h e n (() = > {
16 expect < any >( m y E l e m .
d i s t r i b u t e K e y s D i s t r i b u t e T r e e A c c o u n t . c o u n t () ) . t o B e (0) ;
17 })
18 . t h e n (() = > {
19 m y E l e m . d i s t r i b u t e K e y s A v a i l a b l e T r e e S h o r t T i t l e . get (0) . c l i c k () ;
20 })
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 79
https://EKMS/ExportKeys A Web Page
Claves Electrónicas Clave 1
Clave 2 Clave 3
... Subnodos
Seleccionar
Claves Seleccionadas
Limpiar Comenzar
Figura 6.5:Selección de Claves
Selección de las Cuentas a las que se quiere exportar
Seguidamente se deben seleccionar aquellas cuentas a las que irán dirigidas las claves, para ello se despliega el menuitem de subnodos, seleccionan aquellos correspondientes, y se pulsa el botón de seleccionar. En este caso se selecciona laCuenta2como destino. Para poder comprobar después que las cuentas son las correctas se guarda el nombre de la cuenta en una lista.
Listado 6.5:Selección Cuentas
1 })
2 . t h e n (() = > {
3 m y E l e m . d i s t r i b u t e K e y s P a g e A c c o u n t M u l t i s e l e c t . c l i c k () ;
4 })
5 . t h e n (() = > {
6 m y E l e m . d i s t r i b u t e K e y s P a g e A c c o u n t M u l t i s e l e c t A c c o u n t
7 . g e t L i s t e d T e x t ()
8 . t h e n ( f u n c t i o n r e a d ( a r r a y ) {
9 s e l e c t e d A c c o u n t s . p u s h ( a r r a y [ 0 ] ) ;
10 }) ;
11 })
12 . t h e n (() = > {
13 m y E l e m . d i s t r i b u t e K e y s P a g e A c c o u n t M u l t i s e l e c t A c c o u n t . get (0) . c l i c k () ;
14 })
15 . t h e n (() = > {
16 m y E l e m . d i s t r i b u t e K e y s P a g e A c c o u n t M u l t i s e l e c t C l o s e . c l i c k () ;
17 })
18 . t h e n (() = > {
19 m y E l e m . d i s t r i b u t e K e y s P a g e A d d B t n . c l i c k () ;
20 })
80 6.2. EJEMPLO EJECUCIÓN DE TEST
Seleccionar
https://EKMS/ExportKeys A Web Page
Claves Electrónicas Clave 1
Clave 2 Clave 3 ...
Subnodos
Claves Seleccionadas
Limpiar Comenzar Cuenta1
Cuenta2 Cuenta3
Seleccionar
Figura 6.6:Selección de Cuentas
Lanzamiento de operación de exportación
Por último se comprueba que en el árbol deClaves Seleccionadasse encuentra la cuenta que se ha seleccionado anteriormente. Para lanzar la operación de exportación se pulsa el botón de comenzar. Al lanzar la operación debe mostrarse un mensaje por pantalla indicando que hay una nueva operación pendiente de ser aprobada.
Listado 6.6:Lanzamiento Operación
1 })
2 . t h e n (() = > {
3 expect < any >( m y E l e m .
d i s t r i b u t e K e y s D i s t r i b u t e T r e e A c c o u n t L i s t . c o u n t () ) . t o B e (
4 s e l e c t e d A c c o u n t s . l e n g t h
5 ) ;
6 })
7 . t h e n (() = > {
8 m y E l e m . d i s t r i b u t e K e y s D i s t r i b u t e T r e e A c c o u n t L i s t . g e t L i s t e d T e x t () . t h e n ( f u n c t i o n r e a d ( a r r a y ) {
9 s e l e c t e d T r e e A c c o u n t s = a r r a y ;
10 }) ;
11 })
12 . t h e n (() = > {
13 expect < any >( m y F u n c t . c o m p a r e A r r a y s ( s e l e c t e d A c c o u n t s , s e l e c t e d T r e e A c c o u n t s ) ) ;
14 })
15 . t h e n (() = > {
16 m y E l e m . d i s t r i b u t e K e y s P a g e S t a r t B t n . c l i c k () ;
17 w a i t F o r ( m y E l e m . c o n f i r m Y e s B t n , C L I C K A B L E ) ;
18 })
19 . t h e n (() = > {
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 81
20 expect < any >( m y E l e m . c o n f i r m D i a l o g . g e t T e x t () ) . t o C o n t a i n (
21 m y T e x t s .
u i G r o w l M s g S u c c e s f u l D i s t r i b u t i o n S t a r t C o n f i r m a t i o n
22 ) ;
23 })
24 . t h e n (() = > {
25 m y E l e m . c o n f i r m Y e s B t n . c l i c k () ;
26 w a i t F o r ( m y E l e m . c o n f i r m D i a l o g , I N V I S I B L E ) ;
27 w a i t F o r ( m y E l e m . u i G r o w l M s g , V I S I B L E ) ;
28 })
29 . t h e n (() = > {
30 expect < any >( m y E l e m . u i G r o w l M s g . g e t T e x t () ) . t o C o n t a i n (
31 m y T e x t s . u i G r o w l M s g S u c c e s f u l D i s t r i b u t i o n S t a r t e d
32 ) ;
33 })
34 . t h e n (() = > {
35 m y E l e m . u i G r o w l C l o s e B t n . c l i c k () ;
36 })
Seleccionar
https://EKMS/ExportKeys A Web Page
Claves Electrónicas Clave 2
Clave 3
... Subnodos
Claves Seleccionadas
Limpiar Comenzar Seleccionar
Tiene 1 nueva Operación
Figura 6.7:Lanzamiento Operación Exportación
82 6.2. EJEMPLO EJECUCIÓN DE TEST
Inicio operación Exportación
Una vez se ha establecido los parámetros de la operación, es decir, las claves a exportar y las cuentas destino, se debe comenzar la propia operación. Para esto primero hay que dirigirse a la página de operaciones, en esta se comprueba que el número de operaciones no sea superior al número de cuentas, también se comprueba que las cuentas que aparecen como destino son las que se han seleccionado anteriormente. Para comenzar con la operación se pulsa el icono de inicio, al producirse esto se comprueba que se muestra un mensaje con la información de que una operación de distribución ha sido iniciada.
Listado 6.7:Inicio Operación
1 })
2 . t h e n (() = > {
3 b r o w s e r . w a i t (
4 b r o w s e r . get ( b a s e U r l + ’ / E K M S / o p e r a c i o n e s ’) ,
5 m a x W a i t T i m e ,
6 ’ W a i t i n g ␣ for ␣ the ␣ O p e r a t i o n s ␣ p a ge ␣ to ␣ l o a d . ’
7 ) ;
8 w a i t F o r ( m y E l e m . r e q u e s t s P a g e R e q u e s t T a b l e , V I S I B L E ) ;
9 })
10 . t h e n (() = > {
11 w a i t F o r ( m y E l e m . r e q u e s t s P a g e R e q u e s t T a b l e , NOTEXT , m a x W a i t T i m e / 3 , m y T e x t s . t o S e l e c t ) ;
12 })
13 . t h e n (() = > {
14 s e l e c t e d A c c o u n t s . f o r E a c h ( a c c o u n t = > {
15 expect < any >( m y E l e m . r e q u e s t s P a g e R e q u e s t T a b l e . g e t T e x t () ) . t o C o n t a i n ( a c c o u n t ) ;
16 }) ;
17 })
18 . t h e n (() = > {
19 expect < any >( m y E l e m . f i r s t E l e m e n t I n R e q u e s t T a b l e . g e t T e x t () ) . t o C o n t a i n (
20 m y T e x t s . i m p o r t K e y s S t a t u s R e a d y
21 ) ;
22 })
23 . t h e n (() = > {
24 m y E l e m . r e q u e s t P a g e S t a r t B t n . c l i c k () ;
25 })
26 . t h e n (() = > {
27 w a i t F o r ( m y E l e m . u i G r o w l M s g , TEXT , m a x W a i t T i m e , m y T e x t s . u i G r o w l M s g D i s t r i b u t i o n S t a r t e d ) ;
28 })
29 . t h e n (() = > {
30 m y E l e m . u i G r o w l C l o s e B t n . c l i c k () ;
31 w a i t F o r ( m y E l e m . u i G r o w l M s g , I N V I S I B L E ) ;
32 })
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 83
https://EKMS/Operaciones A Web Page
id Tipo^ Destino^ Estado^ Acción Documento
1 Exportación Cuenta2 Preparada 2 Importación Cuenta3 Preparada
Figura 6.8:Inicio Operación Exportación
Esperando Conexión del Cifrador
En el test original se para la operación en cada uno de sus estados y se reinicia hasta completarla para probar los escenarios en los que la operación se ve interrumpida a mitad de su ejecución y detectar posibles fallos en la recuperación del sistema. Para simplificar la explicación se ha restado esa parte al test, completando la operación con una sola ejecución.
En este estado se comprueba la espera del sistema a que el dispositivo cifrador se encuentre disponible para recibir las claves y cifrarlas. Para ello en el campoEstadodebe incluirse el texto de espera a conexión.
Listado 6.8:Espera a Conexión
1 })
2 . t h e n (() = > {
3 w a i t F o r (
4 m y E l e m . f i r s t E l e m e n t I n R e q u e s t T a b l e ,
5 TEXT ,
6 m a x W a i t T i m e * 5 ,
7 m y T e x t s . i m p o r t K e y s S t a t u s W a i t i n g F o r C o n n e c t i o n
8 ) ;
9 })
84 6.2. EJEMPLO EJECUCIÓN DE TEST
https://EKMS/Operaciones A Web Page
id Tipo^ Destino^ Estado^ Acción Documento
1 Exportación Cuenta2 Esperando a Conexión
2 Importación Cuenta3 Preparada
Figura 6.9:Esperando a Conexión
Operación en progreso
Actualmente la operación se encuentra en progreso, el disposico cifrador se encuentra aplicando el algoritmo de cifrado a las claves antes de su distribución. Como se trata de un componente externo al EKMS-ESP no se puede comprobar su funcionamiento, el proceso se puede seguir mediante un porcentaje mostrado en la tabla el cual representa la proporción de claves que han sido cifradas en el momento.
Listado 6.9:Operación en Progreso
1 })
2 . t h e n (() = > {
3 w a i t F o r (
4 m y E l e m . f i r s t E l e m e n t I n R e q u e s t T a b l e ,
5 TEXT ,
6 m a x W a i t T i m e * 5 ,
7 m y T e x t s . i m p o r t K e y s S t a t u s I n P r o g r e s s
8 ) ;
9 })
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 85
https://EKMS/Operaciones A Web Page
id Tipo^ Destino^ Estado^ Acción Documento
1 Exportación Cuenta2 En proceso 67%
2 Importación Cuenta3 Preparada
Figura 6.10:Operación en Progreso
Completar operación
Una vez todas las calves han sido cifradas queda por aceptar el envío de las mismas, esto se realiza pulsando el botón de completar operación.
Listado 6.10:Completar operación
1 . t h e n (() = > {
2 w a i t F o r (
3 m y E l e m . f i r s t E l e m e n t I n R e q u e s t T a b l e ,
4 TEXT ,
5 m a x W a i t T i m e * 5 ,
6 m y T e x t s . i m p o r t K e y s S t a t u s O k
7 ) ;
8 })
9 . t h e n (() = > {
10 m y E l e m . r e q u e s t P a g e A c c e p t B t n . c l i c k () ;
11 })
12 . t h e n (() = > {
13 w a i t F o r ( m y E l e m .
m e n u D i a l o g S t a r t E l e c t r o n i c K e y D i s t r i b u t i o n , V I S I B L E ) ;
14 })
15 . t h e n (() = > {
16 expect < any >( m y E l e m .
m e n u D i a l o g S t a r t D i s t r i b u t i o n A c c e p t B t n . i s E n a b l e d () ) . t o B e F a l s y () ;
17 m y E l e m . m e n u D i a l o g S t a r t D i s t r i b u t i o n D r o p d o w n D o c u m e n t T y p e . c l i c k () ;
18 w a i t F o r ( m y E l e m . m e n u D i a l o g S t a r t D i s t r i b u t i o n D r o p d o w n I t e m , C L I C K A B L E ) ;
19 })
20 . t h e n (() = > {
21 m y E l e m . m e n u D i a l o g S t a r t D i s t r i b u t i o n D r o p d o w n I t e m . c l i c k () ;
22 w a i t F o r ( m y E l e m . m e n u D i a l o g S t a r t D i s t r i b u t i o n A c c e p t B t n , C L I C K A B L E ) ;
23 })
86 6.2. EJEMPLO EJECUCIÓN DE TEST
https://EKMS/Operaciones A Web Page
id Tipo^ Destino^ Estado^ Acción Documento
1 Exportación Cuenta2 Completada
2 Importación Cuenta3 Preparada
Figura 6.11:Completar operación
Visualización de Movimiento
Al completar cualquier operación se genera un movimiento asociado al elemento que haya sido tratado en la operación, es decir, si una clave ha sido importada se generará un movimiento asociado a dicha clave. Este movimiento contiene todos los datos de la operación. Para visualizar dichos datos hay que ir a la ventana donde se listan todas las claves, identificar aquella que ha sido exportada y localizar el movimiento correspondiente.
Listado 6.11:Visualización de Movimiento
1
2 . t h e n (() = > {
3 b r o w s e r . w a i t (
4 b r o w s e r . get ( b a s e U r l + ’ /#/ k e y s ’) ,
5 m a x W a i t T i m e ,
6 ’ W a i t i n g ␣ for ␣ the ␣ D i s t r i b u t e K e y s ␣ p a g e ␣ to ␣ l o a d . ’
7 )
8 w a i t F o r ( m y E l e m . p a r t i a l s K e y D a t a T a b l e , V I S I B L E ) ;
9 })
10 / / check the generated movements
11 . t h e n (() = > {
12 m y E l e m . m o v e m e n t s I n R e g i s t r y M o v e m e n t s D a t a T a b l e . c o u n t () . t h e n ( f u n c t i o n c o u n t ( m o v s ) {
13 m y E l e m . m o v e m e n t s I n R e g i s t r y M o v e m e n t s D a t a T a b l e . get ( m o v s - 1) . r i g h t C l i c k () ;
14 }) ;
15 w a i t F o r ( m y E l e m .
r e g i s t r y M o v e m e n t s D a t a T a b l e C o n t e x t u a l M e n u , V I S I B L E ) ;
16 })
17 . t h e n (() = > {
18 m y E l e m .
r e g i s t r y M o v e m e n t s D a t a T a b l e C o n t e x t u a l M e n u M o v e m e n t B t n . c l i c k () ;
19 w a i t F o r ( m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s , V I S I B L E ) ;
20 })
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 87
https://EKMS/Claves A Web Page
Clave1 Clave2 Clave3
id Contenido
1 AADSGADG-13455454
2 ÑKALDFNL-44616479
3 PADFADGA-54924554
Movimientos Movimiento 1 Movimiento 2
Figura 6.12:Visualización de Movimiento
Comprobación de Movimiento
Los campos que se comprueban en este ejemplo son los deObjeto, el cual indica que tipo de elemento a sido objeto de la operación, el campoFechacon la fecha en la que se ha realizado la operación, el campoDocque indica el tipo de documento que se ha generado y el campo Destinocuyo contenido debe ser la cuenta destino que se escogió anteriormente.
Si todas las comprobaciones que se han realizado a lo largo del test han sido verificadas con resultado afirmativo el test se dará por pasado correctamente. En el caso de que alguno de los expexts se haya evaluado a falso, en el reporte del test se indicará que ha fallado y cual de los expects es el causante.
88 6.2. EJEMPLO EJECUCIÓN DE TEST
Listado 6.12:Comprobación de Movimiento
1 . t h e n (() = > {
2 m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s D a t a T a b l e . g e t T e x t () . t h e n ( f u n c t i o n r e a d ( txt ) {
3 expect < any >( txt ) . t o C o n t a i n ( d i s t r i b u t e d E l e c t r o n i c K e y ) ;
4 }) ;
5 expect < any >( m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s E l e m e n t T x t . g e t T e x t () ) . t o C o n t a i n (
6 ’ C l a v e s ␣ e l e c t r ó n i c a s ’
7 ) ;
8 expect < any >( m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s D o c u m e n t T x t . g e t T e x t () ) . t o C o n t a i n (
9 ’ R e c i b o ␣ en ␣ m a n o ’
10 ) ;
11 expect < any >(
12 m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s D e s t i n t a t i o n T x t . g e t A t t r i b u t e (’ v a l u e ’)
13 ) . t o C o n t a i n ( d e s t i n a t i o n A c c o u n t s [ 0 ] ) ;
14 expect < any >( m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s D a t e T x t . g e t A t t r i b u t e (’ v a l u e ’) ) . t o E q u a l (
15 m y F u n c t . t o d a y s D a t e ()
16 ) ;
17 })
18 . t h e n (() = > {
19 m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s C l o s e B t n . c l i c k () ;
20 w a i t F o r ( m y E l e m . m e n u D i a l o g M o v e m e n t D e t a i l s , I N V I S I B L E ) ;
21 }) ;
https://EKMS/Claves
A Web Page
Clave1 Clave2 Clave3
id Contenido
1 AADSGADG-13455454
2 ÑKALDFNL-44616479
3 PADFADGA-54924554
Movimientos Movimiento 1 Movimiento 2
Detalles Movimiento
Tipo: Importación
Origen: Principal Destino: Cuenta1
Doc: Factura en mano
Fecha: 12/09/2018
Objeto: Clave Electrónica
id Claves Exportadas 1 AADSGADG-13455454 2 ÑKALDFNL-44616479
Figura 6.13:Comprobación de Movimiento
CAPÍTULO 6. INTEGRACIÓN DEL SISTEMA EN EL PROYECTO EKMS-ESP 89
6.3 RESULTADOS DEL TFG
Como se ha mencionado anteriormente un sistema de automatización de pruebas aporta múltiples mejoras al proyecto en el que se implementa, algunas de ellas no son medibles como el aumento de la calidad del software, obtención de un mayor control sobre el código, disminución de los fallos en la etapa de despliegue del sistema, detección de los fallos en el momento en el que se producen, mayor fiabilidad de los test, etc; pero la principal mejora, que por otro lado es medible se trata del ahorro del tiempo invertido en testear todo el sistema y la cantidad de funcionalidades que se pueden probar en ese tiempo.
Por ello se ha medido el tiempo que tarda cada batería en ejecutar todos sus test y el número de test perteneciente a cada una. Los resultados se pueden observar en la tabla6.1, como se puede comprobar realizando una simple cuenta se tardan 57 minutos y 5 segundos en ejecutar un total de 234 test, la duración de cada uno varía dependiendo de su complejidad. Partiendo de que algunas de estas pruebas no se realizaban de manera manual antes de la implementación de este sistema y que algunas de estas pruebas tardan unos 10 minutos en realizarse manualmente (medida tomada con la propia experiencia a la hora de desarrollar las mismas), la ganancia en tiempo es visible. Con el sistema de automatización ,en su estado actual, se puede asegurar en el mejor de los casos, que al generar una nueva versión del sistema cada hora esta va a ser verificada totalmente antes de generar la siguiente permitiendo reparar los fallos antes de continuar desarrollando.
Además del ahorro del tiempo se debe destacar el ahorro del recursos, ya que una vez el sistema de automatización está desplegado no es necesario la supervisión de ningún miembro del equipo en cuanto a su ejecución, únicamente se debe interactuar con él para introducir nuevos test y para analizar los resultados de las ejecuciones, por lo que los trabajadores necesarios para la etapa del testing se reduce a uno, aquel encargado de mantener el sistema.
Nombre Batería Nº Test Tiempo Ejecución
VersionTest 2 19 sec
LoginTest 6 21 sec
AdminTest 15 1min 58sec
KeysTest1 22 8min 30sec
KeysTest2 22 8min 7sec
ImportTest 13 8min 30sec
DistributionTest 15 7min
UsersTest 27 6 min 53 sec
RolesTest 18 2 min 59 sec
AccountsTest 24 4 min 13 sec
DistributionTest 15 7 min
ScopesTest 11 1 min 57 sec
CouriersTest 21 3 min 5 sec
EquipmentsTest1 19 5 min 30 sec
EquipmentsTest2 19 5 min 49 sec
Tabla 6.1:Resultados de las Pruebas Desarrolladas
90 6.3. RESULTADOS DEL TFG
Con estos test se han conseguido detectar un gran número de errores en el sistema EKMS-ESP.
Una gran cantidad de ellos eran errores visuales a nivel de frontend de aplicación, es decir, que no se mostraban los datos en pantalla de la manera correcta. Por otro lado también se han detectado errores en la comunicación entre la aplicación y la base de datos, concretamente en las consultas que se hacen a la base de datos para recoger la información.
Por ejemplo, un error del último tipo que fue detectado es el siguiente, en el EKMS hay distinción entre claves electrónicas y claves físicas y se tratan de manera diferente; a la hora de exportar esto se ve reflejado en el movimiento que se genera al terminar la operación, indicando en uno de los atributos de este movimiento de que tipo es la clave que se ha exportado. El error se capturó al comprobar este atributo y ver que no correspondía con el esperado, esto se debía a que la consulta a la base de datos devolvía que se trataba de una clave electrónica, cuando en realidad era una clave física. Gracias a esta prueba este fallo se puedo detectar y subsanar.
Otro error capturado por el sistema se daba a la hora de crear un nuevo equipo. En el diálogo de creación de equipos existen campos obligatorios como elnombre de equipoy elnúmero de seriey otros no obligatorios como elnúmero crypto. El error te permitía crear nuevos equipos sin concretar el número de serie. En el sistema se ha desarrollado un test para cada objeto (Equipos, claves, cuentas, usuarios, roles, etc) que comprueba precisamente la función de obligatoriedad de estos campos. En una de las evaluaciones de los equipos se pudo detectar este error y trasladar al equipo para su correción.