pythonUnitTest框架

UnitTest框架

UnitTest参考文章:https://blog.csdn.net/qq_54219272/article/details/123265794

  1. 目标(看完UnitTest框架该有的收获)

    • 掌握UnitTest框架的基本使用方法
    • 掌握断言(判断实际结果和预期结果是否一致)的使用方法
    • 掌握如何实现参数化(用例代码写一份,传入不同的数据即可)
    • 掌握测试报告的生成

  2. UnitTest的介绍

    • 框架(framework):解决一类事情的功能集合(UnitTest解决单元测试)很多功能实现的半成品

    • 需要按照规定书写代码

    • UnitTest是python自带的单元测试框架,用来做单元测试,只要安装python就可以使用。第三方框架(pytest)

    • 对于测试人员来讲是自动化脚本的执行框架(管理运行多个测试用例)

  3. 框架特点:

    • 组织多个用例的执行
    • 提供丰富的断言方法(代替人工判断预期结果和实际结果是否一致)
  4. 核心要素(组成,5部分)

    • testCase(测试用例最核心的模块,是unitest的组成部分,不是手工和自动化中的用例(Test Case)

      • 功能:每个testCase都是一个代码文件,在此代码文件中书写真正的用例

      • 示例

        '''
        - 导包unitTest
        - 自定义测试类
        - 在测试类中书写测试方法,一个测试用例一个方法
        - 执行测试用例
        '''
        import unittest
        # 自定义类继承TestCase
        class testDemo(unittest.TestCase):def test_method1(self):print("测试方法1")def test_method2(self):print("测试方法2")
        
    • testSuite(测试套件)

      • 功能:管理组装打包testCase(测试用例)
    • testRunner(测试执行)

      • 功能:执行testSuite
    • testLoader(测试加载)

      • 功能:对testsuite测试套件的补充,管理打包,组装多个测试用例

      • 示例

        import unittest
        from test_case import testDemo
        from test_case01 import testDemo1
        from test_case02 import testDemo2# 实例化suite套件对象
        suite = unittest.TestSuite()# 使用套件对象添加用例方法
        suite.addTest(testDemo('test_method1'))
        suite.addTest(testDemo('test_method2'))
        suite.addTest(testDemo1('test_method1'))
        suite.addTest(testDemo1('test_method2'))
        suite.addTest(testDemo2('test_method1'))
        suite.addTest(testDemo2('test_method2'))# 实例化运行对象
        runner = unittest.TextTestRunner()# 运行对象
        runner.run(suite)
        
        # 实例化suite套件对象
        suite = unittest.TestSuite()# 使用套件对象添加用例方法
        # 将一个测试类中的所有方法添加
        #加载case类时unittest点不出makeSuite,查找资料后得到解答是Python升级到3版本后将
        # unittest.makeSuite()
        # 改为了
        unittest.TestLoader().loadTestsFromTestCase(testDemo)
        suite.addTest(unittest.makeSuite(testDemo))# 实例化运行对象
        runner = unittest.TextTestRunner()# 运行对象
        runner.run(suite)
    • Fixture(测试夹具)

      • 书写在TestCase中的一个代码结构,可以在每个方法执行前后都会执行的内容
      • 例如:登录的测试用例:1打开浏览器,2输入网址
      # 方法级别(每个用例代码,测试方法前后都会调用)
      def setUp(self):# pass
      #
      def traedown(self):#pass# 类级别(在那个测试类中所有方法执行前后,都会自动调用)
      # 类方法
      @classmethod
      def setUpClass(cls):pass
      @classmethod
      def trardownClass(cls):pass# 模块级别(写在类外边直接定义模块)
      def setUpModule():pass
      # 
      def teardownMethod():pass
      '''
      案例:登录功能
      '''import unittestclass TestLogin(unittest.TestCase):def setUp(self) -> None:print("输入网址...")def tearDown(self) -> None:print("关闭当前页面...")@classmethoddef setUpClass(cls) -> None:print('1.打开浏览器...')@classmethoddef tearDownClass(cls) -> None:print('5.关闭浏览器...')def test_1(self):print("输入用户名密码验证码,点击登录1")def test_2(self):print("输入用户名密码验证码,点击登录2")'''
      输出结果:
      1.打开浏览器...
      输入网址...
      输入用户名密码验证码,点击登录1
      关闭当前页面...
      输入网址...
      输入用户名密码验证码,点击登录2
      关闭当前页面...
      5.关闭浏览器..
      '''
      
  5. 使用框架的步骤

    • 导包unitTest
    • 自定义测试类
    • 在测试类中书写测试方法
    • 执行测试用例
  6. UnitTest断言

    1. 什么是断言:代替人工自动判断预期结果和世界结果是否一致

    2. 断言结果

      • true:用例通过
      • false:代码会抛出异常,用例不通过
    3. 为什么使用断言

      • 提高测试xiaol
      • 实现自动化
    4. UnitTest中常用的断言方法

      • assertEqual

        self.assertEqual(预期结果,实际结果)
        1. 如果相等,用例通过
        2. 如果不相等,用例不通过,抛出异常
        
      • assertIn

        self.assertIn(预期结果,实际结果)
        1. 包含,通过
        2. 不包含,不通过
        
    5. 跳过

      • 对于一些未完成的或者不满足测试条件的测试函数和测试类,不想执行,可以使用跳过使用方法,装饰器完成
      @unnittest('跳过原因')
      @unnittestif(条件,'跳过原因')
      
  7. 测试报告

    1. HETMLTestRunner第三方测试报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp与vue的区别

Uniapp和Vue是两个相关但不完全相同的概念。 Uniapp是一个基于Vue.js的跨平台框架,用于开发多端应用,包括小程序、H5、App等。它通过使用Vue的语法和组件化开发模式,实现了一套代码可以在多个平台上运行的能力。Uniapp提供了一系列的API和组…

[Verilog] Verilog 数据类型

主页: 元存储博客 文章目录 前言1. bit 类型2. reg 类型3 wire类型4 integer类型5 real类型6 parameter类型7 enum类型8 array 类型9 向量类型10 time 类型11 string 类型 前言 在 Verilog 中,有几种不同的数据类型可以用于声明和操作变量。 在 Verilo…

系列十、存储引擎

一、存储引擎 1.1、概述 大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,它们都有各自的引擎,引擎是它们最为核心的组件。…

攻防世界--easyphp

浅学一下吧~ 发开题目是这样的 最烦的就是代码审计&#xff0c;还是看得少 多审计两篇代码就好了&#xff08;还是因为自己会的不多&#xff09; <?php highlight_file(__FILE__);//将当前文件的源代码进行高亮显示 $key1 0;//将变量$key1的值初始化为0 $key2 0;//将变量…

第一个程序(STM32F103点灯)

点亮LED 看原理图确定控制LED的引脚看主芯片手册确定如何设置/控制引脚写程序 LED有很多种&#xff0c;像插脚的&#xff0c;贴片的。 它们长得完全不一样&#xff0c;因此我们在原理图中将它抽象出来。 嵌入式系统中&#xff0c;一个LED的电阻非常低&#xff0c;I U/R&…

Flink系列之:Flink 1.8.0 中的状态 TTL:如何在 Apache Flink 中自动清理应用程序状态

Flink系列之&#xff1a;Flink 1.8.0 中的状态 TTL&#xff1a;如何在 Apache Flink 中自动清理应用程序状态 一、状态的瞬态性质二、用于持续清理应用程序状态的状态 TTL三、倒垃圾四、保持完整状态快照干净五、堆状态后端的增量清理六、RocksDB 后台压缩以过滤掉过期状态七、…

12.5,12.15AVL树更新,定义,插入

定义平衡因子为右子树高度减去左子树高度 AVL树插入分为两步&#xff1a; 按照二叉搜索树的方式插入新节点调整平衡因子 对于平衡因子的调整&#xff0c;在插入之前&#xff0c;所有节点的平衡因子分为三种情况&#xff1a;0&#xff0c;1&#xff0c;-1插入后&#xff0c;新…

EasyExcel 简单导入

前边写过使用easyexcel进行简单、多sheet页的导出。今天周日利用空闲写一下对应简单的导入。 重点&#xff1a;springboot、easyExcel、桥接模式&#xff1b; 说明&#xff1a;本次使用实体类student&#xff1a;属性看前边章节内容&#xff1b; 1、公共导入service public …

ArkTS编译时遇到arkts-no-obj-literals-as-types错误【Bug已解决-鸿蒙】

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2此Bug解决方案总结项目场景: 在开发鸿蒙项目过程中,遇到了arkts-no-obj-literals-as-types,总结了自己和网上人的解决方案,故写下这篇文章。 遇到问题: rkTS编译时遇到arkts-no-obj-literals-as-type…

【数据结构】(二叉树)计算结点|叶子结点|高度|第K层结点数

目录 概念&#xff1a; 特殊的二叉树 二叉树的性质 二叉树的存储结构 二叉树的创建 二叉树遍历 前序&#xff1a; 中序&#xff1a; 后序&#xff1a; 计算结点数 计算叶子结点数 计算树的高度&#xff08;深度&#xff09; 计算第K层结点数 概念&#xff1a; 一颗…

PVE系列-防火墙的免费安静之旅IPfire

Ventoy一款引导盘可以引导各种启动盘安装盘的工具https://www.ventoy.net/cn/index.html 在它的兼容iso的列表 中发现了Ipfirehttps://wiki.ipfire.org/ &#xff0c;本来用着openwrt也挺好&#xff0c;忍不住的虚拟机尝了尝鲜&#xff0c;发现的功能有2&#xff0c; 安全吧&a…

虚拟化之安全虚拟化

虚拟化首次引入是在Armv7-A架构中。那时&#xff0c;Hyp模式&#xff08;在AArch32中相当于EL2&#xff09;仅在非安全状态下可用。当Armv8.4-A引入时&#xff0c;添加了对安全状态下EL2的支持作为一个可选特性。 当处理器支持安全EL2时&#xff0c;需要使用SCR_EL3.EEL2位从E…

React 表单与事件

大家好&#xff0c;欢迎来到 React 表单与事件课程。在这一课中&#xff0c;我们将学习如何在 React 中使用表单和事件。 表单 在 HTML 中&#xff0c;表单元素用于收集用户输入。在 React 中&#xff0c;表单元素与其他 DOM 元素有所不同&#xff0c;因为它们会保留一些内部…

linux文件打包和压缩

7.2 文件打包和压缩 7.2.1 tar tar&#xff08;英文全拼&#xff1a;tape archive &#xff09;命令用于备份文件。 ​ tar 是用来建立&#xff0c;还原备份文件的工具程序&#xff0c;它可以加入&#xff0c;解开备份文件内的文件。 ​ tar命令是Unix/Linux系统中备给文件的…

NetSuite 智能商品推荐(Intelligent Recommendations)

本周在一个客户环境里&#xff0c;发现销售订单中有个Intelligent Recommendations的按钮。 本以为是客户新装的一个SuiteApp&#xff0c;仔细研究一下发现还不是。是个我们忽略的一个内建新功能。 Intelligent Recommendations&#xff0c;是2023.1版本推出的新功能。主要目的…

PHP代码审计之实战审代码篇1

本章代码来之各种php的cms历史漏洞源码&#xff0c;供小伙伴们学习, 本次三题 1. 仔细观察如下代码&#xff0c;思考代码有什么缺陷&#xff0c;可能由此引发什么样的问题&#xff1f; //检测旧密码是否正确 if($password ! ) {$oldpassword md5(md5($oldpassword));$r $do…

Qt 表格相关API

1.文本框 限制输入数据类型&#xff08;如仅英文&#xff09; QValidator* validator new QRegExpValidator(QRegExp("[a-zA-Z]"), lineText); // 创建正则表达式验证器lineText->setValidator(validator); // 将验证器设置给 QLineEdit QLineEdit&#xff1a;单…

(2023|ICLR,文本反演,LDM,伪词)一个词描述一张图像:使用文本反演个性化文本到图像的生成

An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion 公纵号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方…

react内置组件之<StrictMode></StrictMode>

1、作用&#xff1a; <StrictMode> 是 React 提供的一个组件&#xff0c;用于帮助开发者在开发过程中检测潜在的问题&#xff0c;并修复一些常见的警告。 使用 <StrictMode> 组件包裹应用程序或组件可以启用一些额外的检查和警告。它可以帮助你捕获可能的错误、发…

QSqlQueryModel

QSqlQueryModel 是 Qt 框架中的一个模型类&#xff0c;用于在 Qt 的视图组件&#xff08;如 QTableView、QListView&#xff09;中显示数据库查询结果。 QSqlQueryModel 继承自 QAbstractTableModel&#xff0c;它通过执行 SQL 查询并将结果存储在内部数据结构中&#xff0c;提…