QTP - Guia Rápido

QTP significa QuickTHusa Pprofissional, um produto de HEwlett Packard (HP). Essa ferramenta ajuda os testadores a realizar um teste funcional automatizado de forma integrada, sem monitoramento, uma vez que o desenvolvimento do script é concluído.

HP QTP usa Visual Basic Scripting (VBScript)para automatizar os aplicativos. O Scripting Engine não precisa ser instalado exclusivamente, pois está disponível como parte do sistema operacional Windows. A versão atual do VBScript é 5.8, que está disponível como parte do Win 7. VBScript NÃO é uma linguagem orientada a objetos, mas sim uma linguagem baseada em objetos.

Ferramentas de teste

As ferramentas de um contexto de teste de software podem ser definidas como um produto que oferece suporte a uma ou mais atividades de teste desde o planejamento, requisitos, criação de um build, execução de teste, registro de defeitos e análise de teste.

Classificação de Ferramentas

As ferramentas podem ser classificadas com base em vários parâmetros. Inclui -

  • O propósito da ferramenta
  • As atividades que são suportadas pela ferramenta
  • O tipo / nível de teste que ele suporta.
  • O tipo de licenciamento (código aberto, freeware, comercial)
  • A tecnologia usada

Tipos de ferramentas

Sr. Não. Tipo de ferramenta Usado para Usado por
1 Ferramenta de gerenciamento de teste Gerenciamento de teste, programação, registro de defeitos, rastreamento e análise. Testadores
2 Ferramenta de gerenciamento de configuração Para implementação, execução, mudanças de rastreamento Todos os membros da equipe
3 Ferramentas de análise estática Teste Estático Desenvolvedores
4 Ferramentas de preparação de dados de teste Análise e design, geração de dados de teste Testadores
5 Ferramentas de execução de teste Implementação, Execução Testadores
6 Comparadores de teste Comparando os resultados esperados e reais Todos os membros da equipe
7 Ferramentas de medição de cobertura Fornece cobertura estrutural Desenvolvedores
8 Ferramentas de teste de desempenho Monitorando o desempenho, tempo de resposta Testadores
9 Ferramentas de planejamento e acompanhamento de projetos Para planejamento Gerentes de projeto
10 Ferramentas de gerenciamento de incidentes Para gerenciar os testes Testadores

Onde o QTP se encaixa?

QTP é uma ferramenta de teste funcional, mais adequada para o teste de regressão dos aplicativos. QTP é uma ferramenta licenciada / comercial de propriedade da HP, que é uma das ferramentas mais populares disponíveis no mercado. Ele compara o resultado real e o esperado e relata os resultados no resumo da execução.

QTP - História e Evolução

HP Quick Test Professional era originalmente propriedade da Mercury Interactive e foi adquirido pela HP. Seu nome original era Astra Quick Test e posteriormente denominado Quick Test Professional, mas a versão mais recente é conhecida como Unified Functional Tester (UFT).

Histórico da versão

Agora vamos dar uma olhada no histórico de versões do QTP.

Versões Linhas do tempo
Astra Quick Test v1.0 a v5.5 - Mercury Interactive Maio de 1998 a agosto de 2001
QuickTest Professional v6.5 a v9.0 - Mercury Interactive Setembro de 2003 a abril de 2006
Hp-QuickTest Professional v9.1 a v11.0 - adquirido e lançado pela HP Fevereiro de 2007 a setembro de 2010
Teste Funcional Hp-Unificado v11.5 a v11.53 2012 a novembro de 2013

Vantagens

  • O desenvolvimento de testes automatizados usando VBScript não requer um codificador altamente qualificado e é relativamente fácil quando comparado a outras linguagens de programação orientadas a objetos.

  • Fácil de usar, fácil de navegar, validação de resultados e geração de relatórios.

  • Prontamente integrado com a ferramenta de gerenciamento de teste (Hp-Quality Center) que permite fácil agendamento e monitoramento.

  • Também pode ser usado para teste de aplicativo móvel.

  • Por se tratar de um produto HP, o suporte completo é fornecido pela HP e por seus fóruns para solucionar problemas técnicos.

Desvantagens

  • Ao contrário do Selenium, o QTP funciona apenas no sistema operacional Windows.

  • Nem todas as versões de navegadores são suportadas e os testadores precisam aguardar o lançamento do patch para cada uma das versões principais.

  • Dito isto, por se tratar de uma ferramenta comercial, o custo de licenciamento é muito alto.

  • Mesmo que o tempo de script seja menor, o tempo de execução é relativamente maior, pois coloca carga na CPU e na RAM.

Para qualquer implementação de ferramenta automatizada, a seguir estão as fases / estágios dela. Cada uma das etapas corresponde a uma atividade particular e cada fase tem um desfecho definido.

  • Test Automation Feasibility Analysis- O primeiro passo é verificar se o aplicativo pode ser automatizado ou não. Nem todos os aplicativos podem ser automatizados devido às suas limitações.

  • Appropriate Tool Selection- A próxima etapa mais importante é a seleção de ferramentas. Depende da tecnologia na qual o aplicativo é construído, seus recursos e uso.

  • Evaluate the suitable framework- Ao selecionar a ferramenta, a próxima atividade é selecionar uma estrutura adequada. Existem vários tipos de estruturas e cada estrutura tem seu próprio significado. Lidaremos com estruturas em detalhes posteriormente neste tutorial.

  • Build Proof of Concept- A Prova de Conceito (POC) é desenvolvida com um cenário ponta a ponta para avaliar se a ferramenta pode suportar a automação da aplicação. É realizado com um cenário ponta a ponta, o que garante que as principais funcionalidades possam ser automatizadas.

  • Develop Automation Framework- Após a construção do POC, é realizado o desenvolvimento do framework, etapa crucial para o sucesso de qualquer projeto de automação de testes. A estrutura deve ser construída após uma análise cuidadosa da tecnologia usada pelo aplicativo e também de seus recursos principais.

  • Develop Test Script, Execute, and Analyze- Uma vez que o desenvolvimento do Script é concluído, os scripts são executados, os resultados são analisados ​​e os defeitos são registrados, se houver. Os Scripts de Teste são geralmente controlados por versão.

QTP é uma ferramenta comercial e a versão de teste pode ser baixada diretamente do site da HP. Apenas a versão atual, que é o teste funcional unificado (11.5x), está disponível para download. A seguir está o URL de onde a versão de teste pode ser baixada.

O URL de download - QTP

Procedimento de instalação

Step 1 - Clique no link "Testes e demonstrações" e selecione "HP Unified Functional Testing 11.50 CC Inglês SW E-Media Evaluation" conforme mostrado abaixo -

Step 2- Após selecionar "HP Unified Functional Testing 11.50", o assistente de download é aberto. Preencha os detalhes pessoais e clique em Avançar.

Step 3 - Leia os 'Termos de Uso' e clique em "SEGUINTE".

Step 4- A janela de download é aberta. Agora, clique no botão "Download".

