[Tutorial] - Automatizando Testes com SAP e Visual Studio

Oi Pessoal,

neste tutorial vou demonstrar como automatizar teste SAP usando duas ferramentas:


  • SAP GUI Scripting: O SAP GUI Scripting é uma ferramenta gratuita disponível em todos os SAP GUI  a partir da versão 6.20 quando conectados em um ambiente SAP ECC 6.0 (ERP da SAP).
  • Microsoft Visual Studio 2010 ou 2012: Ferramenta de desenvolvimento que permite a criação de testes genéricos.


A criação de um teste automatizado com SAP e o Visual Studio começa na criação de um VBScript (Scritp Visual Basic). O que permite a criação deste VBScript é o SAP Gui Scripting.

Criando um VBScript com o SAP GUI Scripting

No exemplo abaixo será demonstrado como criar um VBScript para o cenário geração de uma NF-e (Nota Fiscal Eletrônica) com ICMS00 baseada em uma NF-e de referência.

1) Estando logado no SAP com o SAP Logon, clique no botão "Ajustar Layout Local" e em seguida clique na opção "Registro e Reprodução de Script".



2) Em seguida a tela de gravação e reprodução de Script será apresentada. Clique no botão "Mais" e clique no botão "..." para selecionar o local  onde o script será salvo:




3) Selecione o local onde deseja salvar o Script e não se esqueça de utilizar um nome que seja fácil de ser lembrado:


4) Clique no botão "Registrar Script":


5) Execute o cenário (exemplo de criação de uma Nota Fiscal Eletrônica).

5.1) Acesse a transação de criação de Nota Fiscal (J1B1n):



5.2) Adicione os dados da NF-e, não se esqueça de selecionar o menu "Nota Fiscal > Criar com referência", para adicionar o DOCNUM (identificador da NF-e) de referência.


5.3) Verifique os dados da NF-e e clique em Salvar.


5.4) Volte ao Menu inicial.


6) Finalize a criação de Script.



7) Se desejar clique no botão "Processar Script", selecione o Script que você criou anteriormente e observe a execução do teste.


8) Com isso o VBScritp já foi criado. Se desejar modificar o arquivo, acesse o local onde o arquivo foi salvo e o edite com a ferramenta que desejar. Neste caso, estou editando o arquivo no Notepad, mas é possível realizar através do Visual Studio:



Criando um Generic Test com VBScritp

A classe Generic Test (teste genérico) permite a manipulação de testes através de qualquer executável (.exe, .bat, .vbs etc) que o Windows possa gerenciar. Isso é interessante quando temos um ferramenta de terceiros criando executáveis que representam um Script de teste.

Neste exemplo, utilizaremos o VBScript gerado anteriormente, porém é possível utilizar diversos outros tipos de arquivos executáveis.

Para gerar um Generic Test com um VBScript, siga os passos abaixo:

1) Acesse o Visual Studio 2012 (ou 2010) e selecione o menu "File > New > Project".



2) Escolha o menu "Templates > Visual C# > Test" e então selecione no tipo de projeto "Unit Test Project". Dê o nome que for conveniente.




3) Se a classe "UnitTest1.cs" foi criada, a delete. E então clique com o botão direito sobre o projeto e selecione a opção "Add > Generic Test"



4) Selecione o VBScript criado anteriormente e clique no botão "Save".



5) Pronto, o Script está automatizado. Para executar o teste, clique no menu "Test > Run > All Tests".



6) Aguarde a finalização do teste e verifique os resultados.




Bom, é isso, espero que tenham gostado!

Esse formato de teste permite a criação de vários outros tipos de testes, por exemplo, um teste de carga onde o que está sendo testado é a capacidade de processamento de Notas Fiscais, ou ainda, um teste de aceitação de usuário relacionado com um Build automatizado, enfim, as possibilidades são infinitas.

Dúvidas??? Poste nos comentários!

See ya!!!




Sobre a ferramenta SAP GUI Scripting:

http://scn.sap.com/docs/DOC-8971

Sobre a classe Generic Test do Microsoft Visual Studio 2012.

http://msdn.microsoft.com/en-us/library/ms182622(v=vs.80)

Procurando uma empresa para lhe ajudar a migrar seus aplicativos para nuvem? Acesse: https://www.saguitech.com.br

