Pesquisar este blog

sábado, 8 de agosto de 2015

Criando uma classe Email para Report de problemas nos Testes.


   É muito útil você receber um Relatório mostrando o momento exato que aconteceu o problema/bug nos testes automatizados, para isso vamos fazer uma classe email, enviando para a mesma os parâmetros que desejamos receber, num eventual teste de estresse é essencial saber a duração, o tempo que durou a aplicação em um determinado teste de estresse/carga, para constar em nosso relatório. Como somos fera, vamos criar em Python o código de envio de email, criando uma conexão SMTP (Simple Mail Transfer Protocol) client session, o que quer dizer isso, bom vamos criar uma conta do google e ele  vai retransmitir mensagens enviadas para o nosso destinatário. 
   O legal de enviar um email de erro, você pode receber no celular é você não precisar checar o tempo todo os seus testes e nem parar todos os testes automatizados por causa de um erro.

Para mais detalhes leia a página abaixo:
SMTP Google


# -*- coding: utf-8 -*-
"""
Autor: Reinaldo M. R. J
Data: 08-08-2015
Desc: Classe para enviar o report dos testes.
"""
from utils.common import *
# Import the email modules we'll need
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email.mime.image import MIMEImage
# Import smtplib for the actual sending function
import smtplib
import os


class test_Report:

    def __init__(self):
        self.common = FunctionsVariables()

    def email_file(self,path_full, file_name):

        try:
            # Create the container (outer) email message.
            msg = MIMEMultipart()
            # In SUBJECT
            SUBJECT = "Report of Sanity Test"
            msg['Subject'] = SUBJECT
            msg['From'] = "xxxx@gmail.com"
            # Aqui vai conter nosso destinatario.
            msg['To'] = "reinaldo.rossetti@outlook.com"
            msg['Date'] = formatdate(localtime = True)
            # No MIMEText vamos digitar o que vai conter no corpo do email.
            msg.attach(MIMEText('Sanity teste finalizado com Sucesso.,'
                                 ' Verifique o resultado em anexo.'))

            part = MIMEBase('application', "octet-stream")
            part.set_payload(open(path_full, "rb").read())
            Encoders.encode_base64(part)
            part.add_header('Content-Disposition', 'attachment; filename='\
                            + file_name)
            msg.attach(part)
            # Configuração do smtp do gmail e porta.
            server = smtplib.SMTP('smtp.gmail.com', 587)
            server.ehlo()
            server.starttls()
            server.login(msg['From'], 'digite a senha aqui')
            try:
                # Python 3.2.1
                server.send_message(msg)
            except AttributeError:
                # Python 2.7.2
                server.sendmail(msg['From'], [msg['To']], msg.as_string())
                print "Enviado com Sucesso!"
            finally:
                server.quit()
        except (RuntimeError, TypeError, NameError):
                print "Unexpected error:", sys.exc_info()[0]
                raise

    def SendEmailFalha (self, testCaseNumber, testCaseName, \
                        duration, result, path_full, img_name):

        try:
            # Create the container (outer) email message.
            msg = MIMEMultipart()
            destination = ("reinaldo.rossetti@outlook.com", "reiload@gmail.com")
            text = ("Number of Test: " + str(testCaseNumber) + " Result: "\
                    + str(result) + "\nTest Device: " + testCaseName \
                    + "\nDuration DAYS:HOURS:MIN: " + str(duration))

            msg['Subject'] = "Status dos Testes - " + str(testCaseName) +\
                             " Result: " + str(result)
            msg['From'] = "xxxx@gmail.com"
            msg['To'] = ','.join(destination)
            texto = MIMEText(text, 'plain')

            file = path_full
            fp = open(file, 'rb')
            img = MIMEImage(fp.read())
            fp.close()
            img.add_header('Content-Disposition', 'attachment',
                           filename=img_name)
            msg.attach(texto)
            msg.attach(img)

            # Send the email via our own SMTP server.
            s = smtplib.SMTP('smtp.gmail.com', 587)
            s.ehlo()
            s.starttls()
            s.login(msg['From'], 'digite aqui sua senha')

            try:
                # Python 3.2.1
                s.send_message(msg)
            except AttributeError:
                # Python 2.7.2
                s.sendmail(msg['From'], [msg['To']], msg.as_string())
                print "Enviado com Sucesso!"
            finally:
                s.quit()
        except (RuntimeError, TypeError, NameError):
                print "Unexpected error:", sys.exc_info()[0]
                pass

if __name__ == '__main__':
    test = test_Report()
    test.SendEmailFalha("Test-333", "Stress TestX", "00:12:00",
                        "False","D:\Minhas imagens\conferirCONCD006.png", "conferirCONCD006.png")



No nosso código foi incluído um try e um except com pass, isso quer disser se tivemos algum erro, ele vai mostrar o error e vai passar na função não parando o código em eventual erro, outra coisa interessante do nosso código é a versão do Python 2.7.x e 3.x as funções são diferentes, dessa forma feita não vai dar problema com as diferentes versões. Outra boa prática séria usar remover variáveis que podem mudar no nosso código, como os email do Destinatário, podemos colocar todas essas variáveis em FunctionsVariables, e apagamos a linha em nosso código, naquele momento do aperreio temos um única classe com todas as variáveis que podem mudar.

Exemplo in functions_variables.py
class functionsVariables(object):
   global destination
   destination = ("reinaldo.rossetti@outlook.com", "reiload@gmail.com")

O Nosso Resultado Final é esse abaixo:


Nenhum comentário:

Postar um comentário