Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件
#-*-coding:utf-8-*-
#测试用例配置参数
#XXXXX_Uitest->baseinfo->__init__.py base_url = "http://XXXXxxxxx.com"
undirect_username = "XXXX"
undirect_password = "XXXXX"
direct_username = XXXXX"
direct_password = "xxxxxx" #发送邮件配置参数
Smtp_Server = 'smtp.mxhichina.com'
Smtp_Sender = 'XXXXX@xxx。com'
Smtp_Sender_Password = 'XXXXXXX'
Smtp_Receiver = ['XXXXXX@123.cn','SSSSSS@123.cn'] #测试用例及报告路径配置参数
test_dir = './test_case'
test_report = './test_report/'
#测试用例,测试代码
#test_cart.py import unittest
import os import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys class TestCart(unittest.TestCase): def setUp(self):
print('setup') self.url = 'http://www.XXX.mm'
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(5)
self.driver.get(self.url)
self.driver.maximize_window()
print("open browser")
#return self.driver def get_Info(self):
filePath = os.path.join(os.getcwd(),'user_info')
filename = filePath + '\\user_info.txt'
print(filename)
fo = open(filename, 'r')
lines = fo.readlines()
for data in lines:
name,pwd = data.split(',')
print(name, pwd)
return name,pwd def test_to_login(self):
'''验证是否登陆'''
name,pwd = self.get_Info()
time.sleep(5)
print(name,pwd)
self.driver.implicitly_wait(5)
self.driver.find_element_by_id('new-username').clear()
self.driver.find_element_by_id('new-username').send_keys(name)
self.driver.find_element_by_id('new-password').clear()
self.driver.find_element_by_id('new-password').send_keys(pwd)
self.driver.implicitly_wait(5)
#回车登陆,因为登陆按钮不好定位
self.driver.find_element_by_xpath("html/body/div[9]/div[3]/div[1]/div[1]/div[4]/span").send_keys(Keys.ENTER)
self.driver.implicitly_wait(10)
login_test = self.driver.find_element_by_xpath(".//*[@id='loginOut']").text
self.assertEqual(login_test, '[退出]') def tearDown(self):
print("tearDown")
time.sleep(5)
print("close browser")
self.driver.quit() if __name__ == '__main__':
unittest.main()
#runtest.py import smtplib
import unittest
import time
import xlrd
import os
from HTMLTestRunner import HTMLTestRunner
from email.header import Header
from email.mime.text import MIMEText
#导入baseinfo
import baseinfo
from email.mime.multipart import MIMEMultipart def get_sender(): filePath = os.path.join(os.getcwd(),'user_info')
print("get_sender")
print(filePath)
fileName = filePath + '\Mail_info.xlsx'
print(fileName)
readExcel = xlrd.open_workbook(fileName)
sender = readExcel.sheet_by_name('sender')
get_sender = sender.row_values(1)
#print(get_sender) return get_sender def get_Receiver(): filePath = os.path.join(os.getcwd(),'user_info')
fileName = filePath + '\Mail_info.xlsx'
print("get_Receiver()")
print(fileName)
readExcel = xlrd.open_workbook(fileName)
receiver_sheet = readExcel.sheet_by_name('receiver')
receiver_temp = receiver_sheet.col_values(0)
getReceiver = receiver_temp[1:]
print(getReceiver)
print(type(getReceiver))
return getReceiver def get_NewReport(testreport):
dirs = os.listdir(testreport)
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 send_Mail(file_new):
f = open(file_new, 'rb')
# 读取测试报告正文
mail_body = f.read()
f.close() try:
#通过 baseinfo 引用 __init__ 初始化的参数值
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('自动化测试报告', 'utf-8')
msg.attach(text) # 发送附件
# Header()用于定义邮件标题
msg['Subject'] = Header('自动化测试报告', '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(receiver) 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(),'report')
test_discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
print("test_discover")
now = time.strftime("%Y-%m-%d-%H_%M_%S")
filename = report_dir+'/result-'+now+'.html'
fp = open(filename, 'wb')
runner = HTMLTestRunner(stream = fp, title = 'UI自动化测试报告', description = '用例执行情况')
#runner = unittest.TextTestRunner()
runner.run(test_discover)
fp.close() new_report = get_NewReport(report_dir)
mail = send_Mail(new_report)
if mail:
print("发送成功!")
else:
print("发送失败!")
Python 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件的更多相关文章
- (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告
前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...
- Python 学习笔记21 CMD执行测试用例
使用CMD命令执行测试用例 当我们在ride中设计好测试用例后,我们可以使用ride的界面工具来选择和运行测试用例. 系统也会提供比较好的报告和日志的浏览功能. 但是这样的自动化,毕竟是需要手工介入的 ...
- python接口自动化测试(七)unittest 生成测试报告
用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...
- Python+Selenium笔记(五):生成测试报告
#HTMLTestRunner代码修改参考 微微微笑 的说明,下面是链接,这个已经说的很详细了 https://www.cnblogs.com/miniren/p/5301081.html (一) 前 ...
- python 生成测试报告并发送邮件
前言: 使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况. 但如果想向领导汇报工作,就需要提供更直观的测试报告. 思路: 使用unittest编写测试用例,HTMLT ...
- selenium之批量执行测试用例生成HTML结果文件
使用HTMLTestRunner运行测试套件,自动生成html测试报告: import unittest, HTMLTestRunner, sendmail_html import time, os ...
- python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email
Selenium+python环境搭建见虫师的pdf文档,非常详尽 简易框架: 1.文件目录:
- Python3+HTMLTestRunner+SMTP生成测试报告后发送邮件
在前一篇https://www.cnblogs.com/zhengyihan1216/p/11549820.html 中记录了如何生成html格式的报告, 这篇记录下怎么将测试报告通过邮件发出 1.对 ...
- Python htmlTestRunner生成测试报告Demo
#该代码段是ReadTxt_demo.py 的代码,用户读取txt 文件中的用户信息. #ReadTxt_demo.py def readTxt(filePath): fo = open(filePa ...
随机推荐
- Android:不同drawable文件夹的区别
4.0后,新建android工程,会自动生成drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxh ...
- oracle 11g密码永不过期
---1.在CMD命令窗口中输入: sqlplus 用户名/密码@数据库本地服务名 as sysdba; ---2.查看用户的proifle是哪个,一般是default sql>SELECT u ...
- eclipse项目推送git
引用:http://blog.csdn.net/zongzhankui/article/details/48653731
- G++ 4.4.7 无法编译模板程序,Vs可以,和解?智者尾部留言,本人第一次使用vs pro,通常并且习惯在linux下写些小东西,虽然程序简单;
vs 模板编译运行Ok \ linux g++ 4.4.7编译模板测试程序,报无法定义 template <typename or class 中的 AnyType> 类型的数据 Exam ...
- MySQL多项模糊查询
最近有个需求,就是要根据搜索框里面的关键字,找到符合条件的数据. 如果是单个条件的话,其实就是一个普通的select语句. 但是需求是这个关键字,要在id,desc,step等多个字段模糊查找. 然后 ...
- nrm操作
nrm操作 nrm use cnpm // 选择镜像nrm ls //查看镜像
- 全面了解POI操作Microsoft Office(Word、Excel、PowerPoint)
POI 与 Microsoft Office 1. POI 简介 POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft Office 办公套 ...
- ASP.NET Web API(C#)学习01
Web Api 记得去年公司有个分享会分享了这个,最近留意招聘信息的时候,发现有个招聘信息的要求是会用WebApi,然后花了半个小时不到,根据下面这篇文章了解了一下,觉得这个东西也不难啊. 突然发现在 ...
- SpringBoot31 整合SpringJDBC、整合MyBatis、利用AOP实现多数据源
一.整合SpringJDBC 1 JDBC JDBC(Java Data Base Connectivity,Java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数 ...
- MAXOS 进程管理
ps -ef|grep +程序名 注意进程名区分大小写 linux上进程有5种状态:1. 运行(正在运行或在运行队列中等待)2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)3. 不可中 ...