#-*-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. OD 实验(七) - 对一个程序的破解和去广告

    程序: 这里有很多的动态链接库 双击运行程序 这个程序有次数限制 按钮也在隐藏处 主界面 退出程序,会弹出一个广告 目的: 让程序的使用次数不受限制,且没有显示次数的窗口 去除程序关闭时候的广告 逆向 ...

  2. 指向“**js/shop.js”的 <script> 加载失败

    指向“”的 <script> 加载失败 找了半天没找到原因 原来是meta里面的 csp Content-Security-Policy <meta http-equiv=" ...

  3. 关于No ManagedConnections available within configured blocking timeout异常的解决

    最近由于系统和业务重构需要,需要把线上1亿数据迁移到新库,由于业务变更,新表老表结构有变化,没法直接用dba dump的方式,需要自己写转换程序迁移.今天在调试的时候,碰到一个蛋疼的问题,就是一开始查 ...

  4. sysbench基准测试(2)——oltp.lua测试

    前面知道sysbench基准测试的主要步骤为:prepare(准备数据集)→ run(运行测试)→ cleanup(清除数据集) 这一节介绍oltp.lua测试. oltp基准测试模拟了一个简单的事物 ...

  5. Halcon学习(三)赋值与数组操作

    assign : 对数据赋值,对数组的初始化.但不能对数组中的某一个值进行赋值. 举例:Tuple1 := [1,0,3,4,5,6,7,8,9]    // 对数组进行初始化 Val := sin( ...

  6. 引用rtmp编译报错:rtmp.obj : error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0

    如题vs下引用librtmp的时候报错:rtmp.obj : error LNK2001: 无法解析的外部符号 __imp__timeGetTime@0 在link 里加入 winmm.lib 就可以 ...

  7. awk中printf的使用说明

    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息.在编写程序时经常会用到此函数.printf()函数的调用格式为: printf("", ); 其中 ...

  8. EXPLAIN sql优化方法(2) Using temporary ; Using filesort

    优化GROUP BY语句   默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序.这与在查询中指定ORDER BY col1,col2...类似.因此,如果显式包括一 ...

  9. Linux任务前后台的切换(转)

    Linux任务前后台的切换   Shell支持作用控制,有以下命令实现前后台切换: 1. command& 让进程在后台运行 2. jobs 查看后台运行的进程 3. fg %n 让后台运行的 ...

  10. 开发团队(Team)的主要职责和特征

    角色介绍 开发团队是Scrum团队的三个角色之一. 开发团队包括架构师.开发工程师.测试人员.数据库管理员和UI设计师等,这几类人的跨职能组合.具备的技能足以实现产品开发. Team的主要职责 1.S ...