广告
返回顶部
首页 > 资讯 > 后端开发 > Python >UnitTest单元测试框架详解
  • 218
分享到

UnitTest单元测试框架详解

python单元测试 2023-09-03 08:09:34 218人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一、什么是Unittest框架 unittest是python自带的一个单元测试框架,不仅适用于单元测试,还可用于WEB、Appium、接口自动化测试用例的开发与执行;此框架可以组织执行测试用例,并且

一、什么是Unittest框架

unittest是python自带的一个单元测试框架,不仅适用于单元测试,还可用于WEB、Appium、接口自动化测试用例的开发与执行;此框架可以组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否执行通过,并生成测试结果。

二、Unittest框架原理

Unittest框架最核心的四个概念:

  1. test case:测试用例
  2. test suite:测试套件
  3. test runner: 用来执行测试用例和测试套件,并返回测试用例的执行结果
  4. TestLoader:批量执行测试用例
  5. test fixure:测试夹具

三、Unittest的使用

3.1 TestCase 测试用例

当我们在写接口用例的时候,会继承 unittest 当中的 TestCase 的类和方法,可以用来创建新的测试用例,一个TestCase的实例就是一个测试用例,unittest中的测试用例都是以 “test” 开头,并且它的执行顺序是按照方法名的ASCII值进行排序

# test_001.pyimport unittestdef add(x, y):  return x + yclass Test_Case_01(unitest.TestCase):      # 新建测试类必须继承unittest.TestCase  # 测试方法名称必须以 test 开头  def test_add_01(self):      result = add(2, 4)    print(f'两数和为:{result}')  def test_add_02(self):    result = add(5, 7)    print(f'两数之和为:{result}')if __name__ == '__main__':  # 执行测试用例  unittest.main()

3.2 TestSuite

一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起执行,这就产生了TestSuite的概念。我们可以把它理解成一个篮子,篮子里面放了很多东西(test case)。使用addTest来加载TestCase到TestSuite中。

testsuit的使用:
(1)实例化:suite = unittest.TestSuite()
(2)添加用例:suite.addTest(ClassName(“MethodName”))
(ClassName:类名,MethodName:方法名)
(3)添加扩展:suite.addTest(unittest.makeSuite(ClassName))
(搜索指定ClassName内 test 开头的方法,并添加到测试套件中)

提示: TestSuite需要配合TestRunner才能被执行

# 公众号:大森玩测试# 案例import unittestfrom test_001 import Test_Case_01# 实例化测试套件对象suite = unittest.TestSuite()# 单独添加测试用例suite.addTest(Test_Case_01("test_add_01"))suite.addTest(Test_Case_01("test_add_02"))# 批量添加用例, addTest()添加的次数根据Test_Case_01中的测试用例个数决定,这里是添加2次suite.addTest(unittest.makeSuite(Test_Case_01))# 执行runner = unittest.TextTestRunner()runner.run(suite)

3.3 TextTestRunner

用来执行测试用例和测试套件,并返回测试用例的执行结果。在unittest单元测试框架中,通过TextTestRunner类提供的run()方法来执行test suite/test case。它还可以用图形或者文本接口,把返回的测试结果更形象的展现出来,如:htmlTestRunner。

使用:
(1)实例化:runner = unittest.TextTestRunner()
(2)执行:runner.run(suite) # suite为测试套件的名称,可以参考上文的代码

# 示例代码可以参考3.2 TestSuite 的案例,这里不再赘述

3.4 TestLoader

用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。

使用unittest.TestLoader(),通过该类下面的discover()方法自动搜索指定目录下指定开头的 .py 文件,并将查到的测试用例组装到测试套件。

# 示例# 公众号:大森玩测试import osimport unittest# 获取根目录BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   # 获取文件的根目录# 测试用例地址test_case_path = os.path.join(BASE_DIR, "Scripts")suit = unittest.TestSuite()loader = unittest.TestLoader()  # 专门用来查找用例的实例# test_case_path:测试用例的所在路径。pattern:搜索以test开头的py文件,默认为‘test*.py’suit.addTests(loader.discover(test_case_path, pattern="test*.py"))runner = unittest.TextTestRunner()runner.run(suit)

注意: 也可以使用unittest.defaultTestLoader 代替 unittest.TestLoader()

discover = unittest.defaultTestLoader.discover(test_case_path, pattern="t*.py")suit.addTests(discover)

TestSuite和TestLoader的区别

共同点:都是测试套件

不同点:实现方式不同

(1) TestSuite需要手动添加测试用例(可以添加测试类,也可以添加测试类中的某个测试方法)

(2)TestLoader搜索指定目录下指定开头的py文件,并添加测试类中的所有测试方法,不能指定添加某个测试方法

3.5 Fixture

是对一个测试用例环境的初始化和销毁操作。即执行测试用例前准备环境的搭建(前置-SetUp),以及测试后环境的还原(后置-TearDown)。

控制级别:

