#-*-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. 枚举生成1~n的排序

    /*枚举生成1~n的排列*/ #include <iostream> #include<algorithm> #include<queue> #include< ...

  2. zabbix agent主动模式与proxy模式,实现公网zabbix监控私网客户机

    zabbix agent主动模式,实现公网zabbix监控私网客户机 zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下:  ...

  3. jQuery样式与动画

    修改内联CSS .css() 获取 //取得单个属性的值,传入'属性名',返回"value" .css('property') //取得多个属性的值,传入'['属性1','属性2' ...

  4. Python图片转字符

    前段时间学习pillow写的,可以通过改变font_map改变转换的深度和字符.思路是先转换黑白大小,读取黑白值取范围读font_map转变. from PIL import Image,ImageD ...

  5. 用django实现redirect的几种方法总结

    用django开发web应用, 经常会遇到从一个旧的url转向一个新的url.这种隐射也许有规则,也许没有.但都是为了实现业务的需要.总体说来,有如下几种方法实现 django的 redirect.1 ...

  6. Yum -y update 报错

    问题描述: 操作系统:CentOS 6.5 今天服务器上执行 yum -y update 命令时,提示: Running rpm_check_debug ERROR with rpm_check_de ...

  7. 怎样获取datagrid中编辑列combobox的value值与text值

    var ed = $('#dg').datagrid('getEditor', {index:editIndex,field:'productid'}); var productname = $(ed ...

  8. ROS解决网页断流现象 (转)

    “pppoe-client”接口,将“MAX MTU”和“MAX MRU”都设置成“” /ip firewall mangle add action=change-mss chain=forward ...

  9. 在Ajax请求中什么时候用GET方式什么时候用POST方式?

    当我们有大量数据要传送时最好的办法是一次发出多个只传递少量信息的Ajax调用时.如果你正用一个Ajax调用发送大量数据,那么最好是结束这种做法,因为这样做并不能节约时间. 因此,需要传送大量数据能成为 ...

  10. APP微信登录---第三方登录

    (一)引入maven配置 <dependency> <groupId>com.github.liyiorg</groupId> <artifactId> ...