Step 5- O arquivo baixado terá o formato .RAR. Agora você precisa descompactar o arquivo e o conteúdo da pasta seria como mostrado abaixo e executar o Setup.exe.

Step 6 - Ao executar o arquivo de configuração, a fim de instalar, selecione "Unified Functional Testing Set up" na lista conforme mostrado abaixo -

Step 7 - Em seguida, clique em Avançar para continuar.

Step 8- Na janela de configuração personalizada, selecione os plug-ins que são necessários para sua automação, ou seja, você deve selecionar os plug-ins com base na tecnologia de seu aplicativo em teste. Por exemplo, se o seu aplicativo for baseado em .NET, certifique-se de selecionar .NET.

Step 9- Depois de selecionar os plug-ins necessários para a instalação, clique em Avançar. Após a conclusão da instalação, você verá o botão Concluir Janela.

Step 10- Depois de concluir a instalação, a caixa de diálogo "Requisitos adicionais de instalação" é aberta. Selecione tudo na lista, exceto "Executar Assistente de Instalação da Licença" e clique em "EXECUTAR". NÃO precisamos selecionar "Executar Assistente de Instalação de Licença" porque estamos instalando a versão de teste, que, por padrão, dá uma licença de 30 dias.

Step 11- Após a conclusão dos Requisitos Adicionais de Instalação, uma marca de seleção é exibida, o que indica que os componentes foram instalados com êxito. Agora, clique em Fechar.

Lançando UFT e página de suplementos

Step 1 - Após a instalação, o aplicativo pode ser iniciado a partir do menu Iniciar, conforme mostrado na figura.

Step 2- A página da licença é exibida. Você pode clicar em Continuar, pois instalamos a licença de teste.

Step 3 - A caixa de diálogo Add-ins é aberta para o usuário selecionar os add-ins necessários.

Note - Não carregue todos os suplementos, mas apenas os necessários e clique em OK.

Step 4 - Depois de carregar os add-ins necessários, a ferramenta UFT 11.5 é aberta para o usuário e o primeiro vislumbre da aparência do UFT, conforme mostrado abaixo -

Gravar um teste corresponde a gravar as ações do usuário do aplicativo em teste para que o UFT gere automaticamente os scripts que podem ser reproduzidos. Record and Playback pode nos dar uma primeira impressão da ferramenta, se ela pode suportar a tecnologia ou não, se as configurações iniciais forem feitas corretamente.

As etapas para gravação e reprodução são as seguintes -

Step 1 - Clique em "Novo" teste na página inicial, conforme mostrado abaixo -

Step 2- Clicando no link "Novo", uma nova janela de teste é aberta e o usuário precisa selecionar o tipo de teste. Selecione "Teste GUI", dê um nome para o teste e o local onde ele deve ser salvo.

Step 3- Uma vez que um Novo teste é criado, a nova tela de teste é aberta conforme mostrado abaixo. Agora, clique na guia "Ação1", que é criada com 1 ação por padrão.

Step 4 - Clique no menu "Gravar" e selecione "Configurações de gravação e execução" conforme mostrado abaixo -

