#-*-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 通过配置文件 读取参数,执行测试用例,生成测试报告并发送邮件的更多相关文章

  1. (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告

    前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...

  2. Python 学习笔记21 CMD执行测试用例

    使用CMD命令执行测试用例 当我们在ride中设计好测试用例后,我们可以使用ride的界面工具来选择和运行测试用例. 系统也会提供比较好的报告和日志的浏览功能. 但是这样的自动化,毕竟是需要手工介入的 ...

  3. python接口自动化测试(七)unittest 生成测试报告

    用例的管理问题解决了后,接下来要考虑的就是报告我问题了,这里生成测试报告主要用到 HTMLTestRunner.py 这个模块,下面简单介绍一下如何使用: 一.下载HTMLTestRunner下载: ...

  4. Python+Selenium笔记(五):生成测试报告

    #HTMLTestRunner代码修改参考 微微微笑 的说明,下面是链接,这个已经说的很详细了 https://www.cnblogs.com/miniren/p/5301081.html (一) 前 ...

  5. python 生成测试报告并发送邮件

    前言: 使用unittest编写自动化测试脚本,执行脚本后可以很方便看到测试用例的执行情况. 但如果想向领导汇报工作,就需要提供更直观的测试报告. 思路: 使用unittest编写测试用例,HTMLT ...

  6. selenium之批量执行测试用例生成HTML结果文件

    使用HTMLTestRunner运行测试套件,自动生成html测试报告: import unittest, HTMLTestRunner, sendmail_html import time, os ...

  7. python+selenium简易自动化框架,包含生成测试报告以及发送结果至Email

    Selenium+python环境搭建见虫师的pdf文档,非常详尽 简易框架: 1.文件目录:

  8. Python3+HTMLTestRunner+SMTP生成测试报告后发送邮件

    在前一篇https://www.cnblogs.com/zhengyihan1216/p/11549820.html 中记录了如何生成html格式的报告, 这篇记录下怎么将测试报告通过邮件发出 1.对 ...

  9. Python htmlTestRunner生成测试报告Demo

    #该代码段是ReadTxt_demo.py 的代码,用户读取txt 文件中的用户信息. #ReadTxt_demo.py def readTxt(filePath): fo = open(filePa ...

随机推荐

  1. Math对象及相关方法

    Math.abs() 取绝对值 Math.ceil()向上取整 (出现小数点就向上+1) Math.floor()向下取整 Math.round()四舍五入 Math.max(val1,val2,va ...

  2. jmeter4.0脚本录制

     Jmeter录制脚本有两种方式.1.通过第三方工具录制比如:Badboy,然后转化为jmeter可用的脚本:2.使用jmeter本身自带的录制脚本功能. 本次使用jmeter本身自带的录制脚本功能 ...

  3. Python 小知识点(6)--静态方法、类方法、属性方法

    (1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__ ...

  4. 第一章IP:网际协议

    I P是T C P / I P协议族中最为核心的协议.所有的 T C P.U D P.I C M P及I G M P数据都以I P数据报格式传输(见图 1 - 4).许多刚开始接触 T C P / I ...

  5. zedgraph绘图(修改)

    转自原文 zedgraph绘图(修改) 首先先下载 zedgraph.dll和zedgraph.web.DLL两个文件 添加项目并引用 首先添加一个用户控件 WebUserDrawGrap.ascx ...

  6. Delphi C++Builder RAD XE Ver 版本 官方发布时间

    RAD 新版本发布时间记录 代号,官方发布时间 RIO 10.3.1,VER330,Product Ver 26 Program File 20,2019.2.14 发布 24周年 RIO 10.3, ...

  7. JSP页面中的时间显示问题

    在JSP页面中往往要将时间显示为指定格式的,如果传入的是Date类型很好解决 <fmt:formatDate value="${orderTime}" pattern=&qu ...

  8. Elasticsearch-2.4.3的单节点安装(多种方式图文详解)

    前提: Elasticsearch-2.4.3的下载(图文详解) 1.新建es安装目录 [root@djt002 local]# mkdir elasticsearch [root@djt002 lo ...

  9. 【转】Unity3d:读取FBX中的动画

    从模型中获得切割好的动画clip,并且对其中设置好的动画事件进行修改方法: 1.动画模型后缀为.FBX.在Unity3d中,能够显示FBX中的动画.要加载模型中的AnimationClip,只要Ass ...

  10. 运维自动化工具 Cobbler

    简介: 关于操作系统安装方面的自动化,早前我们使用 RedHat 推出的 Kickstart 来批量安装操作系统,近年来 RedHat 又推出一个 Cobbler . Cobbler 使用 Pytho ...