unittest框架加载执行测试用例并生成报告

I.测试套件(Test Suite):是测试用例、测试套件或两者的集合,用于组装一组要运行的测试(多个测试用例集合在一起)

(1)创建一个测试套件

import unittest
suite = unittest.TestSuite()

(2)将测试用例,加载到测试套件中

  • 通过模块或测试用例类加载

    import testcases # 测试用例的模块
    import unittest
    
    suite = unittest.TestSuite() # 创建测试套件
    loader = unittest.TestLoader() # 用来加载TestCase到TestSuite中的
    suite.addTest(loader.loadTestsFromModule(testcases)# 模块加载
    suite.addTest(loader.loadTestsFromTestCase(testcases.类名)) # 用例类加载
  • 添加单条测试用例:suite.addTest(类名("用例方法名"))

  • 指定测试用例的所在的目录路径,进行加载()

    • discover(start_dir,pattern = "test*.py”,top_level_dir = None):start_dir:待测试的模块名或测试用例目录;pattern= "test*.py”:测试用例文件名的匹配原则;top_level_dir = None:测试模块的顶层目录,默认None

import unittest

suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"用例文件所在的目录的绝对路径"))

II.Test Runner:用于协调测试的执行并(通过图形界面、文本界面、返回特殊值)向用户提供结果

(1)测试结果:     .:用例通过           E:表示代码出错了           F:表示不通过

(2)使用启动器,执行测试套件

runner = unittest.TextTestRunner() # 测试运行程序--->用来执行测试用例的
runner.run(suite)

III. 生成测试报告

(1)text类型报告

with open(“test_report.txt","w") as f:
    runner = unittest.TextTestRunner(f)
    runner.run(suite)

(2)html类型报告

from HTMLTestRunnerNew import HTMLTestRunner
runner = HTMLTestRunner(stream=open("test_report.html", "wb"),  # 打开一个报告文件,将句柄传给stream
                        tester="xxx",                    # 报告种显示的测试人员
                        description="测试报告描述,        # 报告种显示描述信息
                        title="测试报告标题")                 # 报告的标题

# 方法2
with open('test_report.html','wb') as file:
    runner = HTMLTestRunner(stream=file,
                            tester = 'xxxx', # 报告种显示的测试人员
                            title='测试报告标题', # 报告的标题
                            description='测试报告描述' )  # 报告种显示描述信息

    runner.run(suite)

完整代码为:

import time
import os
import unittest
from com.contants import CASE_DIR # 测试用例模块路径
from com.contants import REPORT_DIR # 测试报告路径
from com.myconf import conf # 读取配置文件(测试报告配置信息)
from library.HTMLTestRunnerNew import HTMLTestRunner # 生成测试报告
from com.sendemail import send_email


# 1.创建测试套件
suite = unittest.TestSuite()

# 2. 加载TestCase到TestSuite中
# 创建对象加载
loader = unittest.TestLoader()

# # (1)通过模块加载
# suite.addTest(loader.loadTestsFromModule(test_case))

# # (2)通过测试用例类加载
# suite.addTest(loader.loadTestsFromTestCae(test_case.类名))
#
# # (3)添加单条测试用例,不需要loader对象方法
# #  注意:通过用例类去创建测试用例对象时,需传入用例的方法名(字符串类型)
# suite.addTest(类名("用例方法名"))

# (4)指定测试用例的所在的目录路径,进行加载()
suite.addTest(loader.discover(CASE_DIR))


# 测试运行程序--->用来执行测试用例的
# 方法1
# runner = unittest.TextTestRunner()
# 方法2:将HTMLTestRunner文件放在scripts

report_name =  time.strftime('%Y-%m-%d %H_%M') + conf.get('report','reportname')
report_path = os.path.join(REPORT_DIR,report_name)


with open(report_path,'wb') as file:
    runner = HTMLTestRunner(stream=file, # 文件名
                            tester = conf.get('report','tester'), # 报告种显示的测试人员
                            title= time.strftime('%Y-%m-%d %H_%M_%S') + conf.get('report','title'), # 报告的标题
                            description=conf.get('report','description') )  # 报告种显示描述信息

    runner.run(suite)

# 发送测试报告
send_email(report_path,report_name)
原文地址:https://www.cnblogs.com/kite123/p/13786959.html