当前位置: 首页 > news >正文

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第三方测试报告

相关文章:

pythonUnitTest框架

UnitTest框架 UnitTest参考文章:https://blog.csdn.net/qq_54219272/article/details/123265794 目标(看完UnitTest框架该有的收获) 掌握UnitTest框架的基本使用方法掌握断言(判断实际结果和预期结果是否一致)的使用方…...

微服务最佳实践:构建可扩展且高效的系统

微服务架构彻底改变了现代软件开发,提供了无与伦比的敏捷性、可扩展性和可维护性。然而,有效实施微服务需要深入了解最佳实践,以充分发挥微服务的潜力,同时避免常见的陷阱。在这份综合指南中,我们将深入研究微服务的关…...

源码赏析: 数据结构转换工具 configor (一)

一、configor 先贴地址 configor,先看configor的特性: Header-only & STL-likeCustom type conversion & serializationComplete Unicode supportASCII & Wide-character support 说白了,这个工具用于自定义类型的转换和序列化…...

使用java调用python批处理将pdf转为图片

你可以使用Java中的ProcessBuilder来调用Python脚本,并将PDF转换为图片。以下是一个简单的Java代码示例,假设你的Python脚本名为pdf2img.py: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…...

机器学习——自领域适应作业

任务 游戏里面的话有很多跟现实不一样的情况。 想办法让中间的特征更加的接近,让feat A适应feat B,产生相对正常的输出。 在有标签数据和没有数据的上面进行训练,并能预测绘画图像。 数据集 训练5000张总数,每类有500张测试100…...

ValidatorUtil字段验证工具类

字段验证工具类 package com.aa.bb.cc.common.utils;import com.aa.bb.cc.common.exception.BusinessException; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils;import javax.validation.ConstraintViolation; import…...

Python 自动化之处理图片(一)

图片美化与大小调整 文章目录 图片美化与大小调整前言一、基本结构二、引入库三、用户输入模块四、图片美化模块五、大小调整模块总结 前言 本文主要分为两部分。一是图片的美化吧算是,主要从亮度、对比、色彩饱和度、锐度四个方面进行美化;二是图片的像…...

Axure动态面板的应用与ERP系统登录界面、主页左侧菜单栏、公告栏的绘制

目录 一、动态面板 1.1 简介 1.2 使用动态面板的原因 二、动态面板之轮播图实现案例 2.1 完成步骤 2.2 最终效果 三、动态面版之多方式登录案例 四、动态面板之后台主界面左侧菜单栏 五、ERP登录界面 六、ERP主界面菜单栏 七、ERP公告栏 八、登录页面跳转公告栏 一…...

电机(按工作电源分类)介绍

文章目录 一、什么是电机?二、按工作电源分类直流电机1.直流有刷电机结构工作原理:直流减速电机 2.直流无刷电机结构工作原理: 3.总结结构和工作原理:效率和功率损耗:调速性能:寿命和可靠性:应用…...

Web前端JS通过使用AudioWorkletNode() 获取 Video/Audio 视音频声道(左右声道|多声道)

写在前面: 在之前的博文Web前端JS如何获取 Video/Audio 视音频声道(左右声道|多声道)、视音频轨道、音频流数据中,介绍了通过使用AudioContext.createScriptProcessor()方法来获取视音频音轨(声道)数据。但由于W3C不再推荐使用该A…...

力扣LeetCode75题

为了面试,小伙伴们可以平时练下算法题,有备无患。 LeetCode 75 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台...

如何向领导汇报工作?一篇文章告诉你!

给领导汇报工作可以从两个方面考虑:一是工作汇报文件的制作;一是汇报方式。一份全面、清晰且准确的文件,加上一目了然的、科技满满的汇报方式,相比领导不满意都难~下面就让你全部get! 一、工作汇报的文字内…...

GPT-4.5!!!

GPT-4 还没用明白,GPT-4.5 就要发布了。 最近,OpenAI 泄露了 GPT-4.5 的发布页面,除了进一步增强复杂推理和跨模态理解,GPT-4.5 增加了一个更加强大的功能——3D。 3D 功能的进一步支持,也就意味着多模态最后一块版图…...

kafka入门(四):kafka生产者发送消息

创建生产者实例和构建消息之后,就可以开始发送消息了。 发送消息主要有三种模式:发后即忘、同步、异步。 发后即忘: 就是直接调用 生产者的 send方法发送。 发后即完,只管往 kafka中发送消息,而不关心消息是否正确…...

redis集群模糊获取缓存redisKey

redis cluster集群删除指定模糊redisKey的信息 **public int deleteRedisKey(String key){AtomicReference<Integer> result new AtomicReference<>(0);busnessLogger.info("开始删除指定业务的模糊Key,deleteRedisKey:{}",key);try{Set<HostAndPor…...

100GPTS计划-AI翻译TransLingoPro

地址 https://poe.com/TransLingoPro https://chat.openai.com/g/g-CfT8Otig6-translingo-pro 测试 输入: 我想吃中国菜。 预期翻译: I want to eat Chinese food. 输入: 请告诉我最近的医院在哪里。 预期翻译: Please tell me where the nearest hospital is. 输入: 明天…...

Linux install manual 1Panel

前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括: 快速建站:深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定;高效管理:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;安全可…...

母婴服务品牌网站的效果如何

随着三胎政策落实及人们生活水平提升&#xff0c;母婴市场发展迅速上升&#xff0c;加之以90后、00后适龄生育的人群悦己消费加强&#xff0c;孕前孕后及婴儿本身就会使用相当好的服务&#xff0c;这也为市场带来了较大机会。 近几年&#xff0c;老品牌在不断加力&#xff0c;…...

C语言--有一个3*4的矩阵,求出其中最大值的那个元素的值,以及其所在的行号和列号

一.题目描述 有一个3*4的矩阵&#xff0c;要求求出其中最大值的那个元素的值&#xff0c;以及其所在的行号和列号 比如&#xff1a;给定一个3*4的矩阵如下 输出结果&#xff1a;最大值为 12 &#xff0c;行号为3&#xff0c; 列号为2 二.思路分析 打擂台算法&#xff1a; 先思考…...

安全算法(二):共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换

安全算法&#xff08;二&#xff09;&#xff1a;共享密钥加密、公开密钥加密、混合加密和迪菲-赫尔曼密钥交换 本章介绍了共享密钥加密、公开密钥加密&#xff0c;和两种加密方法混合使用的混合加密方法&#xff1b;最后介绍了迪菲-赫尔曼密钥交换。 加密数据的方法可以分为…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...