【致敬女神】HTMLReport应用之Unittest+Python+Selenium+HTMLReport项目自动化测试实战
创始人
2024-05-30 12:55:58
0

HTMLReport应用之Unittest+Python+Selenium+HTMLReport项目自动化测试实战

  • 1 测试框架结构
  • 2 技术栈
  • 3 实现思路
    • 3.1 使用HtmlTestRunner
    • 3.2 使用HTMLReport
  • 4 TestRunner参数说明
    • 4.1 源码
    • 4.2 参数说明
  • 5 框架代码
    • 5.1 common/reportOut.py
    • 5.2 common/sendMain.py
    • 5.3 report
      • 5.3.1 xxx.html
      • 5.3.2 xxx.log
      • 5.3.3 xxx.xml
    • 5.4 testcase
    • 5.5 main.py
  • 6 运行结果


『IT女神-仅以此文致敬 女性开发者』

她们在不同领域熠熠生辉,创造了无限的可能,成为了IT发展进步中不可或缺的角色。

她们在AI代码的世界里让梦想生根、开花。

不分年龄、无论背景,她们释放着热情与专业,用技术为自己代言。

致敬每一位IT女神,愿她们永远美丽、永远绽放自己独特的魅力之花。

同时,在这特殊的节日祝愿所有的女性朋友梦想成真!


注意事项:
【本文字数包含代码38175字,建议慢慢看~哈哈哈】
1、以下仅为举例,具体以自身实际项目为准;
2、以下内容重点是介绍HTMLReport的应用,并不是说明如何搭建框架;
3、如果想了解框架内容,可移步博主有关测试框架的系列文章;
4、写了一个用例,用例中没有加断言,只是为了生成测试报告,可以忽略;
5、用例故意写错了3个,1个通过,是为了生成测试报告数据。

1 测试框架结构

在这里插入图片描述
在这里插入图片描述

目录/脚本说明
common/reportOut.py这是是用HTMLReport生成报告的
common/sendMain.py这个是用来发邮件,本次演示可要可不要
report是存放测试报告的,里边有3个文件,由HTMLReport自动生成
testcase存放测试用例的
main.py框架主入口

2 技术栈

技术版本及说明
PythonV3.x(本文为3.7)===编程语言支撑
SeleniumV3.141.0 ===UI元素、控件的识别、定位,以及浏览器控制等
HTMLReport生成Html测试报告
UnittestPython自带===自动化测试框架
SmtplibPython自带===邮件服务
emailPython自带===邮件服务
osPython自带===系统模块
PyCharmCommunity 2020.2汉化版
操作系统Windows10旗舰版64位
其它后续补充

3 实现思路

  • 这里具体就是把原来生成HtmlTestRunner改为HTMLReport

3.1 使用HtmlTestRunner

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2022/3/7
# 文件名称:reportOut.py
# 作用:封装测试报告功能import time
import unittest
from common import HTMLTestRunner    # 引入导入的报告模板def report_out(test_dir, report_dir, name_project):''':test_dir: 用例路径:report_dir : 报告路径:name_project : 项目名称=>用于报告命名及描述:return: 无'''now = time.strftime("%Y_%m_%d %H_%M_%S")discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')      # 加载测试用例report_name = report_dir + now + '-' + name_project+'_test_report.html'          # 报告名称with open(report_name,'wb') as f:                                                # 运行用例生成测试报告runner = HTMLTestRunner.HTMLTestRunner(stream=f,title=name_project + 'WebUI Auto Testing Report',description=(name_project + U"美多商城UI自动化功能回归测试"),verbosity=2)runner.run(discover)f.close()"""stream:要操作的文件;title:测试报告标题;description:报告描述;verbosity:报告级别。"""

3.2 使用HTMLReport

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/7
# 文件名称:reportOut.py
# 作用:封装测试报告功能import time
import unittest
from HTMLReport import ddt, TestRunner, add_image, no_retry, retrydef report_out(test_dir, report_dir, name_project):''':test_dir: 用例路径:report_dir : 报告路径:name_project : 项目名称=>用于报告命名及描述:return: 无'''now = time.strftime("%Y_%m_%d %H_%M_%S")discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')      # 加载测试用例# report_name = now + '-' + name_project + '_test_report.html'          # 报告名称test_runner = TestRunner(report_file_name=now,output_path=report_dir,title=name_project,description="关于HTMLReport的实际项目应用",thread_count=1,thread_start_wait=0.1,tries=0,delay=0,back_off=1,retry=True,sequential_execution=True,lang="cn")test_runner.run(discover)