Step 5- A caixa de diálogo Configurações de registro e execução é aberta e, com base no tipo de aplicativo, é possível selecionar aplicativos da Web, Java ou Windows. Por exemplo, aqui, vamos gravar um aplicativo baseado na Web (http://easycalculation.com/).

Step 6- Clique em Gravar. O Internet Explorer abre automaticamente com o endereço da webhttps://www.easycalculation.com/de acordo com as configurações. Clique no link "Números" em "Álgebra", digite um número e clique em "Calcular". Após a conclusão da ação, clique no botão "Parar" no painel de registro. Você notará que o script é gerado conforme mostrado abaixo -

Step 7- Agora reproduza o script clicando no botão de reprodução. O script é reproduzido e o resultado é exibido.

Step 8 - A janela de resultados é aberta, por padrão, que mostra exatamente o carimbo de data / hora de execução, etapas aprovadas e reprovadas.

Significado de registro e reprodução

  • É usado como método de investigação preliminar para verificar se o UFT pode suportar a tecnologia / aplicação.

  • Usado para criar um teste de funcionalidade básica de um aplicativo ou recurso que não requer manutenção de longo prazo.

  • Ele pode ser usado para gravar movimentos do mouse e entradas do teclado.

Modos de Gravação

  • Normal Recording - Este é o modo de Gravação padrão que registra os objetos e as operações realizadas no aplicativo em teste.

  • Analog Recording - Isso registra não apenas as ações do teclado, mas também os movimentos do mouse em relação à tela ou janela do aplicativo.

  • Low-Level Recording- Isso registra as coordenadas exatas dos objetos, independentemente do fato de o UFT reconhecer o objeto ou NÃO. Ele apenas registra as coordenadas, portanto NÃO registra os movimentos do mouse.

  • Insight Recording - O UFT registra as operações com base em sua aparência e não em suas propriedades nativas.

Como escolher os modos de gravação

Após clicar no botão Gravação, o usuário pode escolher o modo de gravação no painel de gravação que aparece na tela, assim que a gravação for iniciada. A seleção pode ser feita a partir de qualquer um dos que foram discutidos acima.

Você verá que o seguinte cenário é gravado em todos os modos e a mesma ação foi gravada em várias circunstâncias.

  • Inicie o IE - https://www.easycalculation.com/
  • Clique em "Números" em "Álgebra"
  • Clique no link "Raiz quadrada"
  • Insira um valor para calcular a raiz quadrada. Digamos 10
  • Hit Calculate

O script gravado no modo de gravação padrão, analógico e de baixo nível é fornecido abaixo -

' 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

As gravações usando o modo de gravação de visão serão conforme mostrado abaixo -

Repositório de Objetos

Repositório de objetos é uma coleção de objetos e propriedades com os quais o QTP será capaz de reconhecer os objetos e agir sobre eles. Quando um usuário registra um teste, os objetos e suas propriedades são capturados por padrão. Sem compreender os objetos e suas propriedades, o QTP NÃO será capaz de reproduzir os scripts.

Clique em cada um dos tópicos a seguir para saber mais sobre o Repositório de Objetos e seus recursos associados.

Sr. Não. Tópico e Descrição
1 Object Spy e seus recursos

Compreender o uso do objeto espião e as funcionalidades associadas.

2 Trabalhando com Repositório de Objetos

Adicionar, editar, deletar objetos de um repositório de objetos e suas funcionalidades associadas.

3 Tipos de repositório de objetos

Lida com Objeto compartilhado e Repositório de Objeto local e seu contexto com relação ao script.

4 Objetos definidos pelo usuário

Lida com as circunstâncias para usar os objetos definidos pelo usuário.

5 Repositório de Objetos em XML

Lida com a conversão de OR para XML e usando o repositório de objetos como XML.

6 Comparando e mesclando OU

Operações como Compare OR ', Merge OR's para trabalhar efetivamente com o Object Repository.

7 Identificadores Ordinais

Circunstâncias em que os identificadores ordinais são usados ​​e suas vantagens.

8 Objetos Filhos

Usando objetos filhos para um script eficaz

Actions ajuda os testadores a dividir os scripts em grupos de instruções QTP. As ações são semelhantes às funções em VBScript; no entanto, existem algumas diferenças. Por padrão, o QTP cria um teste com uma ação.

Ações Funções
Ação é um recurso embutido do QTP. Funções VBScript são suportadas por VBScript e QTP.
Os parâmetros de ações são passados ​​apenas por valor. Os parâmetros da função são passados ​​por valor ou por ref.
Ações têm extensão .mts As funções são salvas como .vbs ou .qfl
As ações podem ou não ser reutilizáveis. As funções são sempre reutilizáveis.

As propriedades da ação podem ser acessadas clicando com o botão direito do mouse na janela do Editor de scripts e selecionando "Propriedades".

As propriedades da ação contêm as seguintes informações -

  • Nome da Ação
  • Location
  • Bandeira Reutilizável
  • Parâmetros de entrada
  • Parâmetros de saída

Tipos de Ações

Existem três tipos de ações -

  • Non-reusable action - Uma ação que pode ser chamada apenas naquele teste específico em que foi projetada e pode ser chamada apenas uma vez.

  • Reusable action - Uma ação que pode ser chamada várias vezes, qualquer teste em que resida, e também pode ser usada por quaisquer outros testes.

  • External Reusable action- É uma ação reutilizável armazenada em outro teste. As ações externas são somente leitura no teste de chamada, mas podem ser usadas localmente com a cópia editável das informações da Tabela de dados para a ação externa.

Trabalhando com Ações

Existem três opções para inserir uma ação. Clique em cada um deles para saber mais sobre o tipo de ação selecionado.

Sr. Não. Tipo de ação e descrição
1 Inserir apelo à nova ação

Insere uma nova ação a partir da ação existente

2 Insira a frase de chamariz

Insere uma cópia de uma ação existente

3 Inserir apelo à ação existente

Insere uma chamada para uma ação reutilizável existente

Uma DataTable, semelhante ao Microsoft Excel, ajuda os testadores a criar casos de teste baseados em dados que podem ser usados ​​para executar uma ação várias vezes. Existem dois tipos de tabelas de dados -

  • Local DataTable - Cada ação possui sua própria tabela de dados privada, também conhecida como tabela de dados local, que também pode ser acessada através de ações.

  • Global DataTable - Cada teste possui uma planilha de dados global que pode ser acessada em todas as ações.

A planilha de dados pode ser acessada na guia "Dados" do QTP, conforme mostrado abaixo -

Para executar um caso de teste para um determinado número de iterações, pode-se definir as iterações da tabela de dados global na caixa de diálogo Configurações de teste, que pode ser acessada usando Arquivo → Configurações → Executar (guia) como mostrado abaixo -

Exemplo

Por exemplo, se um usuário deseja parametrizar "juros compostos" de http://easycalculation.com/ que pode ser acessado usando http://easycalculation.com/compound-interest.php. Os parâmetros podem ser criados conforme mostrado abaixo. A maioria das funcionalidades do Excel também podem ser utilizadas na tabela de dados.

Operações DataTable

Existem três tipos de objetos para acessar DataTable. As operações DataTable podem ser bem compreendidas percorrendo o seguinte -

Sr. Não. Tipo e descrição do objeto
1 Métodos de tabela de dados

Fornece informações detalhadas sobre os métodos da tabela de dados.

2 Métodos de objeto DTParameter

Fornece informações detalhadas sobre os métodos DTParameter.

3 Métodos de objeto DTSheet

Fornece informações detalhadas sobre os métodos DTSheet.

Os pontos de verificação, como o nome já diz, referem-se a um ponto de validação que compara o valor atual das propriedades especificadas ou o estado atual de um objeto com o valor esperado, que pode ser inserido a qualquer momento no script.

Tipos de pontos de verificação

Sr. Não. Tipo e descrição
1

Standard Checkpoint

Verifica os valores de propriedade de um objeto no aplicativo em teste e com suporte em todos os ambientes de suplemento.

2

Bitmap Checkpoint

Verifica uma área de seu aplicativo como um bitmap

3

File Content Checkpoint

Verifica o texto em um arquivo gerado ou acessado dinamicamente, como .txt, .pdf

4

Table Checkpoint

Verifica as informações em uma tabela. Nem todos os ambientes são suportados.

5

Text Checkpoint

Verifique se o texto é exibido dentro de uma área definida em um aplicativo baseado em Windows, de acordo com os critérios especificados.

6

Text Area Checkpoint

Verifica se a string de texto é exibida dentro de uma área definida em um aplicativo baseado no Windows, de acordo com os critérios especificados.

7

Accessibility Checkpoint

Verifica a página e relata as áreas do site que podem não estar em conformidade com as Diretrizes de Acessibilidade de Conteúdo da Web do World Wide Web Consortium (W3C)

8

Page Checkpoint

Verifica as características de uma página da web. Ele também pode verificar se há links quebrados.

9

Database Checkpoint

Verifica o conteúdo de um banco de dados acessado pelo aplicativo em teste.

10

XML Checkpoint

Verifica o conteúdo dos documentos .xml ou documentos .xml em páginas da Web e frames.

Inserindo CheckPoint

Quando o usuário deseja inserir um ponto de verificação, deve-se garantir que a maioria dos pontos de verificação seja suportada apenas durante as sessões de gravação. Quando o usuário interrompe a gravação, os pontos de verificação não são ativados.

A seguir está o menu do ponto de verificação, quando o usuário NÃO está no modo de gravação.

A seguir está o menu do ponto de verificação, quando o usuário está no modo de gravação.

Exemplo

Os pontos de verificação são adicionados para o aplicativo em teste - "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

Visualizando Propriedades do Checkpoint

Após a inserção, caso um testador queira alterar os valores, podemos fazê-lo clicando com o botão direito do mouse na palavra-chave 'checkpoint' do script e navegando até "Propriedades do Checkpoint" conforme mostrado abaixo -

Você também pode localizar os mesmos pontos de verificação no repositório de objetos, conforme mostrado abaixo. Mostra exatamente que tipo de ponto de verificação é usado e quais são os valores esperados e valores de tempo limite.

O ponto de sincronização é a interface de tempo entre a ferramenta e o aplicativo em teste. O ponto de sincronização é um recurso para especificar o tempo de atraso entre duas etapas do script de teste.

Por exemplo, clicar em um link pode carregar a página em 1 segundo, às vezes 5 segundos ou até mesmo pode demorar 10 segundos para carregá-la completamente. Depende de vários fatores, como tempo de resposta do servidor de aplicativos, largura de banda da rede e recursos do sistema do cliente.

Se o tempo estiver variando, o script falhará, a menos que o testador lide com essas diferenças de tempo de maneira inteligente.

Maneiras de inserir o ponto de sincronização

  • WaitProperty
  • Exist
  • Wait
  • Sincronizar (apenas para aplicativos baseados na web)
  • Inserindo pontos de sincronização embutidos QTP.

Digamos que precisamos inserir um ponto de sincronização entre clicar no link "números" e clicar na calculadora "juros simples" em " www.easycalculation.com ". Agora daremos uma olhada em todas as cinco maneiras de inserir o ponto de sincronização para o cenário acima.

Método 1 - WaitProperty

WaitProperty é um método que usa o nome da propriedade, o valor e o valor de tempo limite como entrada para realizar a sincronização. É uma espera dinâmica e, portanto, essa opção é incentivada.

' 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 - existe

Exist é um método que usa o valor de Timeout como entrada para realizar a sincronização. Novamente, é uma espera dinâmica e, portanto, essa opção é incentivada.

' 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 - Espere

Wait é um ponto de sincronização codificado, que espera independentemente do evento acontecer ou NÃO. Portanto, o uso de Wait é desencorajado e pode ser usado para tempos de espera mais curtos, como 1 ou 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 sincronização

O Método de sincronização pode ser usado apenas para aplicativos da web onde sempre há um atraso entre os carregamentos de 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 - Inserindo pontos de sincronização embutidos de QTP

Step 1- Entre no modo de gravação. Esta opção seria desabilitada se o usuário NÃO estivesse no modo de gravação.

Step 2 - Vá em "Design" → "Ponto de sincronização".

Step 3- Precisamos selecionar o objeto, que queremos ser o ponto de sincronização. Depois de selecionar o objeto, a janela do objeto é aberta conforme mostrado abaixo -

Step 4- Clique em OK; a "Janela para adicionar sincronização" é aberta. Selecione a propriedade, o valor e o valor de tempo limite e clique em OK conforme mostrado abaixo -

Step 5 - O script seria gerado conforme mostrado abaixo, que é o mesmo do WaitProperty (Método 1) que já discutimos -

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

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

Sincronização Padrão

Quando o usuário não usou nenhum dos métodos de sincronização acima, o QTP ainda tem um tempo limite de sincronização de objeto embutido que pode ser ajustado pelo usuário.

Navegue até "Arquivo" >> "Configurações" >> Guia Executar >> Tempo limite de sincronização de objeto conforme mostrado abaixo.

Às vezes, o QTP não consegue encontrar nenhum objeto que corresponda à descrição do objeto reconhecido ou pode encontrar mais de um objeto que se encaixa na descrição, então o QTP ignora a descrição reconhecida e usa o mecanismo de Identificação Inteligente para reconhecer o objeto.

A Identificação Inteligente do QTP usa dois tipos de propriedades -

  • Base Filter Properties - As propriedades básicas de uma classe de objeto de teste específica cujos valores não podem ser alterados sem alterar a essência do objeto original.

  • Optional Filter Properties - Outras propriedades também ajudam a identificar os objetos de uma classe específica cujas propriedades provavelmente não mudam com frequência, mas podem ser ignoradas se não forem mais aplicáveis.

Habilitando Identificação Inteligente para um Objeto

Step 1- Navegue até "Ferramentas" → "Identificação do objeto". A caixa de diálogo Identificação de objeto é aberta.

Step 2 - Escolha o ambiente, classe de objeto e ative "Ativar identificação inteligente", conforme mostrado abaixo -

Step 3 - Clique em Configurar e escolha a base e Propriedades do filtro opcional.

Step 4- Adicionar propriedades nas propriedades de base além do padrão e também adicionar / remover propriedades de filtro opcionais. Observe que as mesmas propriedades não podem fazer parte das propriedades obrigatórias e assistivas e clique em "OK".

Step 5- Verifique se a Identificação Inteligente está habilitada após adicionar o objeto daquele tipo no Repositório de Objetos. Identificação inteligente é definida como TRUE. Também podemos torná-lo falso, caso não desejemos habilitar a Identificação inteligente.

Step 6 - Podemos até desativar um nível de teste aplicando no nível de script de teste em "Configurações" do menu "Arquivo", conforme mostrado abaixo -

Step 7 - Se a Identificação inteligente for desabilitada de acordo com a Etapa 6, ela não aplicará a identificação inteligente para nenhum objeto durante a execução do script.

Step 8 - Caso os objetos sejam adicionados com Identificação Inteligente como Desligado, o QTP não usará a Identificação Inteligente para reconhecimento no futuro, embora tenhamos habilitado posteriormente.

A depuração, no contexto de teste de automação, é um processo sistemático de detectar e corrigir os problemas de codificação no script de automação para que o script seja mais robusto e possa detectar os defeitos no aplicativo.

Existem várias maneiras de realizar a depuração usando pontos de interrupção no QTP. Os pontos de quebra podem ser inseridos simplesmente pressionando "F9" ou usando a opção do menu "Executar" → "Inserindo / removendo ponto de quebra".

Após inserir o ponto de quebra, o ponto "colorido" e a linha serão destacados em VERMELHO como mostrado abaixo -

Método Atalho Descrição
Entrar F11 Usado para executar cada etapa. Passa para a Função / Ação e executa linha por linha. Ele faz uma pausa em cada linha após a execução.
Passar por cima F10 Usado para passar por cima da função. Step Over executa apenas a etapa atual no documento ativo.
Sair Shift + F11 Depois de entrar na função, você pode usar o comando Step Out. Step Out continua a execução até o final da função e, em seguida, pausa a sessão de execução na próxima linha.

Opções no Break Point

Várias opções no Break Point podem ser acessadas navegando pelo menu 'Run'.

Sr. Não. Atalho e descrição
1

F9

Inserir / Remover BreakPoint

2

Ctrl+F9

Habilitar / Desabilitar BreakPoint

3

Ctrl+Shift+F9

Limpar todos os pontos de interrupção

4

Use Only Menu

Ativar / desativar todos os BreakPoints

Painel de Depuração

A seguir estão os painéis na janela de depuração -

  • Output - Esta guia exibe todas as saídas das declarações de impressão.

  • Watch - Esta guia exibe a saída booleana da expressão dada.

  • LocalVariables - Esta guia exibe a saída das variáveis ​​locais.

Exemplo

O painel de observação mostra a expressão de saída conforme mostrado abaixo -

O painel de variáveis ​​locais mostra os valores mantidos pelas variáveis ​​locais conforme mostrado abaixo -

Existem várias maneiras de lidar com erros no QTP. Existem três tipos de erros possíveis, um encontraria ao trabalhar com QTP. Eles são -

  • Erros de sintaxe
  • Erros Lógicos
  • Erros de tempo de execução

Tipos de Erro

Erros de sintaxe

Os erros de sintaxe são os erros de digitação ou uma parte do código que não está de acordo com a gramática da linguagem de script VB. Os erros de sintaxe ocorrem no momento da compilação do código e não podem ser executados até que os erros sejam corrigidos.

Para verificar a sintaxe, use o atalho de teclado Ctrl + F7 e o resultado é exibido conforme mostrado abaixo. Se a janela não for exibida, pode-se navegar até "Exibir" → "Erros".

Erros Lógicos

Se o script estiver sintaticamente correto, mas produzir resultados inesperados, será conhecido como erro lógico. O erro lógico geralmente não interrompe a execução, mas produz resultados incorretos. Erros lógicos podem ocorrer devido a vários motivos, a saber: suposições erradas ou mal-entendidos sobre o requisito e, às vezes, lógicas de programa incorretas (usando do-while em vez de do-until) ou loops infinitos.

Uma das maneiras de detectar um erro lógico é realizar revisões por pares e também verificar o arquivo de saída / arquivo de resultado QTP para garantir que a ferramenta funcionou como deveria.

Erros de tempo de execução

Como o nome indica, esse tipo de erro ocorre durante o tempo de execução. A razão para esse tipo de erro é que o script que tenta realizar algo não consegue e o script geralmente para, pois não consegue continuar com a execução. Exemplos clássicos para erros de tempo de execução são -

  • Arquivo NÃO encontrado, mas o script está tentando ler o arquivo
  • Objeto NÃO encontrado, mas o script está tentando agir naquele objeto específico
  • Dividindo um número por zero
  • Índice de matriz fora dos limites ao acessar elementos de matriz

Tratamento de erros de tempo de execução

Existem várias maneiras de lidar com erros no código.

1. Using Test Settings- O tratamento de erros pode ser definido nas configurações de teste navegando até "Arquivo" >> "Configurações" >> guia "Executar" conforme mostrado abaixo. Podemos selecionar qualquer uma das configurações especificadas e clicar em "OK".

2. Using On Error Statement - A instrução 'On Error' é usada para notificar o mecanismo VBScript das intenções de lidar com os erros de tempo de execução por um testador, em vez de permitir que o mecanismo VBScript exiba mensagens de erro que não são amigáveis ​​ao usuário.

  • On Error Resume Next - On Error Resume Next informa o mecanismo VBScript para processar a execução da próxima linha de código quando um erro for encontrado.

  • On error Goto 0 - Isso ajuda os testadores a desligar o tratamento de erros.

3. Using Err Object - O objeto Error é um objeto embutido no VBScript que captura o número do erro em tempo de execução e a descrição do erro com os quais podemos depurar o código facilmente.

  • Err.Number- A propriedade Number retorna ou define um valor numérico especificando um erro. Se o valor de Err.Number for 0, não ocorreu nenhum erro.

  • Err.Description - A propriedade Descrição retorna ou define uma breve descrição sobre um erro.

  • Err.Clear - O método Clear redefine o objeto Err e limpa todos os valores anteriores associados a ele.

Exemplo

'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- As instruções de saída podem ser usadas junto com o objeto Err para sair de um teste, ação ou iteração com base no valor Err.Number. Vamos ver cada uma dessas instruções Exit em detalhes.

  • ExitTest - Sai de todo o teste QTP, independentemente das configurações de iteração do tempo de execução.

  • ExitAction - Sai da ação atual.

  • ExitActionIteration - Sai da iteração atual da ação.

  • ExitTestIteration - Sai da iteração atual do teste QTP e prossegue para a próxima iteração.

5. Recovery Scenarios - Ao encontrar um erro, os cenários de recuperação são acionados com base em certas condições e são tratados em detalhes em um capítulo separado.

6. Reporter Object- O objeto Reporter nos ajuda a relatar um evento para os resultados da corrida. Isso nos ajuda a identificar se a ação / etapa em questão é aprovação / reprovação.

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

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

Cenários de recuperação

Ao executar os scripts QTP, podemos obter alguns erros inesperados. Para recuperar os testes e continuar executando o restante do script a partir desses erros inesperados, são usados ​​os Cenários de Recuperação. O Recovery Scenario Manager pode ser acessado navegando até "Recursos" → Recovery Scenario Manager conforme mostrado abaixo -

Etapas para criar um cenário de recuperação

Step 1- Clique no botão "Novo" Cenário de Recuperação; o Assistente de cenário de recuperação é aberto conforme mostrado abaixo -

Step 2- Escolha o evento Trigger. Corresponde ao evento, que pode surgir em qualquer um dos quatro eventos a seguir -

  • Janela de pop-up
  • Estado do Objeto
  • Erro de execução de teste
  • Falha de aplicativo

Step 3- A janela Operações de recuperação é aberta. A operação de recuperação pode realizar qualquer uma das seguintes operações, conforme mostrado na imagem abaixo -

Step 4 - Depois de especificar a operação de recuperação apropriada, precisamos especificar a operação de pós-recuperação também, conforme mostrado abaixo -

Step 5 - Depois de especificar a operação pós-recuperação, o cenário de recuperação deve ser nomeado e adicionado ao teste para que possa ser ativado.

Step 6 - A criação do cenário de recuperação está concluída e precisa ser mapeada para o teste atual marcando a opção "Adicionar cenário ao teste atual" e clicando em "Concluir".

Step 7 - O cenário de recuperação adicionado será conforme mostrado abaixo e clique no botão "Fechar" para continuar.

Step 8- Depois de clicar no botão Fechar, o QTP solicitará que o usuário salve o cenário de recuperação criado. Ele será salvo com a extensão .qrs e o assistente será fechado.

Verificação

O cenário de recuperação criado deve fazer parte do teste agora e pode ser verificado navegando até "Arquivo" → "Configurações" → Guia "Recuperação".

As variáveis ​​de ambiente QTP são tipos especiais de variáveis ​​que podem ser acessadas por todas as ações, bibliotecas de funções e cenários de recuperação. Existem variáveis ​​de ambiente embutidas para Windows que estão disponíveis para todos os aplicativos em execução naquele sistema específico, mas as variáveis ​​de ambiente QTP estão disponíveis apenas para aquele script de teste específico durante o tempo de execução.

Tipos de variáveis ​​de ambiente

Built-in Environment Variables- fornece uma gama de parâmetros de ambiente que podem fornecer informações como o nome do teste, o nome da ação, o caminho do teste, o nome do host local, o nome do sistema operacional, o tipo e sua versão. Os nomes das variáveis ​​de ambiente podem ser acessados ​​navegando até "Arquivo" → "Configurações de teste" → Guia "Ambiente".

User defined Internal- As variáveis ​​definidas pelo usuário podem ser salvas selecionando "Definido pelo usuário" na janela da guia Ambiente. O botão "+" é clicado para inserir o nome e o valor do parâmetro conforme mostrado abaixo -

User Defined External- Variáveis ​​definidas pelo usuário podem ser armazenadas em um arquivo externo como um arquivo .xml e podem ser carregadas no teste conforme mostrado na figura abaixo. Ele também pode ser carregado dinamicamente durante o tempo de execução, conforme explicado abaixo em um dos exemplos.

Variáveis ​​de ambiente - métodos suportados

1. ExternalFileName Property- Retorna o nome do arquivo de variável de ambiente externo carregado especificado na guia Ambiente da caixa de diálogo Configurações de teste. Se nenhum arquivo de variável de ambiente externo for carregado, esta propriedade retornará uma string vazia.

x = Environment.ExternalFileName 
print x

2. LoadFromFile Method- Carrega o arquivo de variável de ambiente especificado (.xml) dinamicamente durante o tempo de execução. Ao usar este método, as variáveis ​​de ambiente não precisam ser adicionadas manualmente na guia Ambiente.

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

3. Value Property- Recupera o valor das variáveis ​​de ambiente. Também podemos definir o valor das variáveis ​​de ambiente interno definidas pelo usuário usando esta propriedade.

' 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 o script, arquivos de biblioteca são adicionados ao Script QTP. Ele contém declaração de variável, funções, classes, etc. Eles permitem a reutilização que pode ser compartilhada entre os scripts de teste. Eles são salvos com uma extensão .vbs ou .qfl

Um novo arquivo de biblioteca pode ser criado navegando até "Arquivo" >> "Biblioteca de funções".

Associando Bibliotecas de Funções

Method 1- Usando a opção "Arquivo"> ​​"Configurações"> Recursos> Biblioteca de Funções Associadas. Clique no botão "+" para adicionar o arquivo da Biblioteca de Funções e adicione-o usando o caminho real ou caminho relativo, conforme mostrado abaixo -

Method 2 - Usando o método ExecuteFile.

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

Method 3 - Usando o método LoadFunctionLibrary.

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

Method 4- Automation Object Model (AOM) - É um mecanismo com o qual podemos controlar várias operações QTP fora do QTP. Usando AOM, podemos iniciar o QTP, abrir o teste, associar bibliotecas de funções, etc. O seguinte VbScript deve ser salvo com extensão .vbs e, após a execução do mesmo, o QTP será iniciado e o teste começará a ser executado. O AOM será discutido em detalhes nos 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

Resultado dos testes

A janela de resultados do teste nos fornece informações suficientes para mostrar as etapas aprovadas, reprovadas, etc. A janela de resultados é aberta automaticamente após a execução do teste (conforme as configurações padrão). As seguintes informações são exibidas -

  • Passos Passados
  • As etapas falharam
  • Parâmetros de Ambiente
  • Estatísticas Gráficas

Operações realizadas nos resultados do teste

Convertendo Resultados em HTML

Na janela do Visualizador de resultados, navegue até "Arquivo" → "Exportar para arquivo". A caixa de diálogo Exportar resultados da execução abre conforme mostrado abaixo -

Podemos escolher o tipo de relatório a ser exportado. Podem ser resultados curtos, resultados detalhados ou mesmo, podemos selecionar nós. Depois de selecionar o nome do arquivo e exportá-lo, o arquivo é salvo como arquivo .HTML

Filtrando os resultados

Os resultados podem ser filtrados com base no status, tipo de nó e iterações. Ele pode ser acessado usando o botão Filtrar na "Janela de resultados do teste".

Elevando Defeitos

Os defeitos podem ser registrados no QC diretamente do painel da janela de resultados do teste acessando "Ferramentas" → "Adicionar defeito" que abre a conexão com o ALM conforme mostrado abaixo -

Resultado dos testes

A janela de resultados de teste automático pode ser configurada em "Ferramentas" → "Opções" → Guia "Executar sessões". Podemos desligá-lo, se necessário, e também podemos ligar "Exportar resultados automaticamente quando a sessão terminar".

A captura de tela ou o filme podem ser gravados com base nas configurações. O mesmo pode ser configurado em "Ferramentas" → "Opções" → Guia "Captura de tela". Podemos salvar a captura de tela ou filmes com base nas três condições a seguir -

  • Para erros
  • Always
  • Para erros e avisos

Existem vários objetos GUI, com os quais o QTP interage, durante a execução do script. Conseqüentemente, é importante conhecer os métodos básicos para os principais objetos da GUI com os quais seremos capazes de trabalhar com eficácia.

Trabalhando com Caixa de Texto

A seguir estão os métodos com os quais acessamos a caixa de texto durante o tempo de execução -

  • Set - Ajuda o testador a definir valores na caixa de texto

  • Click - Clica na caixa de texto

  • SetSecure - Usado para definir o texto nas caixas de senha com segurança

  • WaitProperty - Espera até que o valor da propriedade se torne verdadeiro

  • Exist - Verifica a existência da Caixa de Texto

  • GetROProperty("text") - Obtém o valor da caixa de texto

  • GetROProperty("Visible") - Retorna um valor booleano se visível

Exemplo

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

Trabalho com caixa de seleção

A seguir estão alguns dos principais métodos com os quais se pode trabalhar com Check Box -

  • Set - Ajuda o testador a definir o valor da caixa de seleção "ON" ou "OFF"

  • Click- Clica na caixa de seleção. Até marca ON ou OFF, mas o usuário não terá certeza sobre o status

  • WaitProperty - Espera até que o valor da propriedade se torne verdadeiro

  • Exist - Verifica a existência da caixa de seleção

  • GetROProperty("name") - Obtém o nome da caixa de seleção

  • GetROProperty("Visible") - Retorna um valor booleano se visível

Exemplo

'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

Trabalhando com o botão de rádio

A seguir estão alguns dos principais métodos com os quais se pode trabalhar com o botão de rádio -

  • Select(RadioButtonName) - Ajuda o testador a definir a caixa de rádio "LIGADA"

  • Click- Clica no botão de rádio. Mesmo botão de rádio LIGADO ou DESLIGADO, mas o testador não consegue obter o status

  • WaitProperty - Espera até que o valor da propriedade se torne verdadeiro

  • Exist - Verifica a existência do botão de rádio

  • GetROProperty("name") - Obtém o nome do botão de rádio

  • GetROProperty("Visible") - Retorna um valor booleano se visível

Exemplo

'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

Trabalhando com a caixa de combinação

A seguir estão alguns dos principais métodos com os quais se pode trabalhar com a caixa de combinação -

  • Select(Value) - Ajuda o testador a selecionar o valor do ComboBox

  • Click - Clica no objeto

  • WaitProperty - Espera até que o valor da propriedade se torne verdadeiro

  • Exist - Verifica a existência de Combo Box

  • GetROProperty("Text") - Obtém o valor selecionado da caixa de combinação

  • GetROProperty("all items") - Retorna todos os itens na caixa de combinação

  • GetROProperty("items count") - Retorna o número de itens na caixa de combinação

Exemplo

'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

Trabalhando com botões

A seguir estão alguns dos principais métodos com os quais se pode trabalhar com botões -

  • Click - Cliques no botão

  • WaitProperty - Espera até que o valor da propriedade se torne verdadeiro

  • Exist - Verifica a existência do botão

  • GetROProperty("Name") - Obtém o nome do botão

  • GetROProperty("Disabled") - Retorna um valor booleano se ativado / desativado

Exemplo

'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

Trabalho com webTables

No aplicativo baseado na web de hoje, webTables se tornaram muito comuns e os testadores precisam entender como o WebTables funciona e como executar uma ação em webTables. Este tópico o ajudará a trabalhar com webTables de maneira eficaz.

Sr. Não. Declaração e descrição
1

if statement

A if declaração consiste em uma expressão booleana seguida por uma ou mais declarações.

2

if...else statement

A if elsedeclaração consiste em uma expressão booleana seguida por uma ou mais declarações. Se a condição for verdadeira. As declarações sobifas declarações são executadas. Se a condição for falsa.Else parte do script é executado

3

if..elseif...else statement

Uma declaração if seguida por uma ou mais Elseif declarações, que consistem em expressões booleanas seguidas por um opcional else statement, que é executado quando todas as condições se tornam falsas.

4

nested if statements

Um se ou elseif declaração dentro de outra if ou elseif afirmações).

