QTP - Guía rápida

QTP significa QuickTest Professional, un producto de Hewlett Packard (HP). Esta herramienta ayuda a los evaluadores a realizar pruebas funcionales automatizadas sin problemas, sin supervisión, una vez que se completa el desarrollo del script.

Usos de HP QTP Visual Basic Scripting (VBScript)para automatizar las aplicaciones. No es necesario instalar Scripting Engine exclusivamente, ya que está disponible como parte del sistema operativo Windows. La versión actual de VBScript es 5.8, que está disponible como parte de Win 7. VBScript NO es un lenguaje orientado a objetos, sino un lenguaje basado en objetos.

Herramientas de prueba

Las herramientas de un contexto de prueba de software se pueden definir como un producto que admite una o más actividades de prueba desde la planificación, los requisitos, la creación de una construcción, la ejecución de la prueba, el registro de defectos y el análisis de la prueba.

Clasificación de herramientas

Las herramientas se pueden clasificar según varios parámetros. Incluye -

  • El propósito de la herramienta
  • Las actividades que se apoyan dentro de la herramienta
  • El tipo / nivel de prueba que admite.
  • El tipo de licencia (código abierto, software gratuito, comercial)
  • La tecnología utilizada

Tipos de herramientas

No Señor. Tipo de herramienta Usado para Usado por
1 Herramienta de gestión de pruebas Gestión de pruebas, programación, registro de defectos, seguimiento y análisis. Probadores
2 Herramienta de gestión de la configuración Para implementación, ejecución, seguimiento de cambios Todos los miembros del equipo
3 Herramientas de análisis estático Pruebas estáticas Desarrolladores
4 Herramientas de preparación de datos de prueba Análisis y diseño, generación de datos de prueba Probadores
5 Herramientas de ejecución de pruebas Implementación, Ejecución Probadores
6 Comparadores de prueba Comparación de resultados esperados y reales Todos los miembros del equipo
7 Herramientas de medición de cobertura Proporciona cobertura estructural Desarrolladores
8 Herramientas de prueba de rendimiento Seguimiento del rendimiento, tiempo de respuesta Probadores
9 Herramientas de seguimiento y planificación de proyectos Para la planificación Gerentes de proyectos
10 Herramientas de gestión de incidentes Para gestionar las pruebas Probadores

¿Dónde encaja QTP?

QTP es una herramienta de prueba funcional, que se adapta mejor a las pruebas de regresión de las aplicaciones. QTP es una herramienta comercial / con licencia propiedad de HP, que es una de las herramientas más populares disponibles en el mercado. Compara el resultado real y el esperado e informa los resultados en el resumen de ejecución.

QTP - Historia y evolución

HP Quick Test Professional fue originalmente propiedad de Mercury Interactive y fue adquirida por HP. Su nombre original era Astra Quick Test y luego fue nombrado Quick Test Professional, pero la última versión se conoce como Unified Functional Tester (UFT).

Historial de versiones

Ahora echemos un vistazo al historial de versiones de QTP.

Versiones Cronologías
Prueba rápida de Astra v1.0 a v5.5 - Mercury Interactive Mayo de 1998 a agosto de 2001
QuickTest Professional v6.5 a v9.0 - Mercury Interactive Septiembre de 2003 a abril de 2006
Hp-QuickTest Professional v9.1 a v11.0: adquirido y lanzado por HP Febrero de 2007 a septiembre de 2010
Pruebas funcionales unificadas de HP v11.5 a v11.53 2012 hasta noviembre de 2013

Ventajas

  • El desarrollo de pruebas automatizadas utilizando VBScript no requiere un codificador altamente calificado y es relativamente fácil en comparación con otros lenguajes de programación orientados a objetos.

  • Fácil de usar, fácil de navegar, validación de resultados y generación de informes.

  • Fácilmente integrado con la herramienta de gestión de pruebas (Hp-Quality Center) que permite una programación y un seguimiento sencillos.

  • También se puede utilizar para pruebas de aplicaciones móviles.

  • Dado que es un producto de HP, HP y sus foros brindan soporte completo para abordar problemas técnicos.

Desventajas

  • A diferencia de Selenium, QTP solo funciona en el sistema operativo Windows.

  • No todas las versiones de los navegadores son compatibles y los evaluadores deben esperar a que se publique el parche para cada una de las versiones principales.

  • Habiendo dicho que es una herramienta comercial, el costo de la licencia es muy alto.

  • Aunque el tiempo de creación de scripts es menor, el tiempo de ejecución es relativamente mayor, ya que carga la CPU y la RAM.

Para cualquier implementación de herramienta automatizada, las siguientes son las fases / etapas de la misma. Cada una de las etapas corresponde a una actividad particular y cada fase tiene un resultado definido.

  • Test Automation Feasibility Analysis- El primer paso es comprobar si la aplicación se puede automatizar o no. No todas las aplicaciones se pueden automatizar debido a sus limitaciones.

  • Appropriate Tool Selection- El siguiente paso más importante es la selección de herramientas. Depende de la tecnología en la que se construya la aplicación, sus características y uso.

  • Evaluate the suitable framework- Al seleccionar la herramienta, la siguiente actividad es seleccionar un marco adecuado. Hay varios tipos de marcos y cada marco tiene su propio significado. Nos ocuparemos de los frameworks en detalle más adelante en este tutorial.

  • Build Proof of Concept- Proof of Concept (POC) se desarrolla con un escenario de extremo a extremo para evaluar si la herramienta puede soportar la automatización de la aplicación. Se realiza con un escenario de extremo a extremo, lo que asegura que las principales funcionalidades puedan automatizarse.

  • Develop Automation Framework- Después de construir el POC, se lleva a cabo el desarrollo del marco, que es un paso crucial para el éxito de cualquier proyecto de automatización de pruebas. El marco debe construirse después de un análisis diligente de la tecnología utilizada por la aplicación y también sus características clave.

  • Develop Test Script, Execute, and Analyze- Una vez que se completa el desarrollo del script, se ejecutan los scripts, se analizan los resultados y se registran los defectos, si los hubiera. Los scripts de prueba suelen estar controlados por versiones.

QTP es una herramienta comercial y la versión de prueba se puede descargar directamente del sitio de HP. Solo la versión actual, que es la prueba funcional unificada (11.5x), está disponible para descargar. A continuación se muestra la URL desde donde se puede descargar la versión de prueba.

La URL de descarga: QTP

Procedimiento de instalación

Step 1 - Haga clic en el enlace "Pruebas y demostraciones" y seleccione "Evaluación funcional unificada de HP 11.50 CC English SW E-Media Evaluation" como se muestra a continuación -

Step 2- Después de seleccionar "HP Unified Functional Testing 11.50", se abre el asistente de descarga. Complete los datos personales y haga clic en Siguiente.

Step 3 - Lea los 'Términos de uso' y haga clic en "SIGUIENTE".

Step 4- Se abre la ventana Descargar. Ahora, haga clic en el botón "Descargar".

Step 5- El archivo descargado tendrá el formato .RAR. Ahora necesita descomprimir el archivo y el contenido de la carpeta sería como se muestra a continuación y ejecute Setup.exe.

Step 6 - Al ejecutar el archivo de configuración, para instalar, seleccione "Configuración de prueba funcional unificada" de la lista como se muestra a continuación -

Step 7 - Luego haga clic en Siguiente para continuar.

Step 8- En la ventana de configuración personalizada, seleccione los complementos que se requieren para su automatización, es decir, debe seleccionar los complementos según la tecnología de su aplicación bajo prueba. Por ejemplo, si su aplicación está basada en .NET, debe asegurarse de seleccionar .NET.

Step 9- Después de seleccionar los complementos necesarios para la instalación, haga clic en Siguiente. Después de completar la instalación, terminará con una ventana de botón Finalizar.

Step 10- Una vez que complete la instalación, se abrirá el cuadro de diálogo "Requisitos de instalación adicionales". Seleccione todo en la lista que no sea "Ejecutar asistente de instalación de licencia" y haga clic en "EJECUTAR". NO es necesario que seleccione "Ejecutar asistente de instalación de licencia" porque estamos instalando la versión de prueba, que, de forma predeterminada, otorga una licencia por 30 días.

Step 11- Después de completar los Requisitos de instalación adicionales, se muestra una marca de verificación, que a su vez indica que los componentes se instalaron correctamente. Ahora, haga clic en Cerrar.

Inicio de la página de complementos y UFT

Step 1 - Después de la instalación, la aplicación se puede iniciar desde el menú Inicio como se muestra en la figura.

Step 2- Aparece la página de licencia. Puede hacer clic en Continuar ya que hemos instalado la licencia de prueba.

Step 3 - Se abre el cuadro de diálogo Complementos para que el usuario seleccione los complementos necesarios.

Note - No cargue todos los complementos, solo los necesarios y haga clic en Aceptar.

Step 4 - Después de cargar los complementos necesarios, la herramienta UFT 11.5 se abre para el usuario y el primer vistazo de UFT se ve, como se muestra a continuación -

La grabación de una prueba corresponde a la grabación de las acciones del usuario de la aplicación bajo prueba para que UFT genere automáticamente los scripts que se pueden reproducir. Record and Playback puede darnos la primera impresión de la herramienta, ya sea que sea compatible con la tecnología o no, si la configuración inicial se realiza correctamente.

Los pasos para grabar y reproducir son los siguientes:

Step 1 - Haga clic en "Nueva" prueba en la página de inicio como se muestra a continuación -

Step 2- Al hacer clic en el enlace "Nuevo", se abre una nueva ventana de prueba y el usuario debe seleccionar el tipo de prueba. Seleccione "Prueba de GUI", dé un nombre para la prueba y la ubicación donde debe guardarse.

Step 3- Una vez que se crea una prueba nueva, se abre la pantalla de prueba nueva como se muestra a continuación. Ahora, haga clic en la pestaña "Acción1", que se crea con 1 acción de forma predeterminada.

Step 4 - Haga clic en el menú "Grabar" y seleccione "Configuración de grabación y ejecución" como se muestra a continuación -