4 TestRunner参数说明

4.1 源码

class TestRunner(TemplateMixin, TestSuite):"""测试执行器"""def __init__(self, report_file_name: str = None, log_file_name: str = None, output_path: str = None,title: str = None, description: str = None, tries: int = 0, delay: float = 1, back_off: float = 1,max_delay: float = 120, retry: bool = True, thread_count: int = 1, thread_start_wait: float = 0,sequential_execution: bool = False, lang: str = "cn", image: bool = True, failed_image: bool = False):

4.2 参数说明

参数说明
report_file_name报告文件名,如果未赋值,将采用“test+时间戳”
log_file_name日志文件名,如果未赋值,将采用报告文件名,如果报告文件名也没有,将采用“test+时间戳”
output_path报告保存文件夹名,默认“report
title报告标题,默认“测试报告”
description报告描述,默认“无测试描述”
tries重试次数
delay重试延迟间隔,单位为 秒
back_off扩展每次重试等待时间的乘数
max_delay最大重试等待时间长度,单位为 秒
retry如果为 True 表示所有用例遵循重试规则,False 只针对添加了 @retry 用例有效
thread_count并发线程数量(无序执行测试),默认数量 1
thread_start_wait各线程启动延迟,默认 0 s
sequential_execution是否按照套件添加(addTests)顺序执行, 会等待一个addTests执行完成,再执行下一个,默认 False。如果用例中存在 tearDownClass ,建议设置为True否则 tearDownClass 将会在所有用例线程执行完后才会执行。
lang("cn", "en") 支持中文与英文报告输出,默认采用中文
image默认支持添加图片,False 放弃所有图片添加
failed_imagetrue 只有失败才添加图片,成功用例添加的图片会被删除

5 框架代码

5.1 common/reportOut.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/7
# 文件名称:reportOut.py
# 作用:封装测试报告功能import time
import unittest
from HTMLReport import ddt, TestRunner, add_image, no_retry, retrydef report_out(test_dir, report_dir, name_project):''':test_dir: 用例路径:report_dir : 报告路径:name_project : 项目名称=>用于报告命名及描述:return: 无'''now = time.strftime("%Y_%m_%d %H_%M_%S")discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')      # 加载测试用例# report_name = now + '-' + name_project + '_test_report.html'          # 报告名称test_runner = TestRunner(report_file_name=now,output_path=report_dir,title=name_project,description="关于HTMLReport的实际项目应用",thread_count=1,thread_start_wait=0.1,tries=0,delay=0,back_off=1,retry=True,sequential_execution=True,lang="cn")test_runner.run(discover)

5.2 common/sendMain.py

# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/7
# 文件名称:sendMain.py
# 作用:封装邮件服务模块import time
import smtplib
import getpass
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import email
import osdef send_main(file_path, mail_to='xxx@126.com'):mail_from = 'xxxx@126.com'f = open(file_path, 'rb')mail_body = f.read()f.close()# msg = email.MIMEMultipart.MIMEMultipart()msg = MIMEMultipart()# 构造MIMEBase对象做为文件附件内容并附加到根容器contype = 'application/octet-stream'maintype, subtype = contype.split('/', 1)# 读入文件内容并格式化data = open(file_path, 'rb')# file_msg = email.MIMEBase.MIMEBase(maintype, subtype)file_msg = MIMEBase(maintype, subtype)file_msg.set_payload(data.read())data.close()# email.Encoders.encode_base64(file_msg)encoders.encode_base64(file_msg)# 设置附件头basename = os.path.basename(file_path)file_msg.add_header('Content-Disposition', 'attachment', filename=basename)msg.attach(file_msg)print(u'msg 附件添加成功')msg1 = MIMEText(mail_body, "html", 'utf-8')msg.attach(msg1)if isinstance(mail_to, str):msg['To'] = mail_toelse:msg['To'] = ','.join(mail_to)msg['From'] = mail_frommsg['Subject'] = u'美多商城UI自动化功能回归测试'msg['date'] = time.strftime('%Y-%m-%d-%H_%M_%S')print(msg['date'])smtp = smtplib.SMTP()smtp.connect('smtp.126.com')smtp.login('xxx@126.com', 'xxx')  # 登录账号和密码(密码为之前申请的授权码)smtp.sendmail(mail_from, mail_to, msg.as_string())smtp.quit()print('email has send out !')# if __name__=='__main__':
#     sendmain('../report/2017-08-18-10_18_57_result.html')

