unittest+unittestreport

1、什么是unittest

unittest是Python单元测试框架,是Python自带的标准库

2、unittest的4个核心组件

a、TestCase:测试用例类,用来定义测试用例函数的

b、TestSuite:测试套件,用来收集测试用例的

c、TestRunner:测试用例运行类,用来执行测试用例的,以测试套件的维度去执行

d、TestFixture:测试脚手架,通过覆盖 TestCase的setUp()和tearDown()方法来实现

3、测试流程

a、TestCase:先定义测试用例类,在测试用例类中写测试方法

b、TestSuite:收集要执行的测试用例类或者文件中的测试方法,放到测试套件中

c、TestRunner:把收集好的测试套件放到测试用例运行器去执行,并收集测试结果

d、TestFixture:做好前置条件和后置处理

4、注意点

a、测试用例类必须以Test开头

b、测试方法必须以test开头

c、可以在main程序入口中通过unittest.main()来启动自动化测试程序,但是这不灵活,也缺失了套件的内涵,所以这里只详细介绍通过套件来执行自动化测试程序的方法(详见9

5、测试用例包含哪些东西

a、前置条件(若没有就不写):sql语句执行、数据库连接、工具类的实例化等

b、测试步骤(业务逻辑):数据替换、数据驱动等

c、测试结果断言:响应结果断言、数据库数据断言

d、后置处理(若没有就不写):数据清理、数据库连接关闭等

6、前置后置

a、类级别

整个当前测试用例类执行之前(后)执行一次

@classmethod
def setUpClass(cls) -> None:
    print('类级别的前置')
    
@classmethod   
def tearDownClass(cls) -> None:
    print('类级别的后置')

b、函数级别

每个测试用例执行之前(后)执行一次

def setUp(self) -> None:
    print('函数级别的前置')
    
def tearDown(self) -> None:
    print('函数级别的后置')

 7、用例执行

测试用例函数按照函数名的ASCII码顺序来执行(0-9<A-Z<a-z)

8、用例断言

一般使用assertEqual(a,b)即可

unittest中断言根据用例是否抛出异常来判断用例方法是成功还是失败,所以,当使用try except捕获异常时,记得手动抛出异常raise

9、用例的收集

这里讲解最常用、最通用的以模块为维度来添加测试用例的方法

在自动化项目目录下新建一个start.py作为自动化测试程序的启动入口

import unittest
# 创建测试套件,其中:
# start_dir:测试文件目录
# pattern:测试用例文件名称,非必填,默认是所有test开头的py文件,也可以指定,例如:pattern='test_0*.py'
case_dir = os.path.dirname(__file__)
suite = unittest.defaultTestLoader.discover(start_dir=os.path.join(case_dir, 'cases'))
# 创建执行器
runner = unittest.TextTestRunner()
runner.run(suite)

如上便是unittest自带的TextTestRunner提供的测试报告,.代表用例通过,F代表用例失败

10、集成unittestreport

 自带的TextTestRunner执行器给出的测试结果很不直观友好,这里使用第三方库unittestreport来集成unittest,可以实现测试报告、测试图表、发送测试报告邮件等功能

 关于邮箱的smtp服务授权码的获取以及各邮箱系统的smtp地址请自行百度,相关资料很多,此处不做累述

将start.py中的代码全部清除,替换如下:

import unittest
from unittestreport import TestRunner
case_dir = os.path.dirname(__file__)
# pattern:测试用例文件名称,非必填,默认是所有test开头的py文件,也可以指定,例如:pattern='test_0*.py'
suite = unittest.defaultTestLoader.discover(start_dir=os.path.join(case_dir, 'cases'))
runner = TestRunner(suite=suite,
                    filename="report.html",
                    report_dir="./reports",
                    title='测试报告',
                    tester='xxx',
                    desc="xxx",
                    templates=2)#模板 1、2
runner.run()
runner.send_email(host='smtp.qq.com',
                  port=465,
                  user='xxx@qq.com',
                  password='xxx',#smtp服务授权码
                  to_addrs='xxx@qq.com')#收件人为多人时:['...', '...', '...']

 附图:

项目目录                                                        

测试报告

posted @ 2022-05-09 23:31  少年不太冷2  阅读(246)  评论(0)    收藏  举报