(1)函数级别
def setUp() / def tearDown()
特性:几个测试函数,被执行几次。每个测试函数执行之前都会执行setUp,执行之后都会执行tearDown(运行一次测试方法就会运行一次 setUp 和 tearDown)

(2)类级别
def setUpClass() / def tearDownClass()
特性:测试类运行之前运行一次setUpClass;类运行之后运行一次tearDownClass

注意: 类方法必须使用 @claSSMethod装饰

(3)模块级别
def setUpModule() / def tearDownModule()
特性:模块运行之前执行一次 setUpModule;模块运行之后执行一次 tearDownModule

# 示例# 公众号:大森玩测试import timeimport unittestfrom selenium import webdriverclass Test_Tmall_Login(unittest.TestCase):    def setUp(self) -> None:        # 获取Chrome浏览器驱动对象        self.driver = webdriver.Chrome()        # 打开url        self.driver.get("Http://www.tmall.com")        # 窗口最大化        self.driver.maximize_window()        # 隐式等待        self.driver.implicitly_wait(30)    def tearDown(self) -> None:        # 等待3秒,关闭浏览器        time.sleep(3)        self.driver.quit()    def test_login(self):        driver = self.driver        # 输入用户名        driver.find_element(by="id", value="username").send_keys("test001")        # 输入密码        driver.find_element(by="id", value="passWord").send_keys("admin001")        # 点击登录按钮        driver.find_element(by="name", value="sbtbutton").click()

四、断言

1)什么是断言

让程序代替人工自动的判断预期结果和实际结果是否相符

2)为什么要学习断言

自动化脚本在执行的时候一般都是无人值守状态,我们不知道执行的结果是否符合预期结果,所以需要让程序代替人工检测程序执行的结果是否符合预期结果,这个时候就需要用到断言。

3) Unittest常用断言方法

在这里插入图片描述

注意: 如果断言失败(用例执行不通过)就会抛出一个AssertionError断言错误,成功则标识为通过,以上几种方式都有一个共同点,就是都有一个msg参数,默认是None,即msg = None,如果指定msg参数的值,则将该信息作为失败的错误信息返回。

断言方法在unittest.TestCase类中已经定义好了,我们自定义的测试类已经继承了 TestCase ,所以在测试方法中直接调用即可。

# 示例# 公众号:大森玩测试import unittestdef add(x, y):    return x + yclass Test_Assert(unittest.TestCase):    def setUp(self):        print("前置操作")    def tearDown(self):        print("后置操作")    # 测试用例    def test_01(self):        result = add(2, 4)        # 断言        self.assertEqual(2, result)    def test_02(self):        result = add(5, 7)        is_ok = result == 12        self.assertTrue(is_ok)    def test_03(self):        result = add(2, 3)        result = str(result)        self.assertIn(result, "1234567")

五、参数化

1)通过参数的方式来传递数据,从而实现数据和脚本分离,也可以把测试数据定义到数据文件或者数据库

2)针对同一个测试方法,可以实现用例的重复执行,减少代码冗余,提高测试效率

3) unittest测试框架,本身不支持参数化,但是可以通过安装扩展插件parameterized来实现

安装

pip install parameterized

使用方式

导包:from parameterized import parameterized

修饰测试函数 @parameterized.expand([数据])

数据格式:

  1. 单个参数:类型为列表

  2. 多个参数:类型为列表嵌套元组

  3. 在测试函数中的参数设置变量引用参数值,注意:变量的数量必须和数据值的个数相同

六、跳过

对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。

使用方式

直接将测试函数标记成跳过

@unittest.skip('代码未完成')

根据条件判断测试函数是否跳过

@unittest.skipIf(condition, reason)

七、生成HTML测试报告

测试脚本执行完后,可以生成以 HTML( 网页 ) 格式的测试报告。

这里给大家推荐一个个人感觉不错的HTMLTestRunner版本——XTestRunner
在这里插入图片描述

安装方式:

pip install XTestRunner

pip install -U git+https://GitHub.com/SeldoMQA/XTestRunner.git@master

使用:

# 注意:生成HTML报告,必须使用wb,以二进制形式写入with open(report_dir, "wb") as f :    HTMLTestRunner(stream=f, verbosity=2, title="XXX自动化测试报告", description="欢迎关注公众号:大森玩测试")

来源地址:https://blog.csdn.net/weixin_43170741/article/details/127943305

--结束END--

本文标题: UnitTest单元测试框架详解

