前言

实现需求:当测试用例全部通过的时候,不发邮件,当用例出现Error或Failure的时候发送邮件

解决思路:生成html测试报告后,用bs4解析html页面,写个函数判断页面上是都有不通过的记录

html报告

1.查看html报告,主要看Status这一行是否会出现Failure 或 Error 的记录

bs4解析html

1.bs4模块在我的博客上上海-悠悠之前有过介绍,就不重复写了,先定位html页面元素,先通过它的class属性:attribute定位到这三行记录

2.取出最后一行,然后读出文本内容。

# coding:utf-8
from bs4 import BeautifulSoup # 打开html文件,读取报告内容
with open("result.html", "r") as fp:
f = fp.read() # 读报告 # 解析html,查找class属性attribute
soup = BeautifulSoup(f, "html.parser")
status = soup.find_all(class_="attribute") # 打印查找内容
print(status) print("qq交流群:226296743")
result = status[2].contents[-1] # 获取报告结果
print(result)

运行结果:

[<p class="attribute"><strong>Start Time:</strong> 2018-01-18 16:35:49</p>, <p class="attribute"><strong>Duration:</strong> 0:00:00</p>, <p class="attribute"><strong>Status:</strong> Pass 2 Failure 1 Error 1</p>]
qq交流群:226296743
Pass 2 Failure 1 Error 1

写个判断函数

1.对结果判断,写个判断是否有失败用例的函数

 # coding:utf-8
from bs4 import BeautifulSoup import sys
reload(sys)
sys.setdefaultencoding('utf8') def is_result_pass():
try:
with open("result.html", "r") as fp:
f = fp.read() # 读报告
soup = BeautifulSoup(f, "html.parser")
status = soup.find_all(class_="attribute")
result = status[2].contents[-1] # 获取报告结果
if "Failure" in result or "Error" in result:
print("测试过程有不通过用例:%s"%result)
return False
else:
return True
except Exception as msg:
print("判断过程出现异常:%s"%str(msg))
return False if __name__ == "__main__":
print("qq交流群:226296743")
res = is_result_pass()
print(res)

运行结果:

测试过程有不通过用例: Pass 2 Failure 1 Error 1
False

2.在最后发邮件之前加个判断

 if not is_result_pass():
# 判断html报告是否有报错 # 执行发送邮件函数,自己写一个发邮件函数
# send_mail(sender, psw, receiver, smtp_server, report_file) else:
print("测试用例全部通过,不发送邮件")

selenium+python自动化89-用例不通过的时候发送邮件的更多相关文章

  1. selenium+python自动化98--文件下载弹窗处理(PyKeyboard)

    前言 在web自动化下载操作时,有时候会弹出下载框,这种下载框不属于web的页面,是没办法去定位的(有些同学一说到点击,脑袋里面就是定位!定位!定位!) 有时候我们并不是非要去定位到这个按钮再去点击, ...

  2. selenium+python自动化79-文件下载(SendKeys)

    前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘事件的,所以这里需要用S ...

  3. selenium+python自动化登录脚本

    利用selenium+python写的一个关于登录的自动化脚本

  4. 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)

    Selenium2+python自动化之读取Excel数据(xlrd) 转载地址:http://www.cnblogs.com/lingzeng86/p/6793398.html ·········· ...

  5. selenium+python自动化102-登录页面滑动解锁(ActionChains)

    前言 登录页面会遇到滑动解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点. 有些直接拖到最最右侧就可以了,本篇讲下使用 seleniu ...

  6. selenium+python自动化90-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

  7. selenium+python自动化unittest之跳过用例skip

    前言 当测试用例写完后,有些模块有改动时候,会影响到部分用例的执行,这个时候我们希望暂时跳过这些用例. 或者前面某个功能运行失败了,后面的几个用例是依赖于这个功能的用例,如果第一步就失败了,后面的用例 ...

  8. selenium+python自动化之元素定位

    自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...

  9. selenium+python自动化78-autoit参数化与批量上传

    前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...

随机推荐

  1. python编码问题 decode与encode

    参考: http://www.jb51.net/article/17560.htm 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCI ...

  2. liunx的磁盘管理的基本命令

    df     查看磁盘占用率 du -sh    查看磁盘多大 sudo fdisk -l   查看硬盘信息 sudo mkfs -t ext3 /dev/sdb1    建立文件系统(相当于格式化) ...

  3. Linux下idea选择tomcat server 报错Warning the selected directory is not a valid tomcat home

    这是文件的权限问题,在tomcat的目录下执行以下代码 sudo chmod 777 -R tomcat8/ 然后再去idea中配置即可

  4. 20155207 2006-2007-2 《Java程序设计》第5周学习总结

    20155207 2006-2007-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 语法与继承架构 Java中的错误以对象方式呈现为 java.lang.Throwab ...

  5. LG1600 天天爱跑步

    题意 分析 对一个(s,t)查询,令f=lca(s,t),则操作可化为(s,f),(f,t). 考虑观察到的情况,若x在s到t的路径上,且x观察到,则 \[ \textrm{dep}_s-\textr ...

  6. 用C实现FFT算法

    用C语言编写FFT算法  转http://blog.sina.com.cn/s/blog_65d639d50101buo1.html #include "math.h" #defi ...

  7. oracle nodejs 访问

    1. 下载node-oracle网址如下: https://github.com/joeferner/node-oracle 2. 测试代码: var oracle = require('oracle ...

  8. Excel 从字符串中提取日期值

    因为工作需要,Excel 表中有一串字符,需要将字符里的日期提取出,并转成日期值. 需要转成如下格式: 可使用以下公式. =DATEVALUE(TEXT(MID(I2,1,4)+1&" ...

  9. nginx定制header返回信息模块ngx_headers_more

    http://www.ttlsa.com/nginx/nginx-custom-header-to-return-information-module-ngx_headers_more/ 一. 介绍n ...

  10. C#中委托如何使用?(转帖)

    1.委托概述委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样:然后,你可以创建一个或多个 ...