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