前言
一、批量执行测试案例
我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方法去一次执行多个脚本的用例。那么前边介绍那么多都是半道开始,半道出家,这篇就带大家从头到尾,一步一步给小伙伴们详细介绍一下。
文件夹如上所示。
测试案例代码所示
import unittest
import time
class Test(unittest.TestCase):
def setUp(self):
print("test01_开始测试")
def tearDown(self):
print("test01_结束测试")
def test01(self):
print("test01_测试用例1")
def test02(self):
print("test01_测试用例2")
def test03(self):
print("test01_测试用例3")
if __name__ == '__main__':
unittest.main()
二、生成测试报告
如下代码,运行生成测试报告
import os
import smtplib
import time
import unittest
from email.header import Header
from email.mime.text import MIMEText
def all_case():
# 待执行用例的目录
case_dir=""
testcase=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(case_dir,pattern="test*.py",top_level_dir=None)
#将需要执行的用例添加到testcase
for test_suite in discover:
for test_case in test_suite:
testcase.addTest(test_case)
print(testcase)
return testcase
if __name__=="__main__":
# 返回实例
runner=unittest.TextTestRunner()
# 导入第三方模块HTMLTestRunnner
from HTMLTestRunner.HTMLTestRunner import HTMLTestRunner
#import HTMLTestRunner
# 保存生成报告的路径
# 获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
report_path=r"D:\workplace20240513\pythonbase\python测试学习\自动化接口测试\04html测试报告/report/"+now+"_result.html"
fp=open(report_path,"w",encoding="utf-8")
runner = HTMLTestRunner(stream=fp,
title = u"这是我的自动化测试用例",
description = u"用例执行情况")
# 执行用例
runner.run(all_case())
# 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄束。
fp.close()
将测试报告发送到指定的邮箱中,如下所示
import os
import smtplib
import time
import unittest
from email.header import Header
from email.mime.text import MIMEText
def all_case():
# 待执行用例的目录
case_dir=""
testcase=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(case_dir,pattern="test*.py",top_level_dir=None)
#将需要执行的用例添加到testcase
for test_suite in discover:
for test_case in test_suite:
testcase.addTest(test_case)
print(testcase)
return testcase
# ==============定义发送邮件==========
def send_mail(file_new):
f = open(file_new, 'rb')
mail_body = f.read()
f.close()
smtpserver = "smtp.qq.com"
port = 465
username = '2264@qq.com' #发件箱用户名
password = 'zkbg' #发件箱授权码注意是授权码
receiver = "132@qq.com" #收件人邮箱
# ----------2.编辑邮件的内容------
subject = "这个是主题 QQ"
msg = MIMEText(mail_body, "html", "utf-8")
msg['from'] = username
msg['to'] = "1325@qq.com"
msg['subject'] = subject
smtp = smtplib.SMTP_SSL(smtpserver, port)
smtp.login(username, password) # 登录
try:
smtp.sendmail(username, receiver, msg.as_string()) # 发送
except Exception as e:
print("邮件发送失败", e)
finally:
print("邮件发送成功")
smtp.quit() # 关闭连接
# ======查找测试目录,找到最新生成的测试报告文件======
def new_report(test_report):
lists = os.listdir(test_report) # 列出目录的下所有文件和文件夹保存到lists
lists.sort(key=lambda fn: os.path.getmtime(test_report + "\\" + fn)) # 按时间排序
file_new = os.path.join(test_report, lists[-1]) # 获取最新的文件保存到file_new
print(file_new)
return file_new
if __name__=="__main__":
# 返回实例
runner=unittest.TextTestRunner()
# 导入第三方模块HTMLTestRunnner
from HTMLTestRunner.HTMLTestRunner import HTMLTestRunner
#import HTMLTestRunner
# 保存生成报告的路径
# 获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time()))
report_path=r"D:\workplace20240513\pythonbase\python测试学习\自动化接口测试\04html测试报告/report/"+now+"_result.html"
fp=open(report_path,"w",encoding="utf-8")
runner = HTMLTestRunner(stream=fp,
title = u"这是我的自动化测试用例",
description = u"用例执行情况")
# 执行用例
runner.run(all_case())
# 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄束。
fp.close()
test_path = r"D:\workplace20240513\pythonbase\python测试学习\自动化接口测试\04html测试报告/report/"
new_report = new_report(test_path)
send_mail(new_report) # 发送测试报告
发邮件过程的总结
发邮件前我们需要了解的是邮件是怎么一个形式去发送到对方手上的,通俗点来说就是你写好一封信,然后装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去,其他的就不关心了,只是关心时间,而电子邮件不像日常发送邮件的按天算,时间都是按
秒算的。
电子邮件的发送流程:
1、你使用某款电子邮件软件MUA:mail user agent --邮件用户代理,填写完成点击发送
2、在你点击发送的时候电子邮件软件发出去,到MTA:mail transfer agent--邮件传输代理,即email服务提供商,如网易等
3、MTA--邮箱传输代理会把邮箱投递到邮件的最终目的地MDA:mail delivery agent---邮箱投递服务
4、email到达MDA后就会放在某个服务器上,存在数据库里,收件人必须通过MUA从MDA中把邮箱放到自己电脑上
发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA<-MUA<-收件人
python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用。smtplib模块主要负责发送邮件,email模块主要负责构造邮件。
smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
参考文献
python接口自动化(二十六)--批量执行用例 discover(详解) - 北京-宏哥 - 博客园
python接口自动化(二十七)--html 测试报告——上(详解) - 北京-宏哥 - 博客园
python接口自动化(二十八)--html测试 报告——下(详解) - 北京-宏哥 - 博客园
python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解) - 北京-宏哥 - 博客园
python接口自动化(三十)--html测试报告通过邮件发出去——中(详解) - 北京-宏哥 - 博客园
python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解) - 北京-宏哥 - 博客园
python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上(详解) - 北京-宏哥 - 博客园
python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解) - 北京-宏哥 - 博客园
python里面的HTMLTestRunner安装失败的解决办法_error: no matching distribution found for htmltest-CSDN博客