Comentários

  1. Tua palestra também foi show, só faltou mais uns 20, 30 minutos né!!!
    xoxo
    Fernanda

    ResponderExcluir
  2. Interessante muito bom, fiz o passo a passo e funcionou. :)
    Só ficou uma duvida se eu quiser trabalhar com parâmetros, terei que editar o próprio script? Ou da para fazer no Generic Test ?

    ResponderExcluir
    Respostas
    1. Oi Tatiane, me desculpe pela demora. Você pode passar parâmetros dinâmicos para a sua automatização. Veja aqui: http://msdn.microsoft.com/en-us/library/ms182626.aspx busque por arguments

      Excluir
  3. Como vai Alan, tudo bem? Estou começando no mundo SAP agora, e gostei da sua explicação. Direta ao ponto. Eu tenho uma dúvida. Trabalho lançando CT manualmente (isso mesmo, não se assuste). Acredito que tenha um modo de automatizar o processo, copiando de uma planilha, inserindo as informações no sistema. Isso é possível? Desde já obrigado!

    ResponderExcluir
  4. Oi JR, é possível sim. Você pode usar arguments: http://msdn.microsoft.com/en-us/library/ms182626.aspx

    ResponderExcluir
  5. Olá Alan! Td bem?
    Cara, será que você consegue me ajudar no script seguinte?
    Estou tentando fazer ele pular os erros e continuar com as extensões dos materiais, mas quando há um que necessite de atualização de uma visão, ele para e não continua mais a lista do excel.
    If Not IsObject(application) Then
    Set SapGuiAuto = GetObject("SAPGUI")
    Set application = SapGuiAuto.GetScriptingEngine
    End If
    If Not IsObject(connection) Then
    Set connection = application.Children(0)
    End If
    If Not IsObject(session) Then
    Set session = connection.Children(0)
    End If
    If IsObject(WScript) Then
    WScript.ConnectObject session, "on"
    WScript.ConnectObject application, "on"
    End If
    Set xclapp = CreateObject("Excel.Application")
    Set xclwbk = xclapp.Workbooks.Open("F:\lista.xls")
    set xclsht = xclwbk.Sheets("Plan1")
    for i = 2 to xclapp.ActiveCell.SpecialCells(11).Row
    for j = 1 to xclapp.ActiveCell.SpecialCells(11).Column
    if j=1 then NM = xclsht.Cells(i,j).Value
    next
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/tbar[0]/okcd").text = "/nmm01"
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]/usr/ctxtRMMG1-MATNR").text = NM
    session.findById("wnd[0]/usr/cmbRMMG1-MBRSH").key = "O"
    session.findById("wnd[0]/usr/cmbRMMG1-MTART").key = "ZIBE"
    session.findById("wnd[0]/usr/cmbRMMG1-MTART").setFocus
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/tbar[0]/btn[20]").press
    session.findById("wnd[1]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
    session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP19/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2631/ctxtMFHM-PLANV").text = "000"
    session.findById("wnd[0]/usr/tabsTABSPR1/tabpSP19/ssubTABFRA1:SAPLMGMM:2000/subSUB2:SAPLMGD1:2631/ctxtMFHM-PLANV").caretPosition = 3
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[0]").sendVKey 0
    session.findById("wnd[1]/usr/btnSPOP-OPTION1").press
    warn = session.findById("wnd[0]/sbar").messagetype
    observacao = session.findById("wnd[0]/sbar").text
    if warn = "S" then
    xclsht.Cells(i,2).Value = "Passou"
    xclsht.Cells(i,3).Value = observacao
    xclwbk.Save
    else
    xclsht.Cells(i,2).Value = "Falhou"
    xclsht.Cells(i,3).Value = observacao
    xclwbk.Save
    end if
    next
    xclwbk.Save
    Set xclwbk = Nothing
    Set xclsht = Nothing
    xclapp.Quit
    set xclapp = Nothing
    msgbox " Operação finalizada! "

    Outra questão é se, ao invés de fazermos ele pular para tratar outro material, podemos pedir uma outra ação sobre este mesmo se determinada circunstância acontece?

    ResponderExcluir
  6. Muito bom, parabens pelo tutorial. transformei em macro do excell e estou usando a função para automatizar alguns processos e extração de relatórios, sem precisar fazer desenvolvimentos na ferramenta.

    ResponderExcluir
  7. O meu eu não consigo gravar o script, ele abre normal mais não salva o script na pasta que eu selecionei.

    Sabe o que pode seR?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

[Tutorial] Executando Code Metrics com Visual Studio

[Tutorial] Automatizando testes com o Visual Studio Manualmente