5.3 report

5.3.1 xxx.html



关于HTMLReport的实际项目应用

关于HTMLReport的实际项目应用

启动时间:Start Time: 2023-03-07 17:15:55

结束时间:End Time: 2023-03-07 17:16:09

运行时长:Duration: 0:00:13.857089

结果:Status:合计:Total:4    通过:Passed:1    失败:Failed:0    错误:Error:3    跳过:Skipped:0    

关于HTMLReport的实际项目应用

你的浏览器不支持HTML5 canvas
下载日志文件Download log file

筛选摘要Summary通过Pass失败FAIL异常Error跳过Skip全部All

序号NO测试组/测试用例Test Group/Test case计数Count通过Passed失败Failed错误Erroneous跳过Skipped统计Statistics重试Tries查看View
c1test_baidu.TestCase4103025.00%0细节Detail
et1.1
test_back_refresh
0
错误error
et1.1.1:
2023-03-07 17:15:58,071   23748     INFO result.py(70) - 测试延迟启动:0.1s
2023-03-07 17:15:58,183   23748     INFO result.py(73) - 开始测试: test_back_refresh (test_baidu.TestCase)
2023-03-07 17:15:58,329   23748    ERROR result.py(191) - 测试产生错误: test_back_refresh (test_baidu.TestCase)
Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 43, in test_back_refreshself.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdnFile "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:15:58,330   23748     INFO result.py(96) - 测试结束: test_back_refresh (test_baidu.TestCase)
2023-03-07 17:15:58,330   23748     INFO result.py(97) - 耗时: 0.14696788787841797
    et1.2
    test_search
    0
    错误error
    et1.2.1:
    2023-03-07 17:15:58,330   23748     INFO result.py(70) - 测试延迟启动:0.1s
    2023-03-07 17:15:58,434   23748     INFO result.py(73) - 开始测试: test_search (test_baidu.TestCase)
    2023-03-07 17:16:00,445   23748    ERROR result.py(191) - 测试产生错误: test_search (test_baidu.TestCase)
    Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 26, in test_searchself.driver.find_element_by_id("kw").send_keys("helloworld")  # 输入“helloworld”File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:16:00,445   23748     INFO result.py(96) - 测试结束: test_search (test_baidu.TestCase)
    2023-03-07 17:16:00,445   23748     INFO result.py(97) - 耗时: 2.0103440284729004
      et1.3
      test_serach_clear
      0
      错误error
      et1.3.1:
      2023-03-07 17:16:00,445   23748     INFO result.py(70) - 测试延迟启动:0.1s
      2023-03-07 17:16:00,561   23748     INFO result.py(73) - 开始测试: test_serach_clear (test_baidu.TestCase)
      2023-03-07 17:16:00,566   23748    ERROR result.py(191) - 测试产生错误: test_serach_clear (test_baidu.TestCase)
      Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 49, in test_serach_clearself.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdnFile "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
      selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:16:00,567   23748     INFO result.py(96) - 测试结束: test_serach_clear (test_baidu.TestCase)
      2023-03-07 17:16:00,567   23748     INFO result.py(97) - 耗时: 0.0060002803802490234
        pt1.4
        test_windows_size
        0
        通过pass
        pt1.4.1:
        2023-03-07 17:16:00,567   23748     INFO result.py(70) - 测试延迟启动:0.1s
        2023-03-07 17:16:00,670   23748     INFO result.py(73) - 开始测试: test_windows_size (test_baidu.TestCase)
        2023-03-07 17:16:05,441   23748     INFO result.py(172) - 测试执行通过: test_windows_size (test_baidu.TestCase)
        2023-03-07 17:16:05,442   23748     INFO result.py(96) - 测试结束: test_windows_size (test_baidu.TestCase)
        2023-03-07 17:16:05,442   23748     INFO result.py(97) - 耗时: 4.770826101303101
           合计Total4103025.00%0 
           

          5.3.2 xxx.log

          2023-03-07 17:15:55,952   25872     INFO test_runner.py(162) - 预计并发线程数:1
          2023-03-07 17:15:58,071   23748     INFO result.py(70) - 测试延迟启动:0.1s
          2023-03-07 17:15:58,183   23748     INFO result.py(73) - 开始测试: test_back_refresh (test_baidu.TestCase)
          2023-03-07 17:15:58,329   23748    ERROR result.py(191) - 测试产生错误: test_back_refresh (test_baidu.TestCase)
          Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 43, in test_back_refreshself.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdnFile "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
          selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:15:58,330   23748     INFO result.py(96) - 测试结束: test_back_refresh (test_baidu.TestCase)
          2023-03-07 17:15:58,330   23748     INFO result.py(97) - 耗时: 0.14696788787841797
          2023-03-07 17:15:58,330   23748     INFO result.py(70) - 测试延迟启动:0.1s
          2023-03-07 17:15:58,434   23748     INFO result.py(73) - 开始测试: test_search (test_baidu.TestCase)
          2023-03-07 17:16:00,445   23748    ERROR result.py(191) - 测试产生错误: test_search (test_baidu.TestCase)
          Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 26, in test_searchself.driver.find_element_by_id("kw").send_keys("helloworld")  # 输入“helloworld”File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
          selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:16:00,445   23748     INFO result.py(96) - 测试结束: test_search (test_baidu.TestCase)
          2023-03-07 17:16:00,445   23748     INFO result.py(97) - 耗时: 2.0103440284729004
          2023-03-07 17:16:00,445   23748     INFO result.py(70) - 测试延迟启动:0.1s
          2023-03-07 17:16:00,561   23748     INFO result.py(73) - 开始测试: test_serach_clear (test_baidu.TestCase)
          2023-03-07 17:16:00,566   23748    ERROR result.py(191) - 测试产生错误: test_serach_clear (test_baidu.TestCase)
          Traceback (most recent call last):File "F:\Automated-UITest-demo-update - htmlreport\testcase\test_baidu.py", line 49, in test_serach_clearself.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdnFile "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_idreturn self.find_element(by=By.ID, value=id_)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element'value': value})['value']File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in executeself.error_handler.check_response(response)File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_responseraise exception_class(message, screen, stacktrace)
          selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="kw"]"}(Session info: chrome=110.0.5481.178)2023-03-07 17:16:00,567   23748     INFO result.py(96) - 测试结束: test_serach_clear (test_baidu.TestCase)
          2023-03-07 17:16:00,567   23748     INFO result.py(97) - 耗时: 0.0060002803802490234
          2023-03-07 17:16:00,567   23748     INFO result.py(70) - 测试延迟启动:0.1s
          2023-03-07 17:16:00,670   23748     INFO result.py(73) - 开始测试: test_windows_size (test_baidu.TestCase)
          2023-03-07 17:16:05,441   23748     INFO result.py(172) - 测试执行通过: test_windows_size (test_baidu.TestCase)
          2023-03-07 17:16:05,442   23748     INFO result.py(96) - 测试结束: test_windows_size (test_baidu.TestCase)
          2023-03-07 17:16:05,442   23748     INFO result.py(97) - 耗时: 4.770826101303101
          2023-03-07 17:16:09,611   25872     INFO test_runner.py(199) - 
          Pass	test_windows_size (test_baidu.TestCase)2023-03-07 17:16:09,612   25872    ERROR test_runner.py(201) - 
          Error	test_back_refresh (test_baidu.TestCase)
          Error	test_search (test_baidu.TestCase)
          Error	test_serach_clear (test_baidu.TestCase)2023-03-07 17:16:09,614   25872     INFO test_runner.py(219) - 
          测试结束!
          运行时间: 0:00:13.857089
          共计执行用例数量:4
          执行成功用例数量:1
          执行失败用例数量:0
          跳过执行用例数量:0
          产生异常用例数量:3
          

          5.3.3 xxx.xml

          
          
          
          

          5.4 testcase

          • 注意:这个用例只是说明测试报告的生成,没有对用例严格按照标准写,比如断言等
          # -*- coding:utf-8 -*-
          # 作者:虫无涯
          # 日期:2023/3/7
          # 文件名称:test_baidu.py
          # Function:打开百度网主页,在搜索栏输入“helloworld”from selenium import webdriver
          from selenium.webdriver.common.keys import Keys
          import time
          import unittestclass TestCase(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:cls.driver = webdriver.Chrome()  # 打开Chrome浏览器cls.driver.get("http://www.baidu.com")  # 输入百度网址print("============验证浏览器的基本控制==========")@classmethoddef tearDownClass(cls) -> None:cls.driver.quit()  # 关闭浏览器def test_search(self):print("1、搜索helloworld.并回车......")time.sleep(2)self.driver.find_element_by_id("kw").send_keys("helloworld")  # 输入“helloworld”time.sleep(2)self.driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜索time.sleep(2)self.driver.maximize_window()  # 最大化当前窗口def test_windows_size(self):print("2、浏览器窗口大小缩小为640*480......")time.sleep(2)self.driver.set_window_size(640, 480)  # 控制浏览器显示尺寸为640*480time.sleep(0.5)self.driver.maximize_window()  # 最大化当前窗口time.sleep(2)def test_back_refresh(self):print("3、先进行浏览器后退,再次输入csdn进行搜索")self.driver.back()self.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdntime.sleep(1)self.driver.refresh() # 刷新def test_serach_clear(self):print("4、清空输入的内容......")self.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdntime.sleep(2)self.driver.find_element_by_id("kw").clear()time.sleep(0.5)def csdn(self):print("5、进入csdn官网")self.driver.find_element_by_id("kw").send_keys("csdn")  # 输入csdntime.sleep(2)self.driver.find_element_by_id("kw").send_keys(Keys.ENTER)  # 回车进行搜索time.sleep(2)self.driver.find_element_by_xpath("//*[@id='1']/h3/a[1]").click()time.sleep(2)windows = self.driver.window_handlesself.driver.switch_to.window(windows[-1])now_url = self.driver.current_urlm_get_url = "https://www.csdn.net/"if now_url == m_get_url:print("经过判断,已经进入csdn官网!!")else:print("未进入到csdn官网,请检查代码!")if __name__ == "__main__":unittest.main()

          5.5 main.py

          # -*- coding:utf-8 -*-
          # 作者:虫无涯
          # 日期:2023/3/7
          # 文件名称:main.py
          # 作用:框架的主入口函数import time
          from common.reportOut import report_out
          from common.sendMain import send_main
          import osdef acquire_report_address(reports_address):#这里方法略获取最新的测试报告,作为邮件的附件def run_case():print("======开始执行!!!======")curpath = os.path.dirname(os.path.realpath(__file__))report_dir = os.path.join(curpath, "report/")        # 测试报告存放目录test_dir = os.path.join(curpath, "testcase/")        # 测试用例读取目录name_project = "关于HTMLReport的实际项目应用"report_out(test_dir, report_dir, name_project)time.sleep(5)# 这里方法略,调用邮件方法即可print("======执行结束!!!======")if __name__ == '__main__':run_case()
          

          6 运行结果

          • 会在report目录下生成三个文件;
            在这里插入图片描述

          • 命令行输出:
            在这里插入图片描述

          • 测试报告:
            在这里插入图片描述
            在这里插入图片描述
            在这里插入图片描述
            在这里插入图片描述


          『《假如生活欺骗了你》俄·普希金』

          假如生活欺骗了你,
          不要悲伤,不要心急!
          忧郁的日子里须要镇静:
          相信吧,快乐的日子将会来临!
          心儿永远向往着未来;
          现在却常是忧郁。
          一切都是瞬息,一切都将会过去;
          而那过去了的,就会成为亲切的怀恋。


          相关内容

          热门资讯

          Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
          张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
          西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
          名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
          和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
          戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
          依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
          高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
          心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
          卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
          林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
          小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
          内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
          《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
          很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
          言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
          两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
          幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
          海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
          运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...