单元测试框架:unittest入门

这篇具有很好参考价值的文章主要介绍了单元测试框架:unittest入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、unittest 组件

1、TestCase(测试用例):一个testcase的实例就是一个测试用例;unittest 中执行测试的最小单元,通过验证 unittest 提供的 assert 方法来验证一组特定的操作和输入以后得到的响应;unittest 提供了一个名为 TestCase 的基础类,可以用来创建测试用例;
2、TestSuite(测试套件):多个测试用例集合在一起,TestLoader是用来加载TestCase到TestSuite中的;一个测试套件是多个测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行;
3、TestLoader(测试收集):按目录及命名规则收集可用的testcase,并返回一个testsuite对象
4、TextTestRunner(测试执行器):用来执行测试用例的;测试执行器负责测试执行调度并且生成测试结果给用户;测试执行器可以使用图形界面、文本界面或者特定的返回值来展示测试执行结果;
5、TestReport(测试报告):测试报告展示所有执行用例的成功或者失败状态的汇总;包括失败的测试步骤的预期结果和实际结果,还有整体运行状况和运行时间的汇总;
6、fixture(测试夹具):测试用例环境的搭建和销毁;测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown);使用测试夹具,可以定义在单个或多个测试执行之前的准备工作和测试执行之后的清理工作;

二、unittest中的测试用例定义的规范:unittest.TestCase

1、定义一个类,这个类必须要继承unittest.TestCase这个类;
2、测试类中,一个以test开头的方法,就是一条测试用例;

import unittest
class TestDemo1(unittest.TestCase):
    def test_01add(self):
        # 第一步:准备用例数据
        params = {'a': 11, 'b': 22, 'method': '+'}
        expected = 33
        # 第二步:调用功能函数(调用接口),获取实际结果
        result = counter(**params)
        # 第三步:比对预期结果和实际结果是否一致(断言)
        # assert expected == result
        self.assertEqual(expected, result)# 比上面的assert打印更多信息   

测试用例内部报错只会影响该测试用例本身是否成功,不会影响程序整体运行。

三、编写自动化测试用例的步骤

1、准备用例数据;
2、调用功能函数(调用接口),获取实际结果;
3、比对预期结果和实际结果是否一致(断言);

四、关于断言

1、Python中内置了一个关键字assert,专门用来进行断言的,断言assert后面的条件语句是否为true;如:assert 'res' == 'expected'
2、unittest中封装好了很多的断言方法:如:self.assertEqual():断言两个值是否相等;
3、断言方法:
(1)断言两个值是否相等:self.assertEqual(11, 22),即【a==b】
(2)断言两个值不相等:self.assertNotEqual(11, 22),即【a!=b】
(3)断言数据的布尔值是否为True【python中非0为True, 数据的值为0、数据的长度为0、None的布尔值为False】:self.assertTrue('python'),即【bool(x) is True】
(4)断言数据的布尔值是否为False:self.assertFalse(''),即【bool(x) is False】
(5)成员运算符断言:self.assertIn('错误','账号错误'),即【a in b】
(6)非成员断言:self.assertNotIn('错误', '登录成功'),即【a not in b】

五、测试套件:unittest.TestSuite、unittest.TestLoader

1、套件的定义:

suite = unittest.TestSuite()

2、创建一个用例加载器:

load = unittest.TestLoader()

3、往套件中添加用例:
(1)添加测试类到测试套件load.loadTestsFromTestCase

from py.demo1_testcase import TestDemo1    
suite.addTest(load.loadTestsFromTestCase(TestDemo1))

(2)添加测试模块到测试套件load.loadTestsFromModule

from py import demo1_testcase
suite.addTest(load.loadTestsFromModule(demo1_testcase))

(3) 最常用:添加一个测试的目录load.discover;测试用例目录下面的用例模块必须要使用test开头(也可以通过参数pattern指定查找用例模块的规则,如:pattern='test*.py')

suite.addTest(load.discover('testcases'))

又或者,