5

switch statement

UMA switch declaração permite que uma variável seja testada para igualmente uma lista de valores.

  • html id - Se a tabela tiver uma tag de id, é melhor usar essa propriedade.

  • innerText - Título da mesa.

  • sourceIndex - Busca o índice de origem da tabela

  • ChildItemCount - Obtém o número de ChildItems presentes na linha especificada

  • RowCount - Obtém o número de linhas na tabela

  • ColumnCount - Obtém o número de colunas na tabela

  • GetcellData - Obtém o valor da célula com base na coluna e índice de linha

Exemplo

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

O que são objetos virtuais?

Às vezes, um aplicativo em teste pode conter objetos de janela padrão, mas não são reconhecidos pelo QTP. Nessas circunstâncias, os objetos podem ser definidos como objetos virtuais (VO) do tipo botão, link etc. para que as ações do usuário possam ser simuladas nos objetos virtuais durante a execução.

Exemplo

Digamos que estamos automatizando um cenário no Microsoft Word. Eu ativei o aplicativo MS Word e clico em qualquer ícone da faixa de opções. Por exemplo, na faixa de opções, a guia Inserir é clicada e, em seguida, o usuário clica no botão "Imagem". Um botão é reconhecido como WinObject; portanto, a importância dos objetos virtuais é pronunciada.

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

