Python测试---unittest框架

什么是Unittest框架

  1. 是python自带的单元测试框架
  2. 常用在单元测试,自动化测试中
  3. 提供用例组织与执行
  4. 提供丰富的断言方法-验证函数等功能是否正确
  5. 加上HTMLTestRunner可以生成html的报告
  6. 3-5年以前的公司常⽤来实现自动化测试,有现在依然使用的

单元测试

代码级别的功能验证
逻辑覆盖

单元测试的覆盖率

度量测试的全面程度

  • 语句覆盖

    运行测试用例的过程中被击中的代码称为被覆盖的语句

  • 判断覆盖
    运行测试用例的过程中被击中的判断语句

  • 条件覆盖

    每个判断覆盖语句中,每个可能的子条件或者合并条件都覆盖到。
    用例太多

  • 路径覆盖

    被击中的每个路径

优点

  • 提供用例组织和执行
  • 提供丰富的断言方法
  • 提供丰富的日志和报告
  • 加上HTMLTestRunner可以生成html的报告

Unittest框架的使用

使用规范

  1. 首先 import unittest
  2. 类必须继承unittest.TestCase
  3. 测试方法名称必须以‘test_'开头
  4. 模块名 类名没有要求

setUp与tearDown

用来准备测试环境,清理环境
SetUp():主要是进行测试用例的资源初始化,测试用例的前提条件
TearDown():测试用例的资源释放

  • 基于测试方法级别的setUp, tearDown:
    执行每个测试方法的时候都会执行一次setUp 和tearDown
import unittest
class simple_test(unittest.TestCase):
    def setUp(self) -> None:
        print('set up:')
        self.fo=list(range(10))
        print(str(self.fo))
    def test_1(self):
        print('1')
        self.assertEqual(self.fo.pop(),9)
    def test_2(self):
        print('2')
        self.assertEqual(self.fo.pop(),9)
    def tearDown(self) -> None:
        print('tear down')

运行结果如图:
每次都会输出set up:和tear down

  • 基于类级别的 setUpClass, tearDownClass:
    执行类里面所以测试方法的时候只执行一次setUpClass, tearDownClass
    Class级别需要在前面加@classmethod注解
import unittest
class simple_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('set up:')
        cls.fo=list(range(10))
        print(str(cls.fo))
    def test_1(self):
        print('1')
        self.assertEqual(self.fo.pop(),9)
    @unittest.skip('skip')
    def test_2(self):
        print('2')
        self.assertEqual(self.fo.pop(),9)

    @classmethod
    def tearDownClass(cls) -> None:
        print('tear down')
  • 基于模块级别的 setUpModule,tearDownModule:
    执行模块中每个测试方法的时候只执行一次setUpModule 和tearDownModule

工作原理

在这里插入图片描述

TestCase

一个TestCase实例就是一个测试用,包括setUp/test_/tearDown

Unitest.main()

把所有测试用例执行一次,顺序控制不了

if __name__ == "__main__":
    unittest.main()

TestSuite

  • 多个测试用例集合在一起

步骤

  • 创建对象
  • 调用addtest/addtests方法
  • testsuite的run()方法运行集合,参数是testresult的对象,testresult存放的是测试结果
    suitt = unittest.TestSuite()
    suitt.addTest(simple_test('test_2'))#添加单个test方法进入suitt
    suitt.addTests(map(simple_test,['test_1','test_2']))#添加多个test方法
    re = unittest.TestResult()
    suitt.run(re)

Testloader

  • 创建Testloader对象
  • TestLoader用来加载TestCase到TestSuite中,其中loadTestsForm_()方法,从各处寻找TestCase是,创建实例,add到TestSuite中,再返回一个TestSuite实例
LoadtestsfromName

使用loader方法的loadtestsfromName()将指定的测试用例加载到测试集合,并返回要给测试的方法、类、模块
参数可以是:

  • 模块名test_uniT
  • 模块中的类名test_uniT.simple_test
  • 模块的类的用例test_uniT.simple_test.test_1
 loader = unittest.TestLoader()
    loader.loadTestsFromName(test_uniT.simple_test)
discover方法

Unitest.defaultTestLoader.discover(文件夹名,pattern=筛选文件的正则表达式)

    suitt = unittest.defaultTestLoader.discover(r'./',pattern='test*.py')
    re = unittest.TestResult()
    suitt.run(re)

TextRunner

将结果用text文本形式展示的运行器,报告以TextTestResult的形式展示

suitt = unittest.defaultTestLoader.discover(r'./',pattern='test*.py')

with open(r'./logtext/re.txt', 'w+',encoding='utf-8') as stm:
        runner = unittest.TextTestRunner(stm,descriptions="ceshi", verbosity=0)
        runner.run(suitt)

Verbosity
=0
在这里插入图片描述

=1
在这里插入图片描述

=2
在这里插入图片描述

基本的断言方法

在这里插入图片描述

HTMLTestRunner

可以输出HTML格式的测试报告

  • 下载.py文件
  • 放入/lib文件夹内
import HTMLTextTestRunner
...
    with open(r'./logtext/re.txt', 'w+',encoding='utf-8') as stm:
        runner = HTMLTextTestRunner(stm, verbosity=2,title="ceshi")
        runner.run(suitt)

本人.py下载失败了没有实际应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值