selenium+BeautifulReport+python自动化+用例不通过的时候发送邮件

Posted syy714363310

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium+BeautifulReport+python自动化+用例不通过的时候发送邮件相关的知识,希望对你有一定的参考价值。

前言

  测试用例用例不通过,从两种思路解决问题:

  第一种:打开本地测试报告,定位用例失败和用例跳过的元素,获取文本信息,再进行判断即可

  第二种:爬虫(bs4解析)html从本地读取测试报告内容,再根据用例失败和用例跳过的标签class属性,获取文本信息,再进行判断即可!

html报告

  本人用的是BeautifulReport测试报告模板,根据不同模板的情况来进行判断!!!!

 通过测试报告用例失败和用例数量来判断用例是否通过

一、打开本地测试报告解决方式

  1、示例BasePage.py文件(公共元素操作)

import time
import logging
from Common.dir_config import *
from selenium.webdriver.support.wait import WebDriverWait#引入等待
from selenium.webdriver.support import expected_conditions as EC#引入等待条件
from selenium.webdriver.common.by import By#引入属性方法
class BasePage:
#元素定位,引入全局变量driver
def __init__(self,driver):#引用全局变量
        #初始化
        self.driver=driver
def wait_eleVisible_xpath(self,locator,by=By.XPATH,wait_times=40):  #元素等待操作,超时截图
        #确定定位表达式是selenium可以用的
        if by not in  By.__dict__.values():
             logging.error("定位类型不支持,请检查您的定位表达式")
            #开始时间
        t1 = time.time()
        try:
            WebDriverWait(self.driver,wait_times,1).until(EC.visibility_of_element_located((by,locator)))
            t2 = time.time()
            # 结束时间 - 两者之差就是真正的等待时间
            logging.info("wait element visible start time:{0},end time:{1},total wait times is: {2}".format(t1, t2, t2 - t1))
        except Exception as e:
            #截屏
             now=time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
             file_path =screenshot_dir+"./"+now+\'_screen.png\'
             #保存当前截图
             self.driver.save_screenshot(file_path)
             #打印日志
             logging.exception("等待元素超时,没有找到相应的元素。截屏文件为"+file_path)
             #抛出异常
             raise e
def get_element_xpath(self,locator,by=By.XPATH,wait_times=40):   #元素定义统一用xpath
        logging.info("当前元素定位类型:{0},当前查找的元素为:{1}".format(by,locator))

        #等待元素可见
        self.wait_eleVisible_xpath(locator,by,wait_times)
        #查看元素
        #开始等待时间
        ele= self.driver.find_element(by, locator)
        #等待结束时间
        return ele

2、示例report_page.py(测试报告页面获取失败用例和跳过(error)用例个数)

from  PageObjects.BasePage  import  BasePage
import logging
from Common import myLogger2
class report(BasePage):
   #用例失败
   test_case_fail_xpath=\'//*[@i="testFail"]\'
   #用例跳过
   test_case_skip_xpath=\'//*[@id="testSkip"]\'
   def report_fail(self):#获取用例失败个数
         return self.get_element_xpath(self.test_case_fail_xpath).text
   def report_skip(self):#获取用例跳过格式(就是error个数),模板不一样叫法不一样
          return self.get_element_xpath(self.test_case_skip_xpath).text

3、示例main.py(发邮件)

import time
import unittest
import logging
from Common import myLogger2
#from TestCase.test_login import Test_Login
from Common.dir_config import *
from Common.send_email import sendEmail
from PageObjects.report_page import *
from selenium import webdriver
from BeautifulReport import BeautifulReport
suite = unittest.TestSuite()
#suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_Login))
suite.addTests(unittest.TestLoader().discover(testcase_dir))
now=time.strftime(\'%Y-%m-%d_%H_%M_%S\')
file_pach=htmlreport_dir+"/柠檬班APP测试报告_"+ now + ".html"
with open(file_pach,"wb+")  as file:
    result = BeautifulReport(suite)
    result.report(description=\'登录测试报告\', filename=\'/柠檬班APP测试报告_\'+now ,log_path=htmlreport_dir)

    #发送邮件,发送报错的测试报告
    try:
        #打开谷歌浏览器
        driver = webdriver.Chrome()
        #访问测试报告
        driver.get("file:///"+file_pach)#访问本地html测试报告,开头需要加上file:///
        #最大化
        driver.maximize_window()
        #调用report.py文件的驱动
        rp=report(driver)
        #获取用例错误的数量
        fail_count= rp.report_fail()
        #获取用例跳过的梳理
        skip_count=rp.report_skip()
        #退出、关闭浏览器
        driver.close()
        driver.quit()
        #判断用例失败和用例跳过个数其中一个大于等于1,发送邮件
        if str(fail_count) >= "1"   or  str(skip_count)>="1":
            sendEmail().send_email("309616143@qq.com,714363310@qq.com",file_pach)
            print("测试报告有错误,发送邮件成功!!!")
        else:
            print("测试报告全部通过,不发送邮件")
    except Exception as e:
            print("判断过程出现异常")
            raise e

 

二、爬虫(bs4解析html)从本地读取测试报告内容方式

1、需要安装bs4

    pip install beautifulsoup4或者pip install bs4

2、示例main.py(发邮件)

import time
import unittest
import logging
from Common import myLogger2
#from TestCase.test_login import Test_Login
from Common.dir_config import *
from Common.send_email import sendEmail
from PageObjects.report_page import *
from selenium import webdriver
from BeautifulReport import BeautifulReport
suite = unittest.TestSuite()
#suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_Login))
suite.addTests(unittest.TestLoader().discover(testcase_dir))
now=time.strftime(\'%Y-%m-%d_%H_%M_%S\')
file_pach=htmlreport_dir+"/柠檬班APP测试报告_"+ now + ".html"
with open(file_pach,"wb+")  as file:
    result = BeautifulReport(suite)
    result.report(description=\'登录测试报告\', filename=\'/柠檬班APP测试报告_\'+now ,log_path=htmlreport_dir)
    #发送邮件,发送报错的测试报告
    with open(file_pach, "r",encoding="utf-8") as fp:#打开html报告,读取内容
    f = fp.read()  # 读报告
    #print(f)
    # 解析html,查找class属性
    soup = BeautifulSoup(f, "html.parser")
    fail_count = soup.find(class_="form-control text-danger")
    skip_count=soup.find(class_="form-control text-warning")
    #print(fail_count)
    #print(skip_count)
    #获取用例失败个数
    fail=fail_count.contents#输出为空,原因是爬虫没有抓取到数字,其他html模板可以,暂时是一个思路
#获取用例跳过个数 skip
=skip_count.contents#输出为空,原因是爬虫没有抓取到数字,其他html模板可以,暂时是一个思路 #print(str(fail),str(skip))
#判断用例失败和用例跳过其中有一个大于等于1, 发送邮件
if fail==[] and skip==[]: print("测试报告异常,不发送邮件") elif str(fail) >= "1" or str(skip)>="1": sendEmail().send_email("309616143@qq.com,714363310@qq.com",file_pach) print("测试报告有错误,发送邮件成功!!!") else: print("测试报告全部通过,不发送邮件")

 

参考地址:https://www.cnblogs.com/yoyoketang/p/8316104.html

以上是关于selenium+BeautifulReport+python自动化+用例不通过的时候发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

selenium+python自动化91-unittest多线程生成报告(BeautifulReport)

selenium+BeautifulReport+python自动化+用例不通过的时候发送邮件

BeautifulReport 遇到的问题 template

十python BeautifulReport 可视化报告

unittest使用BeautifulReport库生成测试报告

python之单元测试——BeautifulReport