ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动化流程,创建suit->生成报告->发送邮件

2020-04-02 13:00:23  阅读:275  来源: 互联网

标签:unittest 发送 creatsuit suit test import 邮件 TestLoader


import unittest
import webbrowser
import HTMLTestRunner #生成报告用
from email.mime.text import MIMEText #构造邮件用
from email.mime.multipart import MIMEMultipart #构造邮件用
import smtplib #发送邮件用
from email.header import Header
from lsxm.mytest import mytestcaseA #测试用例
from lsxm.mytest.mytestcaseA import mytestcase01 #测试用例
import mytestcaseB
from mytestcaseB import mytestcase02

def creatsuit_one():
# 执行器会按照用例的添加顺序执行各用例,并聚合结果
uper1 = mytestcase01(methodName="test_uper01")
add1 = mytestcase01(methodName="test_add01")
suit = unittest.TestSuite()
suit.addTest(uper1)
suit.addTest(add1)
# a = suit.countTestCases()
return suit

def creatsuit_two():
map_obj = map(mytestcase02, ["test_uper02", "test_add02"])
suit = unittest.TestSuite()
suit.addTests(map_obj) #注意用复数的addtests
return suit

# 返回testCaseClass中包含的所有测试用例的suite
def creatsuit_three():
# 用例函数必须以test开头,否则无法识别,就不会执行
# loadTestsFromTestCase实际内部会走map函数,自动生成各个用例对象
suit01 = unittest.TestLoader().loadTestsFromTestCase(testCaseClass=mytestcase01)
suit02 = unittest.TestLoader().loadTestsFromTestCase(testCaseClass=mytestcase02)
suit = unittest.TestSuite()
suit.addTests([suit01,suit02])
return suit

# 返回包含在给定模块中的所有测试用例的suite
# noinspection PyUnusedLocal
def creatsuit_four():
suit01 = unittest.TestLoader().loadTestsFromModule(module = mytestcaseA)
suit02 = unittest.TestLoader().loadTestsFromModule(module = mytestcaseB)
suit = unittest.TestSuite()
suit.addTests([suit01,suit02])
return suit
# 返回指定字符串的所有测试用例的suite
def creatsuit_five():
suit01 = unittest.TestLoader().loadTestsFromName(name = "mytestcase01.test_add01",module = mytestcaseA)
suit02 = unittest.TestLoader().loadTestsFromName(name = "mytestcase02.test_uper02",module = mytestcaseB)
suit = unittest.TestSuite()
suit.addTests([suit01, suit02])
return suit
# 返回指定字符串的所有测试用例的suite
def creatsuit_six():
suit01 = unittest.TestLoader().loadTestsFromNames(names = ["mytestcase01.test_add01","mytestcase01.test_uper01"],module = mytestcaseA)
suit02 = unittest.TestLoader().loadTestsFromNames(names = ["mytestcase02.test_add02","mytestcase02.test_uper02"],module = mytestcaseB)
suit = unittest.TestSuite()
suit.addTests([suit01, suit02])
return suit
#从指定的目录开始递归查找所有测试模块(含子目录)(只识别Python的包,也就是目录内有__init__.py文件的才算是Python的包)
def creatsuit_seven():
suit = unittest.TestLoader().discover(r"H:/pycharm/test",pattern="*testcase*.py")
return suit
# 放松邮件
def sendmail():
# 第三方 SMTP 服务
mail_host = "smtp.qq.com" # 设置服务器
mail_user = "394659503@qq.com" # 用户名
mail_pass = "yhowidvprkoxbhga" #"wllxzewvczpqbhga" #yhowidvprkoxbhga qq邮箱pop/smtp" #WLAIXNIQNAIYDCXG 163邮箱" # 口令

# 设置收件人和发件人
sender = '394659503@qq.com'
receivers = ['a1822087@163.com','gaoxia280119@163.com','394659503@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 创建一个带附件的实例对象
message = MIMEMultipart() #MIMEMultipart的父类message的__str__会把对象面位list

# 邮件主题、收件人、发件人
subject = '请查阅--测试报告' # 邮件主题
message['Subject'] = Header(subject, 'utf-8')
message['From'] = Header("{}".format(sender), 'utf-8') # 发件人
message['To'] = Header("{}".format(';'.join(receivers)), 'utf-8') # 收件人

# send_content = get_case_result() # 获取测试报告
with open('report1.html','r',encoding='utf-8') as f:
send_content = f.read()
# send_content = "1111"
html = MIMEText(_text=send_content, _subtype='html', _charset='utf-8') # 第一个参数为邮件内容

# 构造附件
att = MIMEText(_text=send_content, _subtype='base64', _charset='utf-8')
att["Content-Type"] = 'application/octet-stream'
file_name = 'report1.html'
att["Content-Disposition"] = 'attachment; filename="{}"'.format(file_name) # # filename 为邮件附件中显示什么名字
message.attach(html)
message.attach(att)

try:
smtp_obj = smtplib.SMTP()
smtp_obj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtp_obj.login(mail_user, mail_pass)
smtp_obj.sendmail(sender, receivers, message.as_string())
smtp_obj.quit()
print("邮件发送成功")

except smtplib.SMTPException:
print("Error: 无法发送邮件")

if __name__ == '__main__':
# 执行suit添加的用例
#******************************************************************
# suit = creatsuit_one()
# suit = creatsuit_two()
# suit = creatsuit_three()
# suit = creatsuit_four()
# suit = creatsuit_five()
# suit = creatsuit_six()
suit = creatsuit_seven()
# runner = unittest.TextTestRunner(verbosity=1)
# runner.run(suit)
#******************************************************************
# main()执行所有"test"开头的用例
# unittest.main()
# ******************************************************************
#生成测试报告
filename ="report1.html"
file1 = open("filename","wb")
HTMLTestRunner.HTMLTestRunner(stream=file1, verbosity=1, title="UI自动化测试报告", description="高霞的测试报告").run(suit)
file1.close()
# webbrowser.open("filename")
#发送邮件
sendmail()

#在Terminal中在project目录下执行python TestSuit.py -v
# -v:详细显示测试结果

标签:unittest,发送,creatsuit,suit,test,import,邮件,TestLoader
来源: https://www.cnblogs.com/gx01/p/12619024.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有