Criando um objeto virtual

Step 1 - Em tais cenários, os objetos virtuais são criados usando o Gerenciador de objeto virtual ou Novo objeto virtual em "Ferramentas" >> "Objeto virtual" >> "Novo objeto virtual" e clique no botão "Avançar".

Step 2 - Mapeie o objeto em relação ao tipo de classe e clique em "Avançar".

Step 3- Clique no botão "Marcar objeto". Um cursor em forma de cruz aparecerá e marcará o objeto que você deseja mapear e clique em "Avançar".

Step 4 - Selecione o pai do objeto Virtual e clique em "Avançar".

Step 5 - Nomeie a coleção na qual deseja armazenar o objeto virtual e clique em "Concluir".

Gerenciador de Objeto Virtual

O Gerenciador de objetos virtuais gerencia as coleções de objetos virtuais. Os testadores podem adicionar ou excluir os objetos virtuais do gerenciador de objetos virtuais.

Navegação para o Gerenciador de objetos virtuais: "Ferramentas" >> "Gerenciador de objetos virtuais" como mostrado abaixo -

Usando objetos virtuais

Depois de criar os Objetos Virtuais, o objeto criado pode ser usado conforme mostrado abaixo -

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

Limitações de objetos virtuais

  • QTP não oferece suporte a objetos virtuais para gravação analógica ou de baixo nível.

  • Os pontos de verificação não podem ser adicionados a objetos virtuais.

  • Objetos virtuais não são controlados pelo Repositório de objetos.

  • Embora mapeamos um objeto para uma classe particular (botão ou lista), todos os métodos dos objetos nativos não são suportados por objetos virtuais.

  • O Object Spy não pode ser usado no Virtual Object.

  • A execução do teste falhará se a resolução da tela mudar conforme as coordenadas mudam.

  • A janela do aplicativo deve ter o mesmo tamanho de tela para que os objetos virtuais sejam capturados corretamente.