suite.addTest(load.discover(r'C:\project\py\testcases',pattern='hg_*',top_level_dir=r'C:\project\py\testcases'))

top_level_dir最好不要传值,挺复杂的

总结:以上三个步骤可以简写为一行(实际使用):

suite = unittest.TestLoader().discover('testcases')

也可以是:

suite = unittest.defaultTestLoader.discover('testcases')

discover传参的四种写法:
(1)绝对路径下文件夹内多个文件:discover(r'C:\project\py\testcases')
(2)相对路径下文件夹内多个文件:discover('testcases')
(3)绝对路径下的文件:discover(r'C:\project\py\testcases', 'test_8.py')
(4)相对路径下的文件:discover('testcases', 'test_8.py')

六、测试运行程序:unittest.TextTestRunner

1、加载测试用例到测试套件

suite = unittest.defaultTestLoader.discover(r'C:\project\py\testcases')

2、创建一个测试运行程序

runner = unittest.TextTestRunner()
runner.run(suite)

runner = unittest.TextTestRunner(verbosity=2)中verbosity可传参为0、1、2;
为0时什么也没有,为1时如下图1,为2时如下图2,为其他时和为2时一致,默认传参为1:
图1:
python unnitest 相对路径,笔记,测试用例,单元测试,python
图2:
python unnitest 相对路径,笔记,测试用例,单元测试,python
3、文本格式的测试报告生产(unittest自带的文本测试报告)

# 就是把控制台的输出存到了report.txt
with open('report.txt','w',encoding='utf-8') as f:
    runner = unittest.TextTestRunner(stream=f)
    runner.run(suite)

七、使用第三方的扩展库来生成测试报告:BeautifulReport

from BeautifulReport import BeautifulReport

suite = unittest.defaultTestLoader.discover(r'testcases','test_demo03.py')
br = BeautifulReport(suite)
br.report(description='漂亮报告', filename='report.html', report_dir='./reports')

python unnitest 相对路径,笔记,测试用例,单元测试,python
界面显示的用例描述,取自于每一个测试用例所对应的函数的文档字符串注释,如下图3、图4所示:
图3:
python unnitest 相对路径,笔记,测试用例,单元测试,python
图4:
python unnitest 相对路径,笔记,测试用例,单元测试,python

八、测试夹具(测试用例的前后置方法):setUpClass、tearDownClass、setUp、tearDown

1、setUpClass:测试类级别的前置方法,每个测试类中的用例全部开始执行之前会执行(只会执行一次)
2、tearDownClass:测试类级别的后置方法,每个测试类中的用例全部执行完成之后会执行(只会执行一次)
3、setUp:用例级别的前置方法,每条用例开始执行之前都会执行
4、tearDown:用例级别的后置方法,每条用例执行完成之后都会执行

import unittest

