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