Como tal, o QTP não fornece nenhum suporte embutido para se conectar ao banco de dados, no entanto, os testadores VBScript serão capazes de se conectar e interagir com os bancos de dados usando objetos ADODB.

ADODB tem 4 propriedades ou métodos com os quais poderemos trabalhar com os bancos de dados. Eles são -

  • ADODB.Connection - Usado para estabelecer uma conexão com o banco de dados

  • ADODB.Command - Usado para executar um comando SQL (consultas ou procedimentos armazenados)

  • ADODB.Fields - Usado para buscar uma coluna específica de um conjunto de registros após a execução de uma consulta / procedimento armazenado

  • ADODB.Recordset - Usado para buscar dados de um banco de dados

Como se conectar ao banco de dados?

Os bancos de dados podem ser conectados usando strings de conexão. Cada banco de dados difere na maneira como nos conectamos a eles. No entanto, as cadeias de conexão podem ser construídas com a ajuda de www.connectionstrings.com

Vamos ver como se conectar ao banco de dados com os seguintes parâmetros -

  • Database Type - SERVIDOR MSSQL

  • Server Name - SQLEXPRESS

  • Database Name - Teste

  • User Id - sa

  • password - Senha123

A saída da consulta é mostrada no SQL Server Management Studio da seguinte forma -

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