class TestDome5(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print('---setUpClass------')
    @classmethod
    def tearDownClass(cls) -> None:
        print('---tearDownClass------')
        
    def setUp(self) -> None:
        print('---setUp------')
    def tearDown(self) -> None:
        print('---tearDown------')
        
    def test_01(self):
        print('------------test--01---------------')
    def test_02(self):
        print('------------test--02---------------')

运行结果:
python unnitest 相对路径,笔记,测试用例,单元测试,python

九、数据驱动测试:DDT

DDT:Data Driver Test:数据驱动测试

ddt使用的步骤:
1、from ddt import ddt, data
2、在测试类上面使用@ddt (@是装饰器的语法)
3、在测试用例方法上面@data,并传入测试数据
4、ddt会根据data中传递的参数,来生成用例(每个参数生成一条测试用例)
5、在测试方法中定义个参数来接收data中传递过来的用例数据文章来源地址https://www.toymoban.com/news/detail-702768.html

import unittest
from ddt import ddt, data

@ddt
class TestDemo(unittest.TestCase):
	
	# *[1,2,3,4,5,6]为列表拆包
    @data(*[1,2,3,4,5,6])
    def test_login(self, item):
        print(item)
        
if __name__ == '__main__':
    unittest.main()

到了这里,关于单元测试框架:unittest入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium基础 —unittest单元测试框架

    目录 (一)unittest基本简介 (二)unittest基本概念 1、unittest核心的四个概念 2、如何创建一个测试类 3、test fixture常用的四个方法 4、unittest编写测试方法(用例)规范 5、执行测试脚本 6、入门示例 7、结果说明 (三)断言方法 1、断言介绍 2、常用的断言方法 3、断言示例 (四)

    2023年04月08日
    浏览(37)
  • Selenium-Unittest单元测试框架

    1、Unittest介绍 为什么要学习单元测试框架 测试用例的组织与运行需要单元测试框架的参与,从而满足不同测试场景的需要,单元测试框架提供了丰富的比较方法:实际结果与预期结果的对比==测试结果 单元测试框架提供了丰富的日志:给出测试用例失败与通过的数目及执行

    2024年02月04日
    浏览(44)
  • Unittest单元测试框架之unittest的第三方库paramunittest参数化基础及应用

    参数化测试用于当需要使用多组不同的测试数据测试同一个方法的时候 paramunittest是unittest实现参数化的一个专门的模块,可以传入多组参数,自动生成多个用例 实现unittest参数化的方式有多种,如ddt、paramunittest等 执行以上代码,测试结果如下: 执行以上代码,测试结果如下

    2024年02月05日
    浏览(42)
  • [Python]unittest-单元测试

    目录 unittest的大致构成: Test Fixture Test Case-测试用例 Test Suite-测试套件 Test Runner 批量执行脚本 makeSuite() TestLoader discover() 用例的执行顺序 忽略用例执行 skip skipIf skipUnless 断言 HTML测试报告 错误截图 unittest是python中的单元测试框架 大致作用: 提供用例的组织与执行-组织大量的测

    2024年02月08日
    浏览(33)
  • 系统学习Python——单元测试unittest:编写测试用例

    分类目录:《系统学习Python》总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测试unittest:执行测试用例 · 单元测试unittest:用例执行次序 · 单元测试unittest:内置装饰器 · 单元测试unittest:命令行执行测

    2023年04月08日
    浏览(62)
  • 系统学习Python——单元测试unittest:执行测试用例

    分类目录:《系统学习Python》总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测试unittest:执行测试用例 · 单元测试unittest:用例执行次序 · 单元测试unittest:内置装饰器 · 单元测试unittest:命令行执行测

    2024年02月06日
    浏览(38)
  • Python高级用法:使用unittest进行单元测试

    Python中含有一个单元测试模块unittest,我们可以使用其中的工具来测试代码。在编写测试用例后,可以查看一系列输入是否得到了预期的输出。单元测试专注于测试软件单元,软件单元可以被理解为应用程序代码的最小可测试部分。 在代码中我们需要测试的是一个数字是否为

    2024年01月19日
    浏览(54)
  • Python接口自动化之unittest单元测试

    以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、 什么是单元测试?   按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。单元测试是对 单个模块 、 单个类 或者 单个函数 进行测试。 将访问接口的过程封装在函数里面; 接口测试就

    2024年02月07日
    浏览(51)
  • 系统学习Python——单元测试unittest:内置装饰器

    分类目录:《系统学习Python》总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测试unittest:执行测试用例 · 单元测试unittest:用例执行次序 · 单元测试unittest:内置装饰器 · 单元测试unittest:命令行执行测

    2023年04月13日
    浏览(49)
  • 测试人必会的Python内置库:unittest.mock(单元测试mock的基础使用)

    unittest.mock是用于在单元测试中模拟和替换指定的对象及行为,以便测试用例更加准确地进行测试运行。例如对于以下代码,想要针对函数func_a写一个简单的单元测试: 但是这样的话,函数func_b和func_c的逻辑都需要一起测试,在单元测试中这明显是不合理的,对于想要测试的

    2024年02月01日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包