本文链接: https://www.lsjlt.com/news/391822.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • UnitTest单元测试框架详解
    一、什么是Unittest框架 unittest是python自带的一个单元测试框架,不仅适用于单元测试,还可用于Web、Appium、接口自动化测试用例的开发与执行;此框架可以组织执行测试用例,并且...
    99+
    2023-09-03
    python 单元测试
  • python单元测试框架unittest基本用法案例
    目录案例12、生成测试报告断言基本操作数据驱动 ddt data巩固总结unittest是python单元测试框架,类似于JUnit框架 意义: 灵活的组织ui接口测试自动化用例让用...
    99+
    2022-11-11
  • Python 单元测试(unittest
    项目的整体结构可以参考“软件目录开发规范”,这里单说测试目录。一般都是在项目里单独创建一个测试目录,目录名就是“tests”。关于目录的位置,一种建议是,在项目名(假设项目名是Foo)的一级子目录下创建二级子目录 “Foo/foo/tes...
    99+
    2023-01-31
    单元测试 Python unittest
  • Python自动化测试框架之unittest使用详解
    目录1 unittest框架2 批量执行脚本2.1 构建测试套件2.2 用例的执行顺序2.3 忽略用例执行3 unittest断言4 HTML报告生成5 异常捕捉与错误截图6 数据驱...
    99+
    2023-05-18
    Python unittest Python 自动化测试框架 Python unittest框架
  • python测试框架unittest和pytest区别
    目录一、用例编写规则 二、用例前置和后置 三、断言 四、报告 五、失败重跑 六、参数化 使用示例一、用例编写规则 (1)unittest提供了test cases、test sui...
    99+
    2022-11-12
  • 利用Python中unittest实现简单的单元测试实例详解
    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nos...
    99+
    2022-06-04
    详解 实例 单元测试
  • 详解Java单元测试之Junit框架使用教程
    目录单元测试Junit单元测试框架单元测试快速入门单元测试 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进...
    99+
    2022-11-13
  • PHP中的单元测试框架
    随着软件开发领域的迅速发展,软件测试的重要性也越来越被大家所重视。单元测试是软件测试中的一个重要环节,它能够在程序开发的早期就发现潜在的问题,从而提高软件的质量和稳定性。而在PHP语言领域中,有许多非常优秀的单元测试框架,本文将介绍其中的一...
    99+
    2023-05-23
    框架 PHP 单元测试
  • SpringMVC框架整合Junit进行单元测试(案例详解)
    本文主要介绍在SpringMVC框架整合Junit框架进行单元测试。闲话少述,让我们直入主题。 系统环境 软件 ...
    99+
    2022-11-12
  • python unittest单元测试的步骤分析
    说明 导入unittest模块。 导入被测对象。 创建测试类unittest.TestCase。 重写setUp和tearDown(如果有初始化和结束) 以函数的形式写测试项目:函数名以test_开头。 unitte...
    99+
    2022-06-02
    python unittest 单元测试
  • python中怎么实现unittest单元测试
    python中怎么实现unittest单元测试,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说明导入unittest模块。导入被测对象。创建测试类unittest.TestCa...
    99+
    2023-06-20
  • python单元测试框架pytest介绍
    pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试、自动化测试工作中。 unittest也是python语言中一款单元测试框架,但是功能...
    99+
    2022-11-11
  • java单元测试框架有哪些
    java中的单元测试框架有:1.JUnit,java程序测试框架;2.Spock,用于测试和规范java应用程序的框架;3.TestNG,自动化测试框架;java中的单元测试框架有以下几种JUnitJUnit是一个java程序的测试框架,可...
    99+
    2022-10-22
  • python单元测试框架有哪些
    python中的单元测试框架有unittest、nose和pytest三种unittestunittest是Python标准库中自带的单元测试框架,其具有支持自动化测试、测试用例的初始化和关闭、测试用例的聚合等功能。nosenose是一个P...
    99+
    2022-10-20
  • Junit 单元测试(详解)
    Junit 单元测试 前言一、概述1. JUnit 基本概念2. JUnit 特点和用法3. 如何编写和运行单元测试 二、安装和配置 Junit三、编写和运行 Junit 测试四、运行和调试 Junit 测试五、使用 Junit...
    99+
    2023-08-21
    junit 单元测试 java
  • python中unittest单元测试的步骤分析
    这篇文章主要讲解了“python中unittest单元测试的步骤分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中unittest单元测试的步骤分析”吧!说明导入unittes...
    99+
    2023-06-20
  • 深入理解Python单元测试unittest的使用示例
    软件测试 大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施。正像软件熵(software entro...
    99+
    2022-06-04
    示例 单元测试 Python
  • Android单元测试框架Robolectric3.0介绍(1)
      一、关于Robolectric3.0   作为一个软件开发攻城狮,无论你多不屑多排斥单元测试,它都是一种非常好的开发方式,且不谈TDD,为自己写的代码负责,测试自己写...
    99+
    2022-06-06
    android单元测试 测试 Android
  • Android单元测试框架Robolectric3.0介绍(一)
      一、关于Robolectric3.0   文章中的所有代码在此:https://github.com/geniusmart/LoveUT,由于Robolectric3...
    99+
    2022-06-06
    android单元测试 测试 Android
  • php的单元测试框架有哪些
    php中常见的单元测试框架有PHPUnit、SimpleTest、Peridot PHPUnit PHPUnit是一款使用php开发的单元测试框架,由Sebastian Bergmann创建,PHPUnit提供了一系列共同、有用的功能来实现...
    99+
    2022-10-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作