Ao executar o script acima, a saída é mostrada na caixa de mensagem conforme mostrado abaixo -

XML é uma linguagem de marcação projetada para armazenar dados em um formato que pode ser lido por humanos e por máquina. Usando XML, os dados também podem ser facilmente trocados entre sistemas de computador e banco de dados.

XML de amostra e seus elementos-chave são representados abaixo -

Acessando 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 dois dados XMLs -

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

Os scripts QTP podem ser executados apenas se os objetos estiverem presentes no Repositório de objetos. As descrições dos objetos são criadas usando a programação descritiva -

  • Quando os testadores desejam realizar uma operação em um objeto que não está presente no repositório de objetos

  • Quando os objetos no aplicativo são muito dinâmicos por natureza.

  • Quando o Repositório de objetos cresce muito, isso resulta em um desempenho ruim conforme o tamanho do Repositório de objetos aumenta.

  • Quando a estrutura é construída, de forma que foi decidido não usar o Repositório de Objetos.

  • Quando os testadores desejam realizar uma ação no aplicativo em tempo de execução sem ter o conhecimento das propriedades exclusivas do objeto.

Sintaxe

Existem duas maneiras de criar scripts usando a técnica de Programação Descritiva. Eles são -

  • Objetos de descrição
  • Descrição Strings

Objetos de descrição

O script é desenvolvido usando objetos de descrição que dependem das propriedades usadas e seus valores correspondentes. Então, essas descrições são usadas para construir o 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

Descrição Strings

A descrição dos objetos é desenvolvida usando as propriedades e valores como strings conforme mostrado abaixo.

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

Objetos Filhos

QTP fornece o método ChildObjects, que nos permite criar uma coleção de objetos. Os objetos pais precedem 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 Ordinais

A programação descritiva é usada para escrever o script com base em identificadores ordinais, o que permitirá ao QTP agir sobre esses objetos quando dois ou mais objetos tiverem as mesmas propriedades.

' 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

O próprio QTP pode ser automatizado usando a interface COM fornecida pelo HP-QTP. O modelo de objeto de automação é um conjunto de objetos, métodos e propriedades que ajudam os testadores a controlar as definições de configuração e executar os scripts usando a interface QTP. As principais configurações / ações que podem ser controladas (mas não limitadas a) estão listadas abaixo -

  • Carrega todos os suplementos necessários para um teste
  • Torna QTP visível durante a execução
  • Abre o teste usando o local especificado
  • Bibliotecas de funções de associados
  • Especifica o tempo limite de sincronização de objeto comum
  • Iniciar e terminar a iteração
  • Ativar / desativar identificação inteligente
  • Nas configurações de erro
  • Caminho da tabela de dados
  • Configurações do cenário de recuperação
  • Configurações de rastreamento de log

O QTP 11.5x fornece uma documentação exclusiva sobre o modelo de objeto de automação que pode ser consultado navegando até "Iniciar" >> "Todos os programas" >> "HP Software" >> "HP Unified Functional Testing" >> "Documentação" >> "Unificado Referência de automação de teste funcional ".

Gerar script AOM

Um testador pode gerar um script AOM a partir do próprio QTP, usando a opção "Gerar Script". Navegue até "Executar" >> "Configurações" >> guia "Propriedades" >> "Gerar Script" conforme mostrado abaixo -

Exemplo

' 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

Um Framework define um conjunto de diretrizes / práticas recomendadas que impõem um conjunto de padrões, o que torna fácil o uso para os usuários finais trabalharem. Existem diferentes tipos de estruturas de automação e os mais comuns estão listados abaixo -

  • Estrutura baseada em palavras-chave
  • Estrutura baseada em dados
  • Estrutura Híbrida

Estrutura baseada em palavras-chave

O teste orientado por palavras-chave é um tipo de estrutura de teste de automação funcional que também é conhecido como teste orientado por tabela ou teste baseado em palavras de ação.

Nos testes baseados em palavras-chave, usamos um formato de tabela, geralmente uma planilha, para definir palavras-chave ou palavras de ação para cada função que gostaríamos de executar.

Vantagens

  • É mais adequado para um testador iniciante ou não técnico.

  • Permite escrever testes de uma maneira mais abstrata usando essa abordagem.

  • O teste orientado por palavra-chave permite que a automação seja iniciada mais cedo no SDLC, mesmo antes de uma compilação estável ser entregue para teste.

  • Existe um alto grau de reutilização.

Desvantagens

  • O investimento inicial no desenvolvimento das palavras-chave e suas funcionalidades relacionadas pode demorar mais.

  • Isso pode atuar como uma restrição para os testadores habilitados tecnicamente.

Estrutura baseada em dados

O teste baseado em dados é a criação de scripts de teste onde os dados de teste e / ou valores de saída são lidos dos arquivos de dados em vez de usar os mesmos valores embutidos em código cada vez que o teste é executado. Dessa forma, os testadores podem testar como o aplicativo lida com várias entradas de forma eficaz. Pode ser qualquer um dos seguintes arquivos de dados -

  • datapools
  • Arquivos Excel
  • Objetos ADO
  • Arquivos CSV
  • Fontes ODBC

Diagrama de fluxo

O teste orientado a dados pode ser melhor compreendido pelo diagrama a seguir -

Vantagens

  • Estrutura baseada em dados resulta em menos quantidade de código
  • Oferece maior flexibilidade para manter e corrigir os problemas de script
  • Os dados de teste podem ser desenvolvidos

Desvantagens

  • Cada script precisa ser diferente para entender diferentes conjuntos de dados.

Estrutura Híbrida

Estrutura híbrida é uma combinação de estrutura orientada por palavra-chave e orientada por dados que pode ser melhor descrita usando o diagrama de fluxo a seguir.

Fatores que afetam

A seguir estão os parâmetros que devem ser levados em consideração ao desenvolver a estrutura. Os fatores que afetam estão listados abaixo -

  • Os arquivos de estrutura devem oferecer suporte a software de controle de versão, como SVN, CVS, MS Source Control

  • O framework deve suportar a execução de scripts em diferentes ambientes viz- QA, SAT, DEV

  • Após as alterações do objeto, os scripts devem ser executados com alterações mínimas.

  • O Framework deve se configurar e cuidar dos pré-requisitos, como a criação de pastas / bancos de dados.

  • O framework deve ter uma estrutura de relatórios robusta para que os problemas no script / aplicativo possam ser facilmente identificados

  • O framework deve ter maior flexibilidade para que seja fácil de usar

  • O framework deve seguir os padrões de codificação para que os arquivos, funções e histórico de mudanças sejam mantidos corretamente.

No próximo capítulo, aprenderemos como projetar uma estrutura simples.

Vamos projetar uma estrutura simples tomando um aplicativo de amostra. Vamos automatizar alguns cenários do aplicativo em teste e escrever funções reutilizáveis.

O aplicativo de amostra em teste é "Calculator", um aplicativo padrão que está disponível como parte do Windows. Vamos agora criar diferentes componentes de uma estrutura. Aqui, desenvolveremos uma estrutura híbrida e usaremos o Repositório de objetos, pois é um aplicativo bastante simples. No entanto, essa estrutura também pode ser dimensionada para oferecer suporte a um aplicativo complexo.

A estrutura de pastas do Framework é mostrada abaixo -

Explicação da estrutura da pasta -

  • Master Driver Script- O Script que conduz toda a execução. Ele executa os pré-requisitos e as configurações iniciais necessárias para a execução.

  • Library Files - As funções associadas que formam a Biblioteca de funções.

  • Data Table - Os dados de teste necessários para a execução.

  • Object Repository - Os objetos e suas propriedades que permitem ao QTP reconhecer os objetos perfeitamente.

  • Execution Logs - A pasta contém o arquivo de log de execução com funções do usuário e histórico de execução de funções.

Master Driver Script

'= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
' 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 =====================

Arquivos de biblioteca

As funções da calculadora são gravadas em um arquivo de função separado salvo com a extensão .qfl ou .vbs. Essas funções são reutilizáveis ​​em ações.

'  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   ============================= '

O outro arquivo de biblioteca, que é 'common_utils.qfl', contém as funções, o que nos permite gravar a saída em um arquivo 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 =====================

Repositório de Objetos

O repositório de objetos possui todos os objetos sobre os quais o usuário estaria agindo. A imagem abaixo mostra a lista de todos os objetos adicionados ao repositório com o nome calc.tsr

Tabela de dados

DataTable contém as palavras-chave, que conduzem os testes e também testa os dados com os quais o QTP atuará nos objetos.

O Registro de Execução

O arquivo de log de execução ou arquivo de saída contém ações do usuário e log de função, o que permitirá que os testadores depurem em caso de falhas de 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: ## # # # # # # # # # # # # # # # # # # # # # # # # # 
# # # # # #