Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件
1、UI测试框架搭建-目录结构
2、 文件介绍
2.1、baseinfo->__init__.py
配置文件定义基础参数
#-*-coding:utf-8-*-
#测试用例配置参数 base_url = "http://xxxxx.com"
undirect_username = "username"
undirect_password = "password"
direct_username = "username"
direct_password = "password" buyerName = 'username'
buyerPassword = 'password' sellerName = 'username'
sellerPassword = 'password' #发送邮件配置参数
Smtp_Server = 'smtp.xxxx.com'
Smtp_Sender = 'nnv@xx.cn'
Smtp_Sender_Password = 'Password'
#Smtp_Receiver = ['nnv1@xx.cn','nnv2@xx.cn','nnv3@xx.cn','nnv4@xx.cn']
Smtp_Receiver = ['nnv1@xx.cn']
Smtp_Receiver_pre = ['nnv1@xx.cn'] #测试邮箱配置
#Smtp_Server = 'smtp.163.com'
#Smtp_Sender = 'wmqyyj_test@163.com'
#Smtp_Sender_Password = 'Password'
#Smtp_Receiver = ['wmqyyj_test@163.com']
#Smtp_Receiver_pre = ['wmqyyj_test@163.com'] #测试用例及报告路径配置参数
# case_dir = './test_case'
# test_report = './test_report/' #测试用例及报告路径配置参数
test_dir = 'D:\\WorkSpace\\Python\\UiTest\\test_case'
test_report = 'D:\\WorkSpace\\Python\\UiTest\\test_report\\'
2.2、caseData
用于存放测试数据,这里用于存放文件上传功能中的上传的文件。
2.3、test_case
用于存放测试用例,根据下图定义的pattern的值,所以用例必须以test开头
2.4、test_report
用户存放测试报告文件
报告内容如下
2.5、测试执行程序
编写用例执行程序 runtest.py
# -*-coding:utf-8-*-
# Time:2017/7/1-0:18
# Author:YangYangJun
import sys reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
import unittest
import time
import os
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
from email.mime.text import MIMEText
import baseinfo
from email.mime.multipart import MIMEMultipart from selenium import webdriver def get_NewReport(testreport):
#获取testreport 目录下的文件返回一个list
dirs = os.listdir(testreport)
#对文件list 进行排序 进行增序排列
dirs.sort()
#获取序列最后一个元素,即最大的一个元素。
newreportname = dirs[-1]
print('The new report name: {0}'.format(newreportname))
file_new = os.path.join(testreport, newreportname)
print file_new
return file_new
def get_Result(filename):
driver = webdriver.Firefox()
driver.maximize_window()
##得到测试报告路径
result_url = "file://%s" % filename
driver.get(result_url)
time.sleep(5) result = driver.find_element_by_xpath("html/body/div[1]/p[3]").text result = result.split(':')
print result
driver.quit()
return result[-1] def send_Mail(file_new,result):
f = open(file_new, 'rb')
# 读取测试报告正文
mail_body = f.read()
f.close()
try:
smtp = smtplib.SMTP(baseinfo.Smtp_Server, 25)
sender = baseinfo.Smtp_Sender
password = baseinfo.Smtp_Sender_Password
receiver = baseinfo.Smtp_Receiver
smtp.login(sender, password)
msg = MIMEMultipart()
# 编写html类型的邮件正文,MIMEtext()用于定义邮件正文
# 发送正文
text = MIMEText(mail_body, 'html', 'utf-8')
# 定义邮件正文标题
text['Subject'] = Header('XXXXUI自动化测试报告', 'utf-8')
msg.attach(text)
# 发送附件
# Header()用于定义邮件主题,主题加上时间,是为了防止主题重复,主题重复,发送太过频繁,邮件会发送不出去。
msg['Subject'] = Header('[执行结果:' + result + ']'+ 'XXXXUI自动化测试报告' + now, 'utf-8')
msg_file = MIMEText(mail_body, 'html', 'utf-8')
msg_file['Content-Type'] = 'application/octet-stream'
msg_file["Content-Disposition"] = 'attachment; filename="TestReport.html"'
msg.attach(msg_file)
# 定义发件人,如果不写,发件人为空
msg['From'] = sender
# 定义收件人,如果不写,收件人为空
msg['To'] = ",".join(receiver)
tmp = smtp.sendmail(sender, receiver, msg.as_string())
print tmp
smtp.quit()
return True
except smtplib.SMTPException as e:
print(str(e))
return False if __name__ == '__main__':
# test_dir = os.path.join(os.getcwd(),'test_case')
# print(test_dir)
# report_dir = os.path.join(os.getcwd(),'test_report')
# 测试用例路径
test_dir = baseinfo.test_dir
# est_dir = os.path.join(os.getcwd(),'test_case') # print(test_dir)
# report_dir = os.path.join(os.getcwd(),'test_report')
# 测试报告存放路径
report_dir = baseinfo.test_report test_discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
now = time.strftime("%Y-%m-%d-%H_%M_%S")
filename = report_dir + 'result-' + now + '.html'
print filename
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream=fp, title='XXXXUI自动化测试报告', description='用例执行情况')
runner.run(test_discover)
fp.close()
#其实根本不需要这里获取最新报告,filename就是最新的报告了,可以直接使用了
#new_report = get_NewReport(report_dir)
result = get_Result(filename) mail = send_Mail(filename,result) print mail
if mail:
print(u"邮件发送成功!")
else:
print(u"邮件发送失败!")
Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件的更多相关文章
- Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,
测试思路:单个测试集.单个测试汇成多个测试集.运行测试集.生成测试报告.发送至邮箱. 第一步:建立单个测试集,以cnblog登录为例. 测试用例: cnblog的登录测试,简单分下面几种情况:(1)用 ...
- Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...
- Python+selenium+unittest+HTMLTestReportCN单元测试框架分享
分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...
- python+selenium+unittest 实现自动化测试
示例代码: baidu.py import csv #导入csv模块 from itertools import islice #从itertools导入islice,后边让其默认跳过第一行使用 fr ...
- Python+Selenium之HTMLTestRunner
下载 HTMLTestRunner 模块 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 保存路径:将下载的HTMLTestRunne ...
- python+selenium +unittest生成HTML测试报告
python+selenium+HTMLTestRunner+unittest生成HTML测试报告 首先要准备HTMLTestRunner文件,官网的HTMLTestRunner是python2语法写 ...
- 使用python+selenium对web进行自动化测试
想用python代码,对web网页进行自动化测试 web自动化测试和手动测试的区别: 手动测试:通过手动去对网页的功能进行点点点 web自动化:可以通过代码,自动对网页点点点 首先,将python+s ...
- python+selenium+unittest,爬虫电影网站
以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的:只有再点击电影名字,进入电影主页时才能看到评分.一般下载的电影都是评分高的才看,低的就忽略掉了.每次 ...
- 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件
今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写 ...
随机推荐
- vue.JS 介绍
vueJS 介绍 首先,vueJS 是我很早之前就想要接触学习的东西,但是呢,一直没时间,主要是在学校,事太多,没心思定下心来学习,我学生生涯的最后一个假期的第一天晚上,万事开头难,那就先写点儿什么东 ...
- 免费CDN公共库——网站提速 静态资源库
原文链接:https://blog.geekzhao.me/cdnjs.html 新浪SAE公共资源 推荐指数★★★ 支持https http://lib.sinaapp.com/js/jquery/ ...
- 【python004-分支循环】
一.条件分支 1.第一个改进要求:游戏猜错的时候程序提示用户当前的输入比答案大了还是小了 python的比较操作符: > 左边大于右边 >= 左边大于等于右边 ...
- 16 级高代 II 思考题十的多种证明
16 级高代 II 思考题十 设 $V$ 是数域 $\mathbb{K}$ 上的 $n$ 维线性空间, $\varphi$ 是 $V$ 上的线性变换, 证明: $\varphi$ 的极小多项式 $m ...
- topcoder srm 310 div1
problem1 link 先计算出最上面.最下面一层,根据最上面一层的数量计算答案. import java.util.*; import java.math.*; import static ja ...
- Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式
内容 参数 OS Windows 10 x64 browser Firefox 65.0.2 framework Bootstrap 3.3.7 editor ...
- Flutter的脚手架(Scaffold)
- bzoj1458: 士兵占领 网络流
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1458 也可以去luogu 思路 想成倒着删去点,使得依旧满足覆盖!! 左边横,右边列,之间用 ...
- s2-045漏洞批量检测工具
今天晚上看老铁们在群里就这个st2-045漏洞讨论得火热,个人不太喜欢日站,本来想直接写个批量挂马的东西,但是想想还是算了,如果你有兴趣,改改也很容易,反正不关我的事 测试图 2017-3-8更新 增 ...
- Learning to Track at 100 FPS with Deep Regression Networks ECCV 2016 论文笔记
Learning to Track at 100 FPS with Deep Regression Networks ECCV 2016 论文笔记 工程网页:http://davheld.git ...