Step 5- Se abre el cuadro de diálogo Configuración de grabación y ejecución y, según el tipo de aplicación, se puede seleccionar Aplicaciones web, Java o Windows. Por ejemplo, aquí, registraremos una aplicación basada en web (http://easycalculation.com/).

Step 6- Haga clic en Grabar. Internet Explorer se abre automáticamente con la dirección webhttps://www.easycalculation.com/según la configuración. Haga clic en el enlace "Números" debajo de "Álgebra", introduzca un número y presione "Calcular". Después de completar la acción, haga clic en el botón "Detener" en el panel de registro. Notará que el script se genera como se muestra a continuación:

Step 7- Ahora reproduzca el script haciendo clic en el botón de reproducción. El script se repite y se muestra el resultado.

Step 8 - La ventana de resultados se abre, por defecto, que muestra exactamente la marca de tiempo de ejecución, pasos aprobados y fallidos.

Importancia del registro y la reproducción

  • Se utiliza como método de investigación preliminar para verificar si UFT puede admitir la tecnología / aplicación.

  • Se utiliza para crear una prueba de una funcionalidad básica de una aplicación o característica que no requiere mantenimiento a largo plazo.

  • Se puede utilizar para grabar tanto los movimientos del mouse como las entradas del teclado.

Modos de grabación

  • Normal Recording - Este es el modo de grabación predeterminado que registra los objetos y las operaciones realizadas en la aplicación bajo prueba.

  • Analog Recording - Esto registra no solo las acciones del teclado, sino también los movimientos del mouse en relación con la pantalla o la ventana de la aplicación.

  • Low-Level Recording- Esto registra las coordenadas exactas de los objetos independientemente de si UFT reconoce el objeto o NO. Solo registra las coordenadas, por lo que NO registra los movimientos del mouse.

  • Insight Recording - UFT registra las operaciones, según su apariencia y no según sus propiedades nativas.

Cómo elegir los modos de grabación

Después de hacer clic en el botón Grabación, el usuario puede elegir el modo de grabación del panel de grabación que aparece en la pantalla, una vez que comienza la grabación. La selección se puede realizar entre cualquiera de los que se han comentado anteriormente.

Verá que el siguiente escenario está registrado en todos los modos y la misma acción se ha registrado en diversas circunstancias.

  • Lanzar IE - https://www.easycalculation.com/
  • Haz clic en "Números" debajo de "Álgebra".
  • Haga clic en el enlace "Raíz cuadrada"
  • Ingrese un valor para calcular la raíz cuadrada. Digamos 10
  • Presione Calcular

El guión grabado en el modo de grabación predeterminado, analógico y de bajo nivel se muestra a continuación:

' DEFAULT RECORDING MODE 
Browser("Free Online Math Calculator").Page("Free Online Math 
Calculator").Link("Numbers").Click 

Browser("Free Online Math Calculator").Page("Numbers Calculator - 
Math").Link("Square Root").Click 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebEdit("n").Set "10" 

Browser("Free Online Math Calculator").Page("Square Root 
Calculator").WebButton("calculate").Click 

' ANALOG RECORDING MODE 
Desktop.RunAnalog "Track1" 

' LOW LEVEL RECORDING MODE 
Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
235,395 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
509,391 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
780,631 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type 
"10" 

Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Click 
757,666

Las grabaciones que utilizan el modo de grabación de información serán las que se muestran a continuación:

Repositorio de objetos

Object Repository es una colección de objetos y propiedades con las que QTP podrá reconocer los objetos y actuar sobre ellos. Cuando un usuario registra una prueba, los objetos y sus propiedades se capturan de forma predeterminada. Sin comprender los objetos y sus propiedades, QTP NO podrá reproducir los scripts.

Haga clic en cada uno de los siguientes temas para saber más sobre el repositorio de objetos y sus características asociadas.

No Señor. Tema Descripción
1 Object Spy y sus características

Comprender el uso de objetos espía y sus funcionalidades asociadas.

2 Trabajar con repositorio de objetos

Agregar, editar, eliminar objetos de un repositorio de objetos y sus funcionalidades asociadas.

3 Tipos de repositorio de objetos

Se ocupa de objetos compartidos y repositorios de objetos locales y su contexto con respecto a la creación de scripts.

4 Objetos definidos por el usuario

Se ocupa de las circunstancias para utilizar los objetos definidos por el usuario.

5 Repositorio de objetos en XML

Se ocupa de convertir OR a XML y utilizar el repositorio de objetos como XML.

6 Comparar y fusionar OR

Operaciones como Comparar OR ', Fusionar OR para trabajar eficazmente con Object Repository.

7 Identificadores ordinales

Circunstancias en las que se utilizan los identificadores ordinales y sus ventajas.

8 Objetos secundarios

Usar objetos secundarios para una secuencia de comandos eficaz

Actions ayuda a los evaluadores a dividir los scripts en grupos de declaraciones QTP. Las acciones son similares a las funciones en VBScript; Sin embargo, hay algunas diferencias. De forma predeterminada, QTP crea una prueba con una acción.

Comportamiento Funciones
La acción es una característica incorporada de QTP. Las funciones de VBScript son compatibles con VBScript y QTP.
Los parámetros de acciones se pasan solo por valor. Los parámetros de función se pasan por valor o por ref.
Las acciones tienen extensión .mts Las funciones se guardan como .vbs o .qfl
Las acciones pueden ser reutilizables o no. Las funciones siempre son reutilizables.

Se puede acceder a las propiedades de la acción haciendo clic con el botón derecho en la ventana del editor de scripts y seleccionando "Propiedades".

Las propiedades de acción contienen la siguiente información:

  • Nombre de la acción
  • Location
  • Bandera reutilizable
  • Parámetros de entrada
  • Parámetros de salida

Tipos de acciones

Hay tres tipos de acciones:

  • Non-reusable action - Una acción que se puede llamar solo en esa prueba específica en la que se ha diseñado y que solo se puede llamar una vez.

  • Reusable action - Una acción que se puede llamar varias veces, cualquier prueba en la que resida, y también puede ser utilizada por cualquier otra prueba.

  • External Reusable action- Es una acción reutilizable almacenada en otra prueba. Las acciones externas son de solo lectura en la prueba de llamada, pero se pueden usar localmente con la copia editable de la información de la tabla de datos para la acción externa.

Trabajar con acciones

Hay tres opciones para insertar una acción. Haga clic en cada uno de ellos para saber más sobre el tipo de acción seleccionado.

No Señor. Tipo de acción y descripción
1 Insertar llamada a una nueva acción

Inserta una nueva acción de la acción existente

2 Insertar llamada a la copia de la acción

Inserta una copia de una acción existente

3 Insertar llamada a la acción existente

Inserta una llamada a la acción reutilizable existente

Una DataTable, similar a Microsoft Excel, ayuda a los evaluadores a crear casos de prueba basados ​​en datos que se pueden usar para ejecutar una acción varias veces. Hay dos tipos de tablas de datos:

  • Local DataTable - Cada acción tiene su propia tabla de datos privada, también conocida como tabla de datos local, a la que también se puede acceder a través de las acciones.

  • Global DataTable - Cada prueba tiene una hoja de datos global a la que se puede acceder en todas las acciones.

Se puede acceder a la hoja de datos desde la pestaña "Datos" de QTP como se muestra a continuación:

Para ejecutar un caso de prueba para un número específico de iteraciones, se pueden establecer las iteraciones de la tabla de datos global en el cuadro de diálogo Configuración de prueba, al que se puede acceder usando Archivo → Configuración → Ejecutar (pestaña) como se muestra a continuación:

Ejemplo

Por ejemplo, si un usuario desea parametrizar el "interés compuesto" de http://easycalculation.com/ que se puede acceder usando http://easycalculation.com/compound-interest.php. Los parámetros se pueden crear como se muestra a continuación. La mayoría de las funcionalidades de Excel también se pueden utilizar en la tabla de datos.

Operaciones de DataTable

Hay tres tipos de objetos para acceder a DataTable. Las operaciones de DataTable se pueden entender bien recorriendo lo siguiente:

No Señor. Tipo de objeto y descripción
1 Métodos de tabla de datos

Proporciona información detallada sobre los métodos de la tabla de datos.

2 Métodos de objeto DTParameter

Proporciona información detallada sobre los métodos DTParameter.

3 Métodos de objeto DTSheet

Proporciona información detallada sobre los métodos de DTSheet.

Los puntos de control, como su nombre lo dice todo, se refieren a un punto de validación que compara el valor actual de las propiedades especificadas o el estado actual de un objeto con el valor esperado, que se puede insertar en cualquier momento en el script.

Tipos de puestos de control

No Señor. Tipo y descripción
1

Standard Checkpoint

Verifica los valores de propiedad de un objeto en la aplicación bajo prueba y compatible con todos los entornos de complementos.

2

Bitmap Checkpoint

Verifica un área de su aplicación como mapa de bits

3

File Content Checkpoint

Verifica el texto en un archivo generado o al que se accede dinámicamente, como .txt, .pdf

4

Table Checkpoint

Verifica la información dentro de una tabla. No todos los entornos son compatibles.

5

Text Checkpoint

Verifique si el texto que se muestra dentro de un área definida en una aplicación basada en Windows, de acuerdo con los criterios especificados.

6

Text Area Checkpoint

Verifica si la cadena de texto se muestra dentro de un área definida en una aplicación basada en Windows, de acuerdo con los criterios especificados.

7

Accessibility Checkpoint

Verifica la página e informa las áreas del sitio web que pueden no cumplir con las Pautas de accesibilidad al contenido web del World Wide Web Consortium (W3C)

8

Page Checkpoint

Verifica las características de una página web. También puede buscar enlaces rotos.

9

Database Checkpoint

Verifica el contenido de una base de datos a la que accede la aplicación bajo prueba.

10

XML Checkpoint

Verifica el contenido de los documentos .xml o .xml en páginas web y marcos.

Insertar CheckPoint

Cuando el usuario desea insertar un punto de control, debe asegurarse de que la mayoría de los puntos de control sean compatibles solo durante las sesiones de grabación. Una vez que el usuario deja de grabar, los puntos de control no están habilitados.

A continuación se muestra el menú de puntos de control, cuando el usuario NO está en el modo de grabación.

A continuación se muestra el menú de puntos de control, cuando el usuario está en el modo de grabación.

Ejemplo

Los puntos de control se agregan para la aplicación bajo prueba - "http://easycalculation.com/"

' 1. Inserted Standard Checkpoint
Status = Browser("Math Calculator").Page("Math 
   Calculator").Link("Numbers").Check CheckPoint("Numbers")

If Status Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

' 2. Inserted BitMap Checkpoint
imgchkpoint = Browser("Math Calculator").Page("Math 
   Calculator").Image("French").Check CheckPoint("French")

If imgchkpoint Then
   print "Checkpoint Passed"
Else
   Print "Checkpoint Failed"
End if

Ver las propiedades del punto de control

Después de la inserción, en caso de que un evaluador desee cambiar los valores, podemos hacerlo haciendo clic derecho en la palabra clave 'punto de control' del script y navegando a "Propiedades del punto de control" como se muestra a continuación:

También puede ubicar los mismos puntos de control en el repositorio de objetos, como se muestra a continuación. Muestra exactamente qué tipo de punto de control se utiliza y cuáles son los valores esperados y los valores de tiempo de espera.

El punto de sincronización es la interfaz de tiempo entre la herramienta y la aplicación bajo prueba. El punto de sincronización es una función para especificar el tiempo de retraso entre dos pasos del script de prueba.

Por ejemplo, hacer clic en un enlace puede cargar la página en 1 segundo, a veces 5 segundos o incluso puede tardar 10 segundos en cargarla por completo. Depende de varios factores, como el tiempo de respuesta del servidor de aplicaciones, el ancho de banda de la red y las capacidades del sistema cliente.

Si el tiempo varía, el script fallará, a menos que el evaluador maneje estas diferencias de tiempo de manera inteligente.

Formas de insertar un punto de sincronización

  • WaitProperty
  • Exist
  • Wait
  • Sincronización (solo para aplicaciones basadas en web)
  • Insertar puntos de sincronización incorporados QTP.

Digamos que necesitamos insertar un punto de sincronización entre hacer clic en el enlace "números" y hacer clic en la calculadora de "interés simple" en " www.easycalculation.com ". Ahora echaremos un vistazo a las cinco formas de insertar un punto de sincronización para el escenario anterior.

Método 1 - WaitProperty

WaitProperty es un método que toma el nombre de la propiedad, el valor y el valor de tiempo de espera como entrada para realizar la sincronización. Es una espera dinámica y, por lo tanto, se recomienda esta opción.

' Method 1 - WaitProperty with 25 seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

obj.Link("Simple Interest").WaitProperty "text", "Simple Interest",25000
obj.Link("Simple Interest").Click

Método 2 - Existir

Exist es un método que toma el valor de Timeout como entrada para realizar la sincronización. Nuevamente, es una espera dinámica y, por lo tanto, se recomienda esta opción.

' Method 2 : Exist Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

If obj.Link("Simple Interest").Exist(30) Then
   obj.Link("Simple Interest").Click

Else
   Print "Link NOT Available"
End IF

Método 3 - Espera

Wait es un punto de sincronización codificado, que espera independientemente del evento ocurrido o NO. Por lo tanto, se desaconseja el uso de Wait y se puede utilizar para tiempos de espera más cortos, como 1 o 2 segundos.

' Method 3 : Wait Timeout - 30 Seconds
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click
wait(30)
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Método 4 - Método de sincronización

El método de sincronización se puede utilizar solo para aplicaciones web en las que siempre hay un retraso entre las cargas de la página.

' Method 4 : 
Dim obj
Set obj = Browser("Math Calculator").Page("Math Calculator")
obj.Link("Numbers").Click

Browser("Math Calculator").Sync
Browser("Math Calculator").Page("Math Calculator").Link("Simple Interest").Click

Método 5 - Insertar puntos de sincronización incorporados QTP

Step 1- Entrar en modo de grabación. Esta opción estaría deshabilitada si el usuario NO está en modo de grabación.

Step 2 - Vaya a "Diseño" → "Punto de sincronización".

Step 3- Necesitamos seleccionar el objeto, que queremos que sea el punto de sincronización. Después de seleccionar el objeto, la ventana del objeto se abre como se muestra a continuación:

Step 4- Haga clic en Aceptar; se abre la "Ventana Agregar sincronización". Seleccione el valor de propiedad, valor y tiempo de espera y haga clic en Aceptar como se muestra a continuación:

Step 5 - El script se generaría como se muestra a continuación, que es el mismo que el de WaitProperty (Método 1) que ya habíamos discutido -

Browser("Math Calculator").Page("Math Calculator").Link("Numbers").Click

Browser("Math Calculator").Page("Math Calculator").Link("Simple 
   Interest").WaitProperty "text", "Simple Interest", 10000

Sincronización predeterminada

Cuando el usuario no ha utilizado ninguno de los métodos de sincronización anteriores, QTP tiene un tiempo de espera de sincronización de objetos incorporado que puede ser ajustado por el usuario.

Vaya a "Archivo" >> "Configuración" >> Pestaña Ejecutar >> Tiempo de espera de sincronización de objetos como se muestra a continuación.

A veces, QTP no puede encontrar ningún objeto que coincida con la descripción del objeto reconocido o puede encontrar más de un objeto que se ajuste a la descripción, luego QTP ignora la descripción reconocida y utiliza el mecanismo de identificación inteligente para reconocer el objeto.

La identificación inteligente de QTP utiliza dos tipos de propiedades:

  • Base Filter Properties - Las propiedades básicas de una clase de objeto de prueba en particular cuyos valores no se pueden cambiar sin cambiar la esencia del objeto original.

  • Optional Filter Properties - Otras propiedades también ayudan a identificar los objetos de una clase en particular cuyas propiedades es poco probable que cambien con frecuencia, pero pueden ignorarse si ya no son aplicables.

Habilitación de la identificación inteligente de un objeto

Step 1- Vaya a "Herramientas" → "Identificación de objeto". Se abre el cuadro de diálogo Identificación de objeto.

Step 2 - Elija el entorno, la clase de objeto y active "Habilitar identificación inteligente" como se muestra a continuación -

Step 3 - Haga clic en Configurar y elija la base y las propiedades de filtro opcionales.

Step 4- Agregue propiedades en Propiedades base además de la predeterminada y también agregue / elimine Propiedades de filtro opcionales. Tenga en cuenta que las mismas propiedades no pueden formar parte de las propiedades obligatorias y de asistencia y haga clic en "Aceptar".

Step 5- Verifique si la identificación inteligente está habilitada después de agregar un objeto de ese tipo en el repositorio de objetos. La identificación inteligente se establece en VERDADERO. También podemos convertirlo en Falso en caso de que no queramos habilitar la Identificación inteligente.

Step 6 - Incluso podemos deshabilitar un nivel de prueba aplicando a nivel de script de prueba en "Configuración" del menú "Archivo" como se muestra a continuación -

Step 7 - Si la identificación inteligente está desactivada según el paso 6, no aplicará la identificación inteligente para ningún objeto durante la ejecución del script.

Step 8 - En caso de que los objetos se agreguen con Smart Identification como Off, QTP no usará Smart Identification para reconocer en el futuro, aunque lo hayamos habilitado más adelante.

La depuración, en el contexto de las pruebas de automatización, es un proceso sistemático de detectar y solucionar los problemas de codificación en el script de automatización para que el script sea más sólido y pueda detectar los defectos en la aplicación.

Hay varias formas de realizar la depuración utilizando puntos de interrupción en QTP. Los puntos de ruptura se pueden insertar simplemente presionando "F9" o usando la opción de menú "Ejecutar" → "Insertar / quitar punto de ruptura".

Después de insertar el punto de ruptura, el punto "de color rojo" y la línea se resaltarán en ROJO como se muestra a continuación:

Método Atajo Descripción
Entrar en F11 Se utiliza para ejecutar todos y cada uno de los pasos. Ingresa a la función / acción y ejecuta línea por línea. Se detiene en cada línea después de la ejecución.
Paso sobre F10 Se utiliza para pasar por encima de la función. Step Over ejecuta solo el paso actual en el documento activo.
Salir Mayús + F11 Después de Paso a la función, puede usar el comando Paso a paso. Step Out continúa la ejecución hasta el final de la función y luego pausa la sesión de ejecución en la siguiente línea.

Opciones en Break Point

Se puede acceder a varias opciones en Break Point navegando por el menú 'Ejecutar'.

No Señor. Abreviatura y descripción
1

F9

Insertar / quitar punto de interrupción

2

Ctrl+F9

Activar / desactivar BreakPoint

3

Ctrl+Shift+F9

Borrar todos los puntos de interrupción

4

Use Only Menu

Habilitar / deshabilitar todos los BreakPoints

Panel de depuración

Los siguientes son los paneles de la ventana de depuración:

  • Output - Esta pestaña muestra toda la salida de las declaraciones impresas.

  • Watch - Esta pestaña muestra la salida booleana de la expresión dada.

  • LocalVariables - Esta pestaña muestra la salida de las variables locales.

Ejemplo

El panel de observación muestra la expresión de salida como se muestra a continuación:

El panel de Variables locales muestra los valores de las variables locales como se muestra a continuación:

Hay varias formas de manejar errores en QTP. Hay tres tipos posibles de errores que se pueden encontrar al trabajar con QTP. Ellos son -

  • Errores de sintaxis
  • Errores lógicos
  • Errores de tiempo de ejecución

Tipos de error

Errores de sintaxis

Los errores de sintaxis son los errores tipográficos o una parte del código que no se confirma con la gramática del lenguaje VBscripting. Los errores de sintaxis ocurren en el momento de la compilación del código y no se pueden ejecutar hasta que se corrijan.

Para verificar la sintaxis, use el atajo de teclado Ctrl + F7 y el resultado se muestra como se muestra a continuación. Si no se muestra la ventana, se puede navegar hasta "Ver" → "Errores".

Errores lógicos

Si la secuencia de comandos es sintácticamente correcta pero produce resultados inesperados, entonces se conoce como un error lógico. El error lógico generalmente no interrumpe la ejecución pero produce resultados incorrectos. Los errores lógicos pueden ocurrir debido a una variedad de razones, a saber, suposiciones erróneas o malentendidos del requisito y, a veces, lógicas de programa incorrectas (usando hacer mientras en lugar de hacer hasta) o bucles infinitos.

Una de las formas de detectar un error lógico es realizar revisiones por pares y también verificar el archivo de salida / archivo de resultados QTP para asegurarse de que la herramienta haya funcionado de la manera que se suponía que debía hacerlo.

Errores de tiempo de ejecución

Como indica el nombre, este tipo de error ocurre durante el tiempo de ejecución. La razón de este tipo de errores es que el script que intenta realizar algo no puede hacerlo y el script generalmente se detiene, ya que no puede continuar con la ejecución. Los ejemplos clásicos de errores de tiempo de ejecución son:

  • Archivo NO encontrado, pero la secuencia de comandos intenta leer el archivo.
  • Objeto NO encontrado pero el script está intentando actuar sobre ese objeto en particular
  • Dividir un número por cero
  • Índice de matriz fuera de límites al acceder a elementos de matriz

Manejo de errores en tiempo de ejecución

Hay varias formas de manejar errores en el código.

1. Using Test Settings- El manejo de errores se puede definir en la Configuración de prueba navegando a la pestaña "Archivo" >> "Configuración" >> "Ejecutar" como se muestra a continuación. Podemos seleccionar cualquiera de las configuraciones especificadas y hacer clic en "Aceptar".

2. Using On Error Statement - La declaración 'On Error' se usa para notificar al motor VBScript de las intenciones de un evaluador de manejar los errores en tiempo de ejecución, en lugar de permitir que el motor VBScript muestre mensajes de error que no son fáciles de usar.

  • On Error Resume Next - On Error Resume Next informa al motor VBScript que procese la ejecución de la siguiente línea de código cuando se encuentra un error.

  • On error Goto 0 - Esto ayuda a los probadores a desactivar el manejo de errores.

3. Using Err Object - El objeto de error es un objeto incorporado dentro de VBScript que captura el número de error en tiempo de ejecución y la descripción del error con el que podemos depurar el código fácilmente.

  • Err.Number- La propiedad Number devuelve o establece un valor numérico que especifica un error. Si el valor de Err.Number es 0, no se ha producido ningún error.

  • Err.Description - La propiedad Descripción devuelve o establece una breve descripción sobre un error.

  • Err.Clear - El método Clear restablece el objeto Err y borra todos los valores anteriores asociados con él.

Ejemplo

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function

4. Using Exit Statement- Las sentencias de salida se pueden usar junto con el objeto Err para salir de una prueba, acción o iteración según el valor de Err.Number. Veamos cada una de esas declaraciones de salida en detalle.

  • ExitTest - Sale de toda la prueba QTP, independientemente de la configuración de iteración en tiempo de ejecución.

  • ExitAction - Sale de la acción actual.

  • ExitActionIteration - Sale de la iteración actual de la acción.

  • ExitTestIteration - Sale de la iteración actual de la prueba QTP y pasa a la siguiente iteración.

5. Recovery Scenarios - Al encontrar un error, los escenarios de recuperación se activan en función de ciertas condiciones y se trata en detalle en un capítulo separado.

6. Reporter Object- Reporter Object nos ayuda a reportar un evento a los resultados de la ejecución. Nos ayuda a identificar si la acción / paso en cuestión es apto / no apto.

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."

Escenarios de recuperación

Mientras ejecutamos los scripts QTP, es posible que obtengamos algunos errores inesperados. Para recuperar las pruebas y seguir ejecutando el resto del script de estos errores inesperados, se utilizan Escenarios de Recuperación. Se puede acceder al Administrador de escenarios de recuperación navegando a "Recursos" → Administrador de escenarios de recuperación como se muestra a continuación:

Pasos para crear un escenario de recuperación

Step 1- Haga clic en el botón "Nuevo" escenario de recuperación; se abre el Asistente para escenarios de recuperación como se muestra a continuación:

Step 2- Elija el evento desencadenante. Corresponde al evento, que puede surgir en cualquiera de los siguientes cuatro eventos:

  • Ventana emergente
  • Estado del objeto
  • Error de ejecución de prueba
  • Bloqueo de la aplicación

Step 3- Se abre la ventana Operaciones de recuperación. La operación de recuperación puede realizar cualquiera de las siguientes operaciones, como se muestra en la siguiente captura de pantalla:

Step 4 - Después de especificar la operación de recuperación adecuada, también debemos especificar la operación de recuperación posterior, como se muestra a continuación -

Step 5 - Después de especificar la operación de recuperación posterior, el escenario de recuperación debe nombrarse y agregarse a la prueba para que pueda activarse.

Step 6 - La creación del escenario de recuperación está completa y debe asignarse a la prueba actual marcando la opción "Agregar escenario a la prueba actual" y haga clic en "Finalizar".

Step 7 - El escenario de recuperación agregado será como se muestra a continuación y haga clic en el botón "Cerrar" para continuar.

Step 8- Después de hacer clic en el botón Cerrar, QTP le pedirá al usuario que guarde el escenario de recuperación creado. Se guardará con la extensión .qrs y el asistente se cerrará.

Verificación

El escenario de recuperación creado debería ser parte de la prueba ahora y se puede verificar navegando a "Archivo" → "Configuración" → pestaña "Recuperación".

Las variables de entorno QTP son tipos especiales de variables a las que pueden acceder todas las acciones, bibliotecas de funciones y escenarios de recuperación. Hay variables de entorno integradas para Windows que están disponibles para todas las aplicaciones que se ejecutan en ese sistema en particular, pero las variables de entorno QTP solo están disponibles para ese script de prueba en particular durante el tiempo de ejecución.

Tipos de variables de entorno

Built-in Environment Variables- proporciona una variedad de parámetros de entorno que pueden proporcionar información como el nombre de la prueba, el nombre de la acción, la ruta de la prueba, el nombre del host local, el nombre del sistema operativo, el tipo y su versión. Se puede acceder a los nombres de las variables de entorno navegando a "Archivo" → "Configuración de prueba" → pestaña "Entorno".

User defined Internal- Las variables definidas por el usuario se pueden guardar seleccionando "Definido por el usuario" en la ventana de la pestaña Entorno. Se hace clic en el botón "+" para ingresar el nombre y el valor del parámetro como se muestra a continuación:

User Defined External- Las variables definidas por el usuario se pueden almacenar en un archivo externo como un archivo .xml y se pueden cargar en la prueba como se muestra en la figura que se muestra a continuación. También se puede cargar dinámicamente durante el tiempo de ejecución como se explica a continuación en uno de los ejemplos.

Variables de entorno: métodos admitidos

1. ExternalFileName Property- Devuelve el nombre del archivo de variable de entorno externo cargado especificado en la pestaña Entorno del cuadro de diálogo Configuración de prueba. Si no se carga ningún archivo de variable de entorno externo, esta propiedad devuelve una cadena vacía.

x = Environment.ExternalFileName 
print x

2. LoadFromFile Method- Carga el archivo de variable de entorno especificado (.xml) dinámicamente durante el tiempo de ejecución. Al utilizar este método, no es necesario agregar las variables de entorno manualmente a la pestaña Entorno.

Environment.LoadFromFile "D:\config.xml"
b = Environment.Value("Browser")
print b

3. Value Property- Recupera el valor de las variables de entorno. También podemos establecer el valor de las variables de entorno internas definidas por el usuario utilizando esta propiedad.

' Get the Value of the InBuilt Environment Variables
a = Environment.Value("OS")
print a
b = Environment.Value("ActionName")
print b
  
'Loaded from External File
Environment.LoadFromFile "D:\config.xml"
c = Environment.Value("Browser")
print c

Para modularizar el script, los archivos de la biblioteca se agregan al Script QTP. Contiene declaración de variables, funciones, clases, etc. Permiten la reutilización que se puede compartir entre scripts de prueba. Se guardan con una extensión .vbs o .qfl

Se puede crear un nuevo archivo de biblioteca navegando a "Archivo" >> "Biblioteca de funciones".

Asociación de bibliotecas de funciones

Method 1- Utilizando la opción "Archivo"> ​​"Configuración"> Recursos> Asociar biblioteca de funciones. Haga clic en el botón "+" para agregar el archivo de biblioteca de funciones y agregarlo usando la ruta real o la ruta relativa como se muestra a continuación:

Method 2 - Usando el método ExecuteFile.

'Syntax : ExecuteFile(Filepath)
ExecuteFile "C:\lib1.vbs" 
ExecuteFile "C:\lib2.vbs"

Method 3 - Usando el método LoadFunctionLibrary.

'Syntax : LoadFunctionLibrary(Filepath)
LoadFunctionLibrary "C:\lib1.vbs" 
LoadFunctionLibrary "C:\lib2.vbs"

Method 4- Modelo de objetos de automatización (AOM): es un mecanismo mediante el cual podemos controlar varias operaciones de QTP fuera de QTP. Usando AOM, podemos lanzar QTP, Abrir la Prueba, Asociar Bibliotecas de Funciones, etc. El siguiente VbScript debe ser guardado con Extensión .vbs y al ejecutar el mismo, QTP será lanzado y la prueba comenzará a ejecutarse. La AOM se analizará en detalle en los capítulos posteriores.

'Launch QTP
Set objQTP = CreateObject("QuickTest.Application")
objQTP.Launch
objQTP.Visible = True
  
'Open the test
objQTP.Open "D:\GUITest2", False, False
Set objLib = objQTP.Test.Settings.Resources.Libraries
  
'Associate Function Library if NOT associated already.
If objLib.Find("C:\lib1.vbs") = -1 Then 
  objLib.Add "C:\lib1.vbs", 1 
End

Resultados de la prueba

La ventana de resultados de la prueba nos brinda información suficiente para mostrar los pasos aprobados, fallidos, etc. La ventana de resultados se abre automáticamente después de la ejecución de la prueba (según la configuración predeterminada). Se muestra la siguiente información:

  • Pasos aprobados
  • Pasos fallidos
  • Parámetros ambientales
  • Estadística gráfica

Operaciones realizadas en Resultados de prueba

Conversión de resultados a HTML

En la ventana Visor de resultados, vaya a "Archivo" → "Exportar a archivo". El cuadro de diálogo Exportar resultados de ejecución se abre como se muestra a continuación:

Podemos elegir qué tipo de informe se exportará. Pueden ser resultados cortos, resultados detallados o incluso, podemos seleccionar nodos. Después de seleccionar el nombre del archivo y exportarlo, el archivo se guarda como archivo .HTML

Filtrar los resultados

Los resultados se pueden filtrar según el estado, el tipo de nodo y las iteraciones. Se puede acceder mediante el botón Filtro en la "Ventana de resultados de la prueba".

Aumento de defectos

Los defectos se pueden registrar en QC directamente desde el panel de la ventana de resultados de la prueba accediendo a "Herramientas" → "Agregar defecto" que abre la conexión a ALM como se muestra a continuación:

Resultados de la prueba

La ventana de resultados de prueba automática se puede configurar en "Herramientas" → "Opciones" → pestaña "Ejecutar sesiones". Podemos desactivarlo, si es necesario, y también podemos activar "Exportar resultados automáticamente cuando finaliza la sesión".

La captura de pantalla o la película se pueden grabar según la configuración. Lo mismo se puede configurar en "Herramientas" → "Opciones" → pestaña "Captura de pantalla". Podemos guardar la captura de pantalla o las películas en función de las siguientes tres condiciones:

  • Por errores
  • Always
  • Para errores y advertencias

Hay varios objetos GUI con los que interactúa QTP durante la ejecución del script. Por lo tanto, es importante conocer los métodos básicos para los objetos GUI clave con los que podremos trabajar con eficacia.

Trabajar con cuadro de texto

A continuación se muestran los métodos mediante los cuales accedemos al cuadro de texto durante el tiempo de ejecución:

  • Set - Ayuda al evaluador a establecer valores en el cuadro de texto

  • Click - Clics en el cuadro de texto

  • SetSecure - Se utiliza para configurar el texto en los cuadros de contraseña de forma segura

  • WaitProperty - Espera hasta que el valor de la propiedad se haga realidad

  • Exist - Verifica la existencia del cuadro de texto

  • GetROProperty("text") - Obtiene el valor del cuadro de texto

  • GetROProperty("Visible") - Devuelve un valor booleano si está visible

Ejemplo

Browser("Math Calculator").Sync
Set Obj = Browser("Math Calculator").Page("SQR Calc").WebEdit("n")

'Clicks on the Text Box
Obj.Click

'Verify if the Object Exist - Returns Boolean value
a = obj.Exist
print a

'Set the value
obj.Set "10000" : wait(2)

'Get the Runtime Object Property - Value of the Text Box
val = obj.GetROProperty("value")
print val

'Get the Run Time Object Property - Visiblility - Returns Boolean Value
x = Obj.GetROProperty("visible")
print x

Trabajar con casilla de verificación

A continuación, se muestran algunos de los métodos clave con los que se puede trabajar con Check Box:

  • Set - Ayuda al probador a establecer el valor de la casilla de verificación en "ON" u "OFF"

  • Click- Hace clic en la casilla de verificación. Incluso marca ON u OFF pero el usuario no estará seguro del estado

  • WaitProperty - Espera hasta que el valor de la propiedad se haga realidad

  • Exist - Verifica la existencia de la casilla de verificación

  • GetROProperty("name") - Obtiene el nombre de la casilla de verificación

  • GetROProperty("Visible") - Devuelve un valor booleano si está visible

Ejemplo

'To Check the Check Box
Set Obj = Browser("Calculator").Page("Gmail").WebCheckBox("PersistentCookie")
Obj.Set "ON"

'To UnCheck the Check Box
Obj.Set "OFF"

'Verifies the Existance of the Check box and returns Boolean Value
val = Obj.Exist
print val

'Fetches the Name of the CheckBox
a = Obj.GetROProperty("name")
print a

'Verifies the visible property and returns the boolean value.
x = Obj.GetROProperty("visible")
print x

Trabajar con botón de radio

A continuación se muestran algunos de los métodos clave con los que se puede trabajar con el botón de radio:

  • Select(RadioButtonName) - Ayuda al probador a poner la caja de radio en "ON"

  • Click- Clics en el botón de radio. Incluso el botón de radio está encendido o apagado, pero el probador no puede obtener el estado

  • WaitProperty - Espera hasta que el valor de la propiedad se haga realidad

  • Exist - Verifica la existencia del botón de radio

  • GetROProperty("name") - Obtiene el nombre del botón de opción

  • GetROProperty("Visible") - Devuelve un valor booleano si está visible

Ejemplo

'Select the Radio Button by name "YES"
Set Obj = Browser("Calculator").Page("Forms").WebRadioGroup("group1")
Obj.Select("Yes")

'Verifies the Existance of the Radio Button and returns Boolean Value
val = Obj.Exist
print val

'Returns the Outerhtml of the Radio Button
txt = Obj.GetROProperty("outerhtml")
print text

'Returns the boolean value if Radio button is Visible.
vis = Obj.GetROProperty("visible")
print vis

Trabajar con cuadro combinado

A continuación se muestran algunos de los métodos clave con los que se puede trabajar con Combo Box:

  • Select(Value) - Ayuda al probador a seleccionar el valor del ComboBox

  • Click - Clics en el objeto

  • WaitProperty - Espera hasta que el valor de la propiedad se haga realidad

  • Exist - Verifica la existencia del Combo Box

  • GetROProperty("Text") - Obtiene el valor seleccionado del cuadro combinado

  • GetROProperty("all items") - Devuelve todos los elementos del cuadro combinado

  • GetROProperty("items count") - Devuelve el número de elementos en el cuadro combinado

Ejemplo

'Get the List of all the Items from the ComboBox
Set ObjList = Browser("Math Calculator").Page("Statistics").WebList("class")
x = ObjList.GetROProperty("all items")
print x

'Get the Number of Items from the Combo Box
y = ObjList.GetROProperty("items count")
print y

'Get the text value of the Selected Item
z = ObjList.GetROProperty("text")
print z

Trabajar con botones

A continuación se muestran algunos de los métodos clave con los que se puede trabajar con los botones:

  • Click - Clics en el botón

  • WaitProperty - Espera hasta que el valor de la propiedad se haga realidad

  • Exist - Verifica la existencia del Botón

  • GetROProperty("Name") - Obtiene el nombre del botón

  • GetROProperty("Disabled") - Devuelve un valor booleano si está habilitado / deshabilitado

Ejemplo

'To Perform a Click on the Button
Set obj_Button = Browser("Math Calculator").Page("SQR").WebButton("Calc")
obj_Button.Click

'To Perform a Middle Click on the Button
obj_Button.MiddleClick

'To check if the button is enabled or disabled.Returns Boolean Value
x = obj_Button.GetROProperty("disabled")
print x

'To fetch the Name of the Button
y = obj_Button.GetROProperty("name")
print y

Trabajar con webTables

En la aplicación basada en web de hoy, las webTables se han vuelto muy comunes y los probadores deben comprender cómo funcionan las WebTables y cómo realizar una acción en las webTables. Este tema le ayudará a trabajar con WebTables de forma eficaz.

No Señor. Declaración y descripción
1

if statement

Un if declaración consta de una expresión booleana seguida de una o más declaraciones.

2

if...else statement

Un if elsedeclaración consta de una expresión booleana seguida de una o más declaraciones. Si la condición es verdadera. Las declaraciones bajoifse ejecutan las declaraciones. Si la condición es falsa.Else parte del script se ejecuta

3

if..elseif...else statement

Una declaración if seguida de uno o más Elseif declaraciones, que consta de expresiones booleanas y luego seguidas de un opcional else statement, que se ejecuta cuando toda la condición se vuelve falsa.

4

nested if statements

Un si o elseif declaración dentro de otra if o elseif declaración (s).

5

switch statement

UN switch La declaración permite que una variable sea probada igualmente para una lista de valores.

  • html id - Si la tabla tiene una etiqueta de identificación, es mejor hacer uso de esta propiedad.

  • innerText - Encabezado de la mesa.

  • sourceIndex - Obtiene el índice de origen de la tabla

  • ChildItemCount - Obtiene el número de ChildItems presentes en la fila especificada

  • RowCount - Obtiene el número de filas en la tabla

  • ColumnCount - Obtiene el número de columnas de la tabla

  • GetcellData - Obtiene el valor de la celda según la columna y el índice de fila

Ejemplo

Browser("Tutorials Point").Sync
' WebTable 
Obj = Browser("Tutorials Point").Page("VBScript Decisions").WebTable("Statement")
' Fetch RowCount
x = Obj.RowCount
print x

' Fetch ColumnCount
y = Obj.ColumnCount(1)
print y

' Print the Cell Data of the Table
For i = 1 To x Step 1
   
   For j = 1 To y Step 1
      z = Obj.GetCellData(i,j)
      print "Row ID : " & i & " Column ID : " & j & " Value : " & z
   Next
Next

'Fetch the Child Item count of Type Link in a particular Cell
z = Obj.ChildItemCount(2,1,"Link")
print z

¿Qué son los objetos virtuales?

A veces, una aplicación bajo prueba puede contener un objeto de ventana estándar, pero QTP no la reconoce. En estas circunstancias, los objetos pueden definirse como objetos virtuales (VO) de tipo botón, enlace, etc., de modo que las acciones del usuario se puedan simular en los objetos virtuales durante la ejecución.

Ejemplo

Digamos que estamos automatizando un escenario en Microsoft Word. Activé la aplicación MS Word y hago clic en cualquier icono de la cinta. Por ejemplo, en la cinta, se hace clic en la pestaña Insertar y luego el usuario hace clic en el botón "Imagen". Un botón se reconoce como WinObject; de ahí la importancia de los objetos virtuales.

Window("Microsoft Word").WinObject("Ribbon").Click 145,45
Window("Microsoft Word").WinObject("Ribbon").WinObject("Picture...").Click 
170,104

Crear un objeto virtual

Step 1 - En tales escenarios, los Objetos virtuales se crean usando el Administrador de Objetos Virtuales o Nuevo Objeto Virtual desde "Herramientas" >> "Objeto Virtual" >> "Nuevo Objeto Virtual" y haga clic en el botón "Siguiente".

Step 2 - Asigne el objeto con el tipo de clase y haga clic en "Siguiente".

Step 3- Haga clic en el botón "Marcar objeto". Aparecerá un cursor en forma de cruz y marcará el objeto que desea asignar y haga clic en "Siguiente".

Step 4 - Seleccione el padre del objeto virtual y haga clic en "Siguiente".

Step 5 - Nombre la colección en la que le gustaría almacenar el objeto virtual y haga clic en "Finalizar".

Administrador de objetos virtuales

Virtual Object Manager gestiona las colecciones de objetos virtuales. Los probadores pueden agregar o eliminar los objetos virtuales del administrador de objetos virtuales.

Navegación al Administrador de objetos virtuales: "Herramientas" >> "Administrador de objetos virtuales" como se muestra a continuación -

Usar objetos virtuales

Después de crear los objetos virtuales, el objeto creado se puede utilizar como se muestra a continuación:

Window("Microsoft Word").WinObject("Ribbon").VirtualButton("button").Click

Limitaciones de objetos virtuales

  • QTP no admite objetos virtuales para grabaciones analógicas o de bajo nivel.

  • No se pueden agregar puntos de control en objetos virtuales.

  • Los objetos virtuales no están controlados por Object Repository.

  • Aunque asignamos un objeto a una clase en particular (botón o Lista), todos los métodos de los objetos nativos no son compatibles con los objetos virtuales.

  • Object Spy no se puede utilizar en Virtual Object.

  • La ejecución de la prueba fallará si la resolución de la pantalla cambia a medida que cambian las coordenadas.

  • La ventana de la aplicación debe tener el mismo tamaño de pantalla para que los objetos virtuales se capturen correctamente.

Como tal, QTP no proporciona ningún soporte integrado para conectarse a la base de datos, sin embargo, los probadores de VBScript podrán conectarse e interactuar con bases de datos utilizando objetos ADODB.

ADODB dispone de 4 propiedades o métodos con los que podremos trabajar con las bases de datos. Ellos son -

  • ADODB.Connection - Se utiliza para establecer una conexión a la base de datos.

  • ADODB.Command - Se utiliza para ejecutar un comando SQL (consultas o procedimientos almacenados)

  • ADODB.Fields - Se utiliza para recuperar una columna en particular de un conjunto de registros después de ejecutar una consulta / proceso almacenado

  • ADODB.Recordset - Se utiliza para obtener datos de una base de datos.

¿Cómo conectarse a la base de datos?

Las bases de datos se pueden conectar mediante cadenas de conexión. Cada base de datos difiere en la forma en que nos conectamos a ellas. Sin embargo, las cadenas de conexión se pueden construir con la ayuda de www.connectionstrings.com

Veamos cómo conectarnos a la base de datos con los siguientes parámetros:

  • Database Type - SERVIDOR MSSQL

  • Server Name - SQLEXPRESS

  • Database Name - Prueba

  • User Id - sa

  • password - Contraseña123

El resultado de la consulta se muestra en SQL Server Management Studio de la siguiente manera:

Dim objConnection 
'Set Adodb Connection Object
Set objConnection = CreateObject("ADODB.Connection")     
Dim objRecordSet 
 
'Create RecordSet Object
Set objRecordSet = CreateObject("ADODB.Recordset")     
 
Dim DBQuery 'Query to be Executed
DBQuery = "Select NAME from dbo.EMPLOYEE where AGE = 29"
 
'Connecting using SQL OLEDB Driver
objConnection.Open "Provider = sqloledb.1;Server =.\SQLEXPRESS;
User Id = sa;Password=Password123;Database = Trial"
 
'Execute the Query
objRecordSet.Open DBQuery,objConnection
 
'Return the Result Set
Value = objRecordSet.fields.item(0)				
msgbox Value
 
' Release the Resources
objRecordSet.Close        
objConnection.Close		
 
Set objConnection = Nothing
Set objRecordSet = Nothing

Resultado

Al ejecutar el script anterior, la salida se muestra en el cuadro de mensaje como se muestra a continuación:

XML es un lenguaje de marcado diseñado para almacenar datos en un formato que puede ser legible tanto por humanos como por máquinas. Con XML, los datos también se pueden intercambiar fácilmente entre sistemas informáticos y de bases de datos.

El XML de muestra y sus elementos clave se representan a continuación:

Accediendo a XML

Const XMLDataFile = "C:\TestData.xml"
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = False
xmlDoc.Load(XMLDataFile)

' Getting the number of Nodes (books)
Set nodes = xmlDoc.SelectNodes("/bookstore/book")
Print "Total books: " & nodes.Length    ' Displays 2

' get all titles
Set nodes = xmlDoc.SelectNodes("/Booklib/book/value/text()")

' get their values
For i = 0 To (nodes.Length - 1)
   Title = nodes(i).NodeValue
   Print "Title is" & (i + 1) & ": " & Title
Next

Comparando XML

Podemos comparar dos XML dados:

Dim xmlDoc1
Dim xmlDoc2

' Load the XML Files
Set xmlDoc1 = XMLUtil.CreateXMLFromFile ("C:\File1.xml")
Set xmlDoc2 = XMLUtil.CreateXMLFromFile ("C:\File2.xml")

'Use the compare method of the XML to check if they are equivalent
Comp = xmlDoc1.Compare (xmlDoc1, xmlDoc2)

'Returns 1 if the two files are the same
If Comp = 1 Then
   Msgbox "XML Files are the Same"
Else
   Msgbox "XML Files are Different"
End if

Los scripts QTP solo se pueden ejecutar si los objetos están presentes en el repositorio de objetos. Las descripciones de los objetos se crean mediante programación descriptiva:

  • Cuando los probadores quieren realizar una operación en un objeto que no está presente en el repositorio de objetos

  • Cuando los objetos de la aplicación son de naturaleza muy dinámica.

  • Cuando el repositorio de objetos crece mucho, el rendimiento es deficiente a medida que aumenta el tamaño del repositorio de objetos.

  • Cuando se construye el marco, se ha decidido no utilizar el repositorio de objetos en absoluto.

  • Cuando los evaluadores desean realizar una acción en la aplicación en tiempo de ejecución sin tener el conocimiento de las propiedades únicas del objeto.

Sintaxis

Hay dos formas de realizar secuencias de comandos mediante la técnica de programación descriptiva. Ellos son -

  • Descripción Objetos
  • Descripción Strings

Descripción Objetos

El script se desarrolla utilizando objetos de descripción que dependen de las propiedades utilizadas y sus valores correspondientes. Luego, estas descripciones se utilizan para construir el script.

'Creating a description object
Set btncalc = Description.Create()

'Add descriptions and properties
btncalc("type").value = "Button"
btncalc("name").value = "calculate"
btncalc("html tag").value = "INPUT"

' Use the same to script it
Browser("Math Calc").Page("Num Calculator").WebButton(btncalc).Click

Descripción Strings

La descripción de los objetos se desarrolla utilizando las propiedades y valores como cadenas como se muestra a continuación.

Browser("Math Calc").Page("Num Calculator").WebButton("html 
tag:=INPUT","type:=Button","name:=calculate").Click

Objetos secundarios

QTP proporciona el método ChildObjects, que nos permite crear una colección de objetos. Los objetos principales preceden a ChildObjects.

Dim oDesc
Set oDesc = Description.Create
oDesc("micclass").value = "Link"

'Find all the Links
Set obj = Browser("Math Calc").Page("Math Calc").ChildObjects(oDesc)

Dim i
'obj.Count value has the number of links in the page

For i = 0 to obj.Count - 1	 
   'get the name of all the links in the page			
   x = obj(i).GetROProperty("innerhtml") 
   print x 
Next

Identificadores ordinales

La programación descriptiva se utiliza para escribir el script basado en identificadores ordinales, lo que permitirá a QTP actuar sobre esos objetos cuando dos o más objetos tienen las mismas propiedades.

' Using Location
Dim Obj
Set Obj = Browser("title:=.*google.*").Page("micclass:=Page")
Obj.WebEdit("name:=Test","location:=0").Set "ABC"
Obj.WebEdit("name:=Test","location:=1").Set "123"
 
' Index
Obj.WebEdit("name:=Test","index:=0").Set "1123"
Obj.WebEdit("name:=Test","index:=1").Set "2222"
 
' Creation Time
Browser("creationtime:=0").Sync
Browser("creationtime:=1").Sync
Browser("creationtime:=2").Sync

El propio QTP se puede automatizar mediante la interfaz COM que proporciona HP-QTP. El modelo de objetos de automatización es un conjunto de objetos, métodos y propiedades que ayuda a los probadores a controlar los ajustes de configuración y ejecutar los scripts utilizando la interfaz QTP. Las configuraciones / acciones clave que se pueden controlar (pero no se limitan a) se enumeran a continuación:

  • Carga todos los complementos necesarios para una prueba
  • Hace que QTP sea visible durante la ejecución
  • Abre la prueba usando la ubicación especificada
  • Bibliotecas de funciones asociadas
  • Especifica el tiempo de espera de sincronización de objetos comunes
  • Iniciar y finalizar iteración
  • Activar / desactivar la identificación inteligente
  • En la configuración de errores
  • Ruta de la tabla de datos
  • Configuración del escenario de recuperación
  • Configuración de seguimiento de registros

QTP 11.5x proporciona una documentación exclusiva sobre el modelo de objetos de automatización que se puede consultar navegando a "Inicio" >> "Todos los programas" >> "Software de HP" >> "Pruebas funcionales unificadas de HP" >> "Documentación" >> "Unificado Referencia de automatización de pruebas funcionales ".

Generar secuencia de comandos de AOM

Un evaluador puede generar un script AOM desde el propio QTP, usando la opción "Generate Script". Vaya a "Ejecutar" >> "Configuración" >> pestaña "Propiedades" >> "Generar secuencia de comandos" como se muestra a continuación -

Ejemplo

' A Sample Script to Demostrate AOM
Dim App 'As Application
Set App = CreateObject("QuickTest.Application")
App.Launch
App.Visible = True

App.Test.Settings.Launchers("Web").Active = False
App.Test.Settings.Launchers("Web").Browser = "IE"
App.Test.Settings.Launchers("Web").Address = "http://easycalculation.com/"
App.Test.Settings.Launchers("Web").CloseOnExit = True

App.Test.Settings.Launchers("Windows Applications").Active = False
App.Test.Settings.Launchers("Windows Applications").Applications.RemoveAll
App.Test.Settings.Launchers("Windows Applications").RecordOnQTDescendants = True
App.Test.Settings.Launchers("Windows Applications").RecordOnExplorerDescendants = False
App.Test.Settings.Launchers("Windows Applications").RecordOnSpecifiedApplications = True

App.Test.Settings.Run.IterationMode = "rngAll"
App.Test.Settings.Run.StartIteration = 1
App.Test.Settings.Run.EndIteration = 1
App.Test.Settings.Run.ObjectSyncTimeOut = 20000
App.Test.Settings.Run.DisableSmartIdentification = False
App.Test.Settings.Run.OnError = "Dialog"

App.Test.Settings.Resources.DataTablePath = "<Default>"
App.Test.Settings.Resources.Libraries.RemoveAll

App.Test.Settings.Web.BrowserNavigationTimeout = 60000
App.Test.Settings.Web.ActiveScreenAccess.UserName = ""
App.Test.Settings.Web.ActiveScreenAccess.Password = ""

App.Test.Settings.Recovery.Enabled = True
App.Test.Settings.Recovery.SetActivationMode "OnError"
App.Test.Settings.Recovery.Add "D:\GUITest2\recover_app_crash.qrs", 
   "Recover_Application_Crash", 1
App.Test.Settings.Recovery.Item(1).Enabled = True 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' System Local Monitoring settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
App.Test.Settings.LocalSystemMonitor.Enable = false
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Log Tracking settings
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
With App.Test.Settings.LogTracking
   .IncludeInResults = False
   .Port = 18081 
   .IP = "127.0.0.1"
   .MinTriggerLevel = "ERROR"
   .EnableAutoConfig = False
   .RecoverConfigAfterRun = False
   .ConfigFile = ""
   .MinConfigLevel = "WARN" 
End With

Un marco define un conjunto de pautas / mejores prácticas que refuerzan un conjunto de estándares, lo que facilita su uso para que los usuarios finales trabajen con ellos. Existen diferentes tipos de marcos de automatización y los más comunes se enumeran a continuación:

  • Marco basado en palabras clave
  • Marco basado en datos
  • Marco híbrido

Marco basado en palabras clave

Las pruebas basadas en palabras clave son un tipo de marco de pruebas de automatización funcional que también se conoce como pruebas basadas en tablas o pruebas basadas en palabras de acción.

En las pruebas basadas en palabras clave, utilizamos un formato de tabla, generalmente una hoja de cálculo, para definir palabras clave o palabras de acción para cada función que nos gustaría ejecutar.

Ventajas

  • Es más adecuado para probadores novatos o no técnicos.

  • Permite escribir pruebas de una manera más abstracta utilizando este enfoque.

  • Las pruebas basadas en palabras clave permiten que la automatización se inicie antes en el SDLC incluso antes de que se entregue una compilación estable para la prueba.

  • Existe un alto grado de reutilización.

Desventajas

  • La inversión inicial en el desarrollo de las palabras clave y sus funcionalidades relacionadas puede llevar más tiempo.

  • Podría actuar como una restricción para los probadores técnicamente capacitados.

Marco basado en datos

Las pruebas basadas en datos son la creación de scripts de prueba donde los datos de prueba y / o los valores de salida se leen de los archivos de datos en lugar de usar los mismos valores codificados de forma rígida cada vez que se ejecuta la prueba. De esta manera, los probadores pueden probar cómo la aplicación maneja varias entradas de manera efectiva. Puede ser cualquiera de los siguientes archivos de datos:

  • datapools
  • Archivos de Excel
  • Objetos ADO
  • Archivos CSV
  • Fuentes ODBC

Diagrama de flujo

Las pruebas basadas en datos se pueden comprender mejor con el siguiente diagrama:

Ventajas

  • El marco impulsado por datos da como resultado una menor cantidad de código
  • Ofrece mayor flexibilidad para mantener y solucionar los problemas de secuencias de comandos
  • Se pueden desarrollar datos de prueba

Desventajas

  • Cada secuencia de comandos debe ser diferente para comprender diferentes conjuntos de datos.

Marco híbrido

El marco híbrido es una combinación de marco impulsado por palabras clave y basado en datos que se puede describir mejor mediante el siguiente diagrama de flujo.

Factores que afectan

A continuación se muestran los parámetros que se deben tener en cuenta al desarrollar el marco. Los factores afectos se enumeran a continuación:

  • Los archivos de marco deben admitir software de control de versiones como SVN, CVS, MS Source Control

  • El marco debe admitir la ejecución de scripts en diferentes entornos, a saber, QA, SAT, DEV

  • Tras los cambios de Objeto, los scripts deben ejecutarse con cambios mínimos.

  • Framework debe configurarse solo y ocuparse de requisitos previos como la creación de carpetas / bases de datos.

  • El marco debe tener una estructura de informes sólida para que los problemas en el script / aplicación se puedan detectar fácilmente

  • El marco debe tener una mayor flexibilidad para que sea fácil de usar

  • El marco debe seguir los estándares de codificación para que los archivos, las funciones y el historial de cambios se mantengan correctamente.

En el próximo capítulo, aprenderemos cómo diseñar un marco simple.

Diseñemos un marco simple tomando una aplicación de muestra. Automatizaremos algunos escenarios de la aplicación bajo prueba y escribiremos funciones reutilizables.

La aplicación de muestra bajo prueba es "Calculator", una aplicación predeterminada que está disponible como parte de Windows. Creemos ahora diferentes componentes de un marco. Aquí, desarrollaremos un marco híbrido y usaremos Object Repository, ya que es una aplicación bastante simple. Sin embargo, este marco también se puede escalar para admitir una aplicación compleja.

La estructura de carpetas del Framework es la que se muestra a continuación:

Explicación de la estructura de carpetas -

  • Master Driver Script- El Script que impulsa toda la ejecución. Realiza los requisitos previos y los ajustes iniciales necesarios para la ejecución.

  • Library Files - Las funciones asociadas que forman la biblioteca de funciones.

  • Data Table - Los datos de prueba necesarios para la ejecución.

  • Object Repository - Los objetos y sus propiedades que permiten a QTP reconocer los objetos sin problemas.

  • Execution Logs - La carpeta contiene el archivo de registro de ejecución con las funciones del usuario y el historial de ejecución de la función.

Secuencia de comandos del controlador maestro

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
' MASTER DRIVER SCRIPT NAME    : Calculator 
' DESCRIPTION                  : Drivers Script to Execute Automated Test for 
   the Calculator  
' AUTHOR                       : Tutorials Point 
' DATE CREATED                 : 30-Dec-2013 
' OBJECT REPOSITORY ASSOCIATED : Calc.tsr 
' LIBRARY FILES ASSOCIATED     : calculator.qfl, Common.qfl 
' MODIFICATION LOG

' ---------------------------------------------------- 
' First Version       Tutorials point 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Option Explicit  

Public ExecDrive  

' Get the Root folder of the Test  so that we can make use of relative paths. 
Dim x : x = Instr(Environment.Value("TestDir"),"Driver")-2 
ExecDrive = mid(Environment.Value("TestDir"),1,x)  

' Get the path of Libraries using relative to the current Drive 
Dim LibPath : LibPath = ExecDrive+"\Libraries\"  

' Dynamically Load the Function Libraries 
LoadFunctionLibrary LibPath + "Calculator.qfl", LibPath + "common_utils.qfl"   

' Capturing the Start Time 
' clscommon is the class object created in common.qfl library file 
clscommon.StartTime = Time()  

' Launching the Application 
SystemUtil.Run "C:\Windows\System32\Calc.exe" : wait (2)  

' Initialize the Data Table Path  
Dim FileName : FileName  = ExecDrive+"\TestData\Calculator.xls" 
Dim SheetSource : SheetSource  = "Calc_test" 
Dim SheetDest : SheetDest = "Global"  

' Import the DataTable into the QTP Script 
DataTable.ImportSheet  FileName , SheetSource , SheetDest   

' Object Repository Path 
Dim RepPath : RepPath = ExecDrive+"\Object_Repository\Calc.tsr" 
RepositoriesCollection.RemoveAll()  
RepositoriesCollection.Add(RepPath)   

' To Keep a Count on iteration 
Dim InttestIteration                   
Dim InttestRows : InttestRows = datatable.GetRowCount   

'  Fetching Date-TimeStamp which will be unique for Naming the Execution Log File 
clscommon.StrDateFormatted = day(date()) & "_" &  MonthName(Month(date()),true) &  
 "_" & YEAR(date())& "_"&hour(now)&"_"&minute(now)  

 ' Name the LogFile  
clscommon.StrLogFile = ExecDrive & "\Execution Logs\" &  
clscommon.StrDateFormatted & ".txt"   

' Create the Execution LogFile which captures the result 
clscommon.Fn_FileCreate(clscommon.StrLogFile)  

' Iniitialize the Parameters and all the relevant Test Details 
Call Fn_InitializeLogFile()  

' Kill all the previous calculator process  
Call fn_Kill_Process("calc.exe")  

For InttestIteration = 1 to InttestRows 
   datatable.SetCurrentRow InttestIteration  
   Dim StrExecute : StrExecute = Ucase(Trim(datatable.Value("Run","Global"))) 
   If StrExecute = "Y" Then  
      clscommon.Number1 = Trim(datatable.Value("Number_1","Global"))  
      clscommon.Number2 = Trim(datatable.Value("Number_2","Global"))  
      clscommon.Number3 = Trim(datatable.Value("Number_3","Global"))  
   
      clscommon.Number4 = Trim(datatable.Value("Number_4","Global"))  
      clscommon.Number5 = Trim(datatable.Value("Number_5","Global"))  
      clscommon.Number6 = Trim(datatable.Value("Number_6","Global"))  
   
      clscommon.Test_Case_ID  = 
         Trim(datatable.Value("Test_Case_ID","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      clscommon.tcScenario = 
         Trim(datatable.Value("Scenario","Global"))' 
            : clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
      Dim  Expected_Val :  Expected_Val = 
         Trim(datatable.Value("Expected_Val","Global"))'                        
            :  clscommon.LogWrite "The Test Case Data is Located at :: " & tcDataPath 
   
      Select case clscommon.tcScenario  
         Case "Add" 
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("+",Expected_Val) 
    
         Case "Subtract"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("-",Expected_Val) 
    
         Case "Multiply"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("*",Expected_Val) 
    
         Case "Divide"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("/",Expected_Val) 
    
         Case "Sqrt"   
            clscommon.LogWrite "=== Inside the Test Set :: " & 
               clscommon.tcScenario & " ===" 
                  Call fnCalculate("sqt",Expected_Val) 
      End Select 
   End If  
Next  

' Calling the End Test to Add the result Footer in exec log file. 
Call fn_End_test()  

'  =====================  End of Master Driver Script =====================

Archivos de biblioteca

Las funciones de la calculadora están escritas en un archivo de función separado guardado con la extensión .qfl o .vbs. Estas funciones se pueden reutilizar en todas las acciones.

'  Calculator. Qfl File :: Associated Function Library for Calculator Master Driver  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : Fn_InitializeLogFile 
' DESCRIPTION       : Function to Write the Initial Values in the Log File 
' INPUT PARAMETERS  : varExecDrive,StrDB,StrUId,Strpwd,StrNewDB 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
Public Function Fn_InitializeLogFile() 
   clscommon.LogWrite "********************************************" 
   clscommon.LogWrite "Calc Automation Started" 
End Function 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fnCalculate 
' DESCRIPTION       : Function to perform Arithmetic Calculations 
' INPUT PARAMETERS  : operator,Expected_Val 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : Pass or Fail message 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =    
Function fnCalculate(operator,Expected_Val) 
   clscommon.LogWrite "Executing the Function 'fnCalculate' " 

   Window("Calculator").Activate 
    
   If Trim(clscommon.Number1) <> ""  Then
      Window("Calculator").WinButton(clscommon.Number1).Click 
   If Trim(clscommon.Number2) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number2).Click 
   If Trim(clscommon.Number3) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number3).Click 

   Window("Calculator").WinButton(operator).Click 
   If Trim(clscommon.Number4) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number4).Click 
   If Trim(clscommon.Number5) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number5).Click 
   If Trim(clscommon.Number6) <> ""  Then 
      Window("Calculator").WinButton(clscommon.Number6).Click 

   Window("Calculator").WinButton("=").Click 
   Dim ActualVal : ActualVal  = 
      Window("Calculator").WinEdit("Edit").GetROProperty("text") 
   clscommon.LogWrite "The Actual Value after the Math Operation is "& ActualVal 
  
   If Trim(ActualVal) = Trim(Expected_Val) Then 
      clscommon.WriteResult "Pass",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value matches with Actual Value :: " 
            & ActualVal 
    
   Else 
      clscommon.WriteResult "Fail",  clscommon.Test_Case_ID , 
         clscommon.tcScenario , " Expected Value - " & Expected_Val & " Does NOT matches 
            with Actual Value :: " & ActualVal 
   End If 
    
   Window("Calculator").WinButton("C").Click 
    
   If Err.Number <> 0  Then 
      clscommon.LogWrite  "Execution Error : The Error Number is ::  " & 
         Err.Number & " The Error Description is " & Err.Description 
      Err.Clear 
   End If 
    
   clscommon.LogWrite "Exiting the Function 'fnCalculate' " 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = 
' FUNCTION NAME     : fn_Kill_Process 
' DESCRIPTION       : Function to Kill the process by name 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 30-Dec-2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = =  
Function fn_Kill_Process(process) 
   Dim strComputer ,  strProcessToKill , objWMIService , colProcessstrComputer = "." 
   strProcessToKill = process 
    
   Set objWMIService = GetObject("winmgmts:" _& 
      "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2") 
    
   Set colProcess = objWMIService.ExecQuery _("Select * from Win32_Process 
      Where Name = '" & strProcessToKill & "'") 
    
   count = 0 
   For Each objProcess in colProcess 
      objProcess.Terminate() 
      count = count + 1 
   Next 
End Function  

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  
' FUNCTION NAME     : fn_End_test 
' DESCRIPTION       : Function to finish the test Execution process 
' INPUT PARAMETERS  : Application name to be killed 
' OUTPUT PARAMETERS : NIL 
' RETURN VALUE      : NIL 
' DATE CREATED      : 20/Dec/2013 
'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
Function fn_End_test() 
   clscommon.LogWrite "Status Message - Executing the Function 'fn_End_test' " 
    
   Window("Calculator").Close 
   On Error Resume Next 
    
   clscommon.StopTime = Time() 
   clscommon.ElapsedTime = DateDiff("n",clscommon.StartTime,clscommon.StopTime) 
   Dim Totaltests  
   Totaltests = clscommon.gintPassCount+ clscommon.gintFailCount
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   clscommon.LogWrite "##  The Execution Start Time  ::  " & clscommon.StartTime 
   clscommon.LogWrite "##  The Execution End Time   ::  " & clscommon.StopTime 
   clscommon.LogWrite "##  The Time Elapsed ::   " & clscommon.ElapsedTime & " Minutes " 
   clscommon.LogWrite "##  The OS ::  " & Environment.Value("OS") 
   clscommon.LogWrite "##  The Total No of Test Cases Executed  ::  " & Totaltests 
   clscommon.LogWrite "##  The No. of Test Case Passed ::  " & clscommon.gintPassCount 
   clscommon.LogWrite "##  The No. of Test Case Failed ::  " & clscommon.gintFailCount 
   clscommon.LogWrite "## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
   SystemUtil.CloseDescendentProcesses 
End Function  
'  ===============   End of Calculator. Qfl   ============================= '

El otro archivo de biblioteca, que es 'common_utils.qfl' que contiene las funciones, nos permite escribir la salida en un archivo de texto.

Set clscommon = New OS_clsUtils  

'Creating a class file to handle global variables. 
Class OS_clsUtils 
   Dim StrLogFile 
   Dim StrDateFormatted 
   Dim Result 
    
   Dim  Number1, Number2 , Number3  
   Dim  Number4, Number5 , Number6  
   Dim Test_Case_ID , tcScenario 
   Dim StartTime, StopTime, ElapsedTime 
   
   Dim gintPassCount , gintFailCount , gintWarningCount ,  gintdoneCount,  
      gintinfoCount 
    
   Function Fn_FileCreate(strFileName) 
      Dim objFSO:  Set objFSO = CreateObject("Scripting.FileSystemObject") 
      On Error Resume Next 
      
      Dim objTextFile : Set objTextFile = objFSO.CreateTextFile(strFileName) 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function LogWrite(sMsg) 
      Const ForAppending = 8 
       
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & sMsg 
      objTextFile.Close 
       
      Set objTextFile = Nothing 
      Set objFSO = Nothing 
   End Function 
    
   Function WriteResult(strStatus,functionName,functionDescription,Result) 
      Const ForAppending = 8 
      Dim objFSO : Set objFSO = CreateObject("scripting.FileSystemObject") 
      Dim objTextFile : Set objTextFile = objFSO.OpenTextFile 
         (clscommon.StrLogFile, ForAppending, True) 
       
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * Test Case Exec Details  * * * * * " 
      
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test staus :: " & strStatus 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Tese ID ::  " & functionName 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Description :: " 
            & functionDescription 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & " Test Result Details :: " & Result 
      objTextFile.WriteLine day(date()) & "/" &  MonthName(Month(date()),true) 
         &  "/" & YEAR(date()) & " " & time & ": " & "  
            * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * " 
      objTextFile.Close 
       
      Set objTextFile = Nothing  
      Set objFSO = Nothing 
       
      Select Case Lcase(strStatus) 
         Case "pass" 
            gintPassCount = gintPassCount + 1 
          
         Case "fail" 
            gintFailCount = gintFailCount+1 
      End Select 
   End Function 
End Class 
'   =====================   End of common_Utils.qfl =====================

Repositorio de objetos

Object Repository tiene todos los objetos sobre los que actuaría el usuario. La imagen que se muestra a continuación muestra la lista de todos los objetos agregados al repositorio con el nombre calc.tsr

Tabla de datos

DataTable contiene las palabras clave, que impulsan las pruebas y también prueban los datos con los que QTP actuará sobre los objetos.

El registro de ejecución

El archivo de registro de ejecución o el archivo de salida contiene las acciones del usuario y el registro de funciones, lo que permitirá a los evaluadores depurar fallos en el script.

8/Jan/2014 5:09:16 PM: ************************************************* 
8/Jan/2014 5:09:16 PM: Calc Automation Started 
8/Jan/2014 5:09:16 PM: === Inside the Test Set  ::   Add  === 
8/Jan/2014 5:09:16 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 949.  
8/Jan/2014 5:09:17 PM:  * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_001 
8/Jan/2014 5:09:17 PM: Test Description :: Add 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 949.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * 
* * * * * * * * * 
  
8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Subtract  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: The Actual Value after the Math Operation is 415.  
8/Jan/2014 5:09:17 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:17 PM: Test staus :: Pass 
8/Jan/2014 5:09:17 PM: Tese ID ::  TC_002 
8/Jan/2014 5:09:17 PM: Test Description :: Subtract 
8/Jan/2014 5:09:17 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 415.  
8/Jan/2014 5:09:17 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *

8/Jan/2014 5:09:17 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:17 PM: === Inside the Test Set  ::   Multiply  === 
8/Jan/2014 5:09:17 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: The Actual Value after the Math Operation is 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:18 PM: Test staus :: Pass 
8/Jan/2014 5:09:18 PM: Tese ID ::  TC_003 
8/Jan/2014 5:09:18 PM: Test Description :: Multiply 
8/Jan/2014 5:09:18 PM:  Test Result Details ::  Expected Value matches with 
   Actual Value :: 278883.  
8/Jan/2014 5:09:18 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * *   

8/Jan/2014 5:09:18 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:18 PM: === Inside the Test Set  ::   Divide  === 
8/Jan/2014 5:09:18 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: The Actual Value after the Math Operation is 3.  
8/Jan/2014 5:09:19 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:19 PM: Test staus :: Pass 
8/Jan/2014 5:09:19 PM: Tese ID ::  TC_004 
8/Jan/2014 5:09:19 PM: Test Description :: Divide 
8/Jan/2014 5:09:19 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 3.  
8/Jan/2014 5:09:19 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * 
* * * * * * * * 
  
8/Jan/2014 5:09:19 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:19 PM: === Inside the Test Set  ::   Sqrt  === 
8/Jan/2014 5:09:19 PM: Executing the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: The Actual Value after the Math Operation is 10.  
8/Jan/2014 5:09:20 PM: * * * * * * Test Case Exec Details  * * * * *  
8/Jan/2014 5:09:20 PM: Test staus :: Pass 
8/Jan/2014 5:09:20 PM: Tese ID ::  TC_005 
8/Jan/2014 5:09:20 PM: Test Description :: Sqrt 
8/Jan/2014 5:09:20 PM: Test Result Details ::  Expected Value matches with Actual 
   Value :: 10.  
8/Jan/2014 5:09:20 PM: * * * * * * * * * * * * * * * * * * * * * * * *  * * * * 
* * * * * * * 

8/Jan/2014 5:09:20 PM: Exiting the Function 'fnCalculate'  
8/Jan/2014 5:09:20 PM: Status Message - Executing the Function 'fn_Finish_test'  
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #  
8/Jan/2014 5:09:20 PM: ##  The Execution Start Time  ::  5:09:14 PM 
8/Jan/2014 5:09:20 PM: ##  The Execution End Time   ::  5:09:20 PM 
8/Jan/2014 5:09:20 PM: ##  The Time Elapsed ::   0 Minutes  
8/Jan/2014 5:09:20 PM: ##  The OS ::  Microsoft Windows Vista Server 
8/Jan/2014 5:09:20 PM: ##  The Total No of Test Cases Executed  ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Passed ::  25 
8/Jan/2014 5:09:20 PM: ##  The No. of Test Case Failed ::   
8/Jan/2014 5:09:20 PM: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #