7
respostas

[Dúvida] Usando CSV para massa de dados

No exemplo usado, a biblioteca FakerLibray foi usada, porém, na maioria dos casos de automatização de testes, um CSV é muito mais útil. criei um script de testes usando DataDriver , porém ele apresentou alguns erros. Segue meu projeto abaixo:

Estrutura de diretórios

Diretório Principal
  ├── resources
  │   ├── main.robot
  │   ├── massas.csv
  │   ├── pages
  │   │   └── cadastrar.robot
  │   └── setup_teardown
  │       └── setupteardown.robot
  └── testes
      ├── login.robot
      └── cadastro.robot

main.robot

*** Settings ***
Library    SeleniumLibrary
Library    DataDriver    file=user_data.csv
Resource    shared/setup_teardown.robot 
Resource    pages/busca.robot   

cadastrar.robot

  *** Settings ***
Resource    ../main.robot

*** Variables ***
${REG_EMAIL}       id:reg_email
${REG_PASSWORD}    id:reg_password
${Cadastrar}       xpath://*[@id="customer_login"]/div[2]/form/p[3]/input[3] 
${Username}        id:username
${Password}        id:password
${Login}           name:login    
${TEXT_ELEMENT}    xpath://p[contains(text(), 'Hello')]

*** Keywords ***
Dado que preecha o campo de cadastro com dados válidos
    [Arguments]    ${email}    ${password}
    Input Text    ${REG_EMAIL}    ${email}
    Input Text    ${REG_PASSWORD}    ${password}
    Click Element    ${Cadastrar}
    

Dado que preecha os campos de login com dados válidos
    [Arguments]    ${email}    ${password}
    Input Text    ${Username}    ${email}
    Input Text    ${Password}    ${password}
    Click Element    ${Login}
    
Então verifico mensagem de login
    Wait Until Element Is Visible    ${TEXT_ELEMENT}    timeout=10s
    Element Should Contain    ${TEXT_ELEMENT}    Hello

setupteardown.robot

*** Settings ***
Resource    ../main.robot

*** Keywords ***
Dado que acesse Pratice Automation Test
    Open Browser    url=https://practice.automationtesting.in/    browser=Chrome
    Maximize Browser Window
    Sleep    2s
    Click Element    xpath://*[@id="menu-item-50"]/a

Então fazer logout e fechar o navegador 
    Click Element    xpath://*[@id="page-36"]/div/div[1]/div/p[1]/a
    Close Browser

cadastro.robot

*** Settings ***
Resource    ../resources/main.robot
Test Setup    Dado que acesse Pratice Automation Test
Test Teardown    Então fazer logout e fechar o navegador 


*** Test Cases ***

Cadastrar massa corretamente
    Dado que preecha o campo de cadastro com dados válidos
    Então verifico mensagem de login

login.robot

*** Settings ***
Resource    ../resources/main.robot
Test Setup    Dado que acesse Pratice Automation Test
Test Teardown    Então fazer logout e fechar o navegador 

*** Test Cases ***
Login Correto
    Dado que preecha os campos de login com dados válidos
    Então verifico mensagem de login

problemas no código Insira aqui a descrição dessa imagem para ajudar na acessibilidade

7 respostas

Olá Rafael, tudo joia?

Pelo que você descreveu e pela imagem de erro que você compartilhou, parece que os argumentos email e password não estão sendo passados corretamente para os seus casos de teste no cadastro.robot e login.robot.

Para resolver isso, é importante verificar se o DataDriver está configurado corretamente e se o arquivo CSV está sendo lido corretamente. Aqui estão alguns passos que podem ajudar:

  1. Verificar o Caminho do Arquivo CSV: Certifique-se de que o caminho para o arquivo CSV está correto no seu arquivo main.robot. No seu exemplo, você está usando file=user_data.csv, mas o arquivo CSV parece estar nomeado como massas.csv e está dentro da pasta resources.

    Altere a linha no main.robot para:

    Library    DataDriver    file=resources/massas.csv
    
  2. Verificar o Conteúdo do CSV: Certifique-se de que o arquivo massas.csv contém os dados corretos e que os cabeçalhos estão nomeados corretamente. O arquivo CSV deve ter a seguinte estrutura:

    email,password
    test@example.com,123456
    another@example.com,abcdef
    
  3. Uso de Variáveis no Teste: Certifique-se de que os casos de teste estão utilizando as variáveis corretamente. No seu caso, o cadastro.robot e login.robot devem referenciar os argumentos email e password que vêm do DataDriver.

    Aqui está um exemplo de como deve ficar o cadastro.robot:

    *** Settings ***
    Resource    ../resources/main.robot
    Test Setup    Dado que acesse Pratice Automation Test
    Test Teardown    Então fazer logout e fechar o navegador 
    
    *** Test Cases ***
    Cadastrar massa corretamente
        [Template]    Dado que preecha o campo de cadastro com dados válidos
        ${email}    ${password}
        Então verifico mensagem de login
    

    E o login.robot:

    *** Settings ***
    Resource    ../resources/main.robot
    Test Setup    Dado que acesse Pratice Automation Test
    Test Teardown    Então fazer logout e fechar o navegador 
    
    *** Test Cases ***
    Login Correto
        [Template]    Dado que preecha os campos de login com dados válidos
        ${email}    ${password}
        Então verifico mensagem de login
    

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi Armando, tudo certo, e com você? tentei colocar da maneira que sugeriu Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

esses erros se apresentaram.

esse é meu csv (massas.csv)

email,password
spaghetti@carbonara.com,Spaghetti@123
penne@arrabiata.com,Penne#456
linguine@pesto.com,Linguine$789
fettuccine@alfredo.com,Fettuccine%012
ravioli@bolognese.com,Ravioli*345
tortellini@primavera.com,Tortellini&678
cannelloni@napoletana.com,Cannelloni@901
lasagna@bianca.com,Lasagna#234
gnocchi@gorgonzola.com,Gnocchi$567
tagliatelle@puttanesca.com,Tagliatelle%890

e aqui está a forma que minhas variáveis estão setadas e os scripts estruturados

*** Settings ***
Resource    ../main.robot

*** Variables ***
${REG_EMAIL}       id:reg_email
${REG_PASSWORD}    id:reg_password
${Cadastrar}       xpath://*[@id="customer_login"]/div[2]/form/p[3]/input[3] 
${Username}        id:username
${Password}        id:password
${Login}           name:login    
${TEXT_ELEMENT}    xpath://p[contains(text(), 'Hello')]

*** Keywords ***
Dado que preecha o campo de cadastro com dados válidos
    [Arguments]    ${email}    ${password}
    Input Text    ${REG_EMAIL}    ${email}    
    Input Text    ${REG_PASSWORD}    ${password}       
    Click Element    ${Cadastrar}
    

Dado que preecha os campos de login com dados válidos
    [Arguments]    ${email}    ${password}
    Input Text    ${Username}    
    Input Text    ${Password}       
    Click Element    ${Login}
    
Então verifico mensagem de login
    Wait Until Element Is Visible    ${TEXT_ELEMENT}    timeout=10s
    Element Should Contain    ${TEXT_ELEMENT}    Hello

main.robot também foi alterado

*** Settings ***
Library    SeleniumLibrary
Library    DataDriver    file=resources/massas.csv
Resource    shared/setup_teardown.robot 
Resource    pages/cadastrar.robot   

Bom dia, gostaria de saber se vou precisar esperar 1 mês para ter resposta no fórum do curso. obrigado

Bom dia, Rafael!

Peço desculpas por demorar para respondê-lo, foi erro meu, mas testei o seu código e trouxe uma solução para te ajudar na leitura do arquivo csv. O método Data Driver que você estava utilizando para a leitura não estava funcionando corretamente, seja por não localizar o arquivo, seja por não realizar a leitura. Uma alternativa a esse método, é usar a biblioteca rpaframework. Importante: Todo esse tutorial foi preparado utilizando a versão 3.10 do Python.

Instalação da biblioteca (demora um pouco a instalar, é normal):

pip install rpaframework

Testando a leitura do arquivo massas.csv em um arquivo a parte

Realizei esse teste em um arquivo a parte, por exemplo: leitura_csv.robot:

*** Settings ***
Library    RPA.Tables

*** Variables ***
${CSV_FILE}    massas.csv

*** Test Cases ***
Leitura do arquivo CSV
    # Carrega o arquivo CSV em uma tabela
    ${csv_data}=    Read Table From Csv    ${CSV_FILE}
    
    # Imprime cada linha da tabela
    FOR    ${csv_row}    IN    @{csv_data}
        Log To Console    ${csv_row}
    END

Neste caso, é importante que massas.csv e leitura_csv estejam na mesma pasta. Como resultado, teremos a impressão de todos os dados do csv na tela, como mostro na imagem abaixo:

Imagem que mostra os dados do csv no terminal

Obs: caso seja gerado algum erro de importação do arquivo, use o caminho completo da pasta, precedido por duas barras, por exemplo C:\\Users\\alura\\Downloads\\resources\\massas.csv

Leitura do arquivo massas.csv no projeto da aula

Como teriam que ser feitas várias alterações dentro do projeto original para implementar esse método de leitura, fiz as alterações e deixei neste repositório do github para que você possa usar como consulta. A lógica é:

  • Cadastrar o usuário do CSV.
  • Fazer logout.
  • Fazer login.
  • Verificar mensagem e "Hello".
  • Fazer logout novamente.
  • Repetir até acabar o CSV.

Deixo abaixo um GIF que ilustra o resultado do código:

GIF que mostra o resultado do código do repositório

Espero ter ajudado. Abraços e bons estudos!

Meu código foi feito todo em python 3.12 e todo projeto do curso foi em 3.11, sendo assim, essa solução não seria a ideal.

Oi Rafael!

A versão python 3.12 é recente, foi lançada ano passado (2 de outubro de 2023, menos de um ano), então, algumas bibliotecas de terceiros ainda não foram totalmente adaptadas para essa versão, por isso, o tutorial foi feito na versão 3.10. Mas, farei o tutorial para a versão 3.11.4 que é foi utilizada em aula e volto com o passo a passo.

Rafael,

Desinstalei o Python 3.10 e baixei a mesma versão da aula, 3.11.4, você pode baixar a mesma versão da aula clicando neste link e escolhendo a opção python-3.11.4.exe. Ao instalar a versão utilizada em aula, lembre-se de marcar Add Python to Path, como mostro abaixo:

Para confirmar se está com a versão recomendada em aula, digite:

python --version

Pronto, estamos com o mesmo ambiente da instrutora.

Agora, baixe o projeto com as alterações para suportar o arquivo csv neste link, clicando em download zip. Após baixar, descompacte a pasta, clicando com o botão direito sobre ela e selecionando a opção "extrair tudo".

Abra o Visual Studio Code, selecione "open folder" e selecione a pasta que foi descompactada. O nome da pasta será "robot-com-leitura-de-csv-main". Abra o terminal do Visual Studio Code e instale as bibliotecas:

pip install robotframework
pip install --upgrade robotframework-seleniumlibrary
pip install rpaframework

Essa última que instalamos é para lidarmos com o csv no código e demora em torno de 3 minutos para ser instalada.

Você precisará modificar no arquivo main.robot a linha 10, que possui o caminho do arquivo csv para o caminho do arquivo massas.csv que está no seu computador e colocar barras duplas para que o robot entenda o caminho corretamente. Por exemplo: C:\\Users\\alura\\Downloads\\resources\\massas.csv.

Além disso, se aparecer a mensagem na tela que já possuem registros com aquele e-mail, modifique o arquivo csv e coloque outros valores, por exemplo:

email,password
alura5@carbonara.com,alura@3547@123
teste5@arrabiata.com,teste#546#456

Para rodar o código, dentro da pasta teste, digite no terminal:

cd testes
robot cadastro.robot

Abaixo, uma imagem do terminal que mostra que o teste foi executado com sucesso:

Se por ventura ocorrer algum erro de elemento não encontrado, você pode aumentar o delay após apertar o botão de cadastro. Isso pode ser feito no arquivo cadastro.robot na linha 15, mudando de 3s para 6s.

Testa com a mesma versão da aula por favor, siga o passo a passo e me diga se funcionou o procedimento. Como eu te disse, a versão 3.12 é bem recente e por isso, algumas bibliotecas ainda não foram adaptadas para ela.

Fico à disposição.