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: ## # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # #