当前位置: 首页 > 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;最后介绍了迪菲-赫尔曼密钥交换。 加密数据的方法可以分为…...

MYSQL练题笔记-高级字符串函数 / 正则表达式 / 子句-简单3题

这个系列先写了三题&#xff0c;比较简单写在一起。 1.修复表中的名字相关的表和题目如下 看题目就知道是有关字符串函数的&#xff0c;于是在书里查询相关的函数&#xff0c;如下图&#xff0c;但是没有完全对口的函数&#xff0c;所以我还是去百度了。 然后发现结合上面的4个…...

vue扭蛋机抽奖游戏

简易扭蛋机demo 这是一个使用CSS3和JavaScript实现的扭蛋机抽奖游戏。该游戏的主要功能是通过点击按钮进行抽奖,抽奖过程中会显示滚动的小球,最终随机停止并显示一个中奖小球。 该游戏的抽奖过程如下: 当用户点击抽奖按钮时,首先检查当前是否正在进行抽奖任务或者当前有小…...

代码随想录27期|Python|Day16|二叉树|104.二叉树的最大深度|111.二叉树的最小深度|222.完全二叉树的节点个数

二叉树专题&#xff0c;重点掌握后续的递归和中间节点的处理。 104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 本题在前一章已经解决了层序遍历的解法&#xff0c;现在来聊一下递归法。 首先需要明确两个概念&#xff1a;深度和高度。&#xff08;注意&…...

༺༽༾ཊ—设计-简介-模式—ཏ༿༼༻

我对设计模式的理解就是一种可复用的且面向对象的设计工具&#xff0c;它与代码无关&#xff0c;我们可以利用设计模式设计出高内聚、低耦合的应用程序&#xff0c;并且最大程度实现程序的复用&#xff0c;以应对复杂的需求变化。 程序的可复用性就是用已存在的程序模块进行更新…...

Matplotlib快速入门,Python通用的绘图工具库上手

Matplotlib是一个用于Python编程语言的综合性绘图库。 它可以生成各种类型的图表&#xff0c;包括折线图、条形图、散点图、直方图、饼图等。Matplotlib支持多种数据格式&#xff0c;包括NumPy数组、Pandas DataFrame和CSV文件。它还可以从URL读取数据。 Matplotlib可以在交互…...

Linux 基本语句_16_Udp网络聊天室

代码&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h> #include <string…...

使用ffmpeg命令进行视频格式转换

1 ffmpeg介绍 FFmpeg 是一个非常强大和灵活的开源工具集&#xff0c;用于处理音频和视频文件。它提供了一系列的工具和库&#xff0c;可以用于录制、转换、流式传输和播放音频和视频。 FFmpeg 主要特点如下&#xff1a; 格式支持广泛&#xff1a;FFmpeg 支持几乎所有的音频和视…...

Mac安装Adobe AE/pr/LR/ai/ps/au/dw/id 2024/2023报错问题解决(常见错误:已损坏/2700/146/130/127)

1.打开允许“允许任何来源” 如何打开允许任何来源&#xff1f;在 Finder 菜单栏选择 【前往】 – 【实用工具 】&#xff0c;找到【终端】程序&#xff0c;双击打开&#xff0c;在终端窗口中输入&#xff1a;sudo spctl --master-disable 输入代码后&#xff0c;按【return …...

Python三级 每周练习题31

如果你感觉有收获&#xff0c;欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 练习一: 作业1:编写程序&#xff0c;在下面的字典中找出身高137的同学并输出姓名&#xff0c;如果没找到&#xff0c; 输出没有 a{‘小赵’:136,‘小钱’:141,‘小孙’:146,‘小李’:13…...

【DataSophon】大数据服务组件之Flink升级

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…...

淘宝网站建设/中国互联网电视app下载安装

SimplEOS是专为EOS生态系统制作的钱包&#xff0c;旨在与EOS.IO软件中的所有功能完全集成。 EOS RiO以安全性和透明度的理念开发出SimplEOS。它是一个可以与最流行的操作系统&#xff08;Windows&#xff0c;Linux和MacOS&#xff09;兼容的桌面应用程序。 用户体验也是Simpl…...

wordpress更改主机/优化公司排行榜

http://poj.org/problem?id3348 题目大意&#xff1a;用已给出的点围出面积最大的凸包&#xff0c;输出面积/50&#xff08;向下取整&#xff09; —————————————————————————— 第一道凸包&#xff1f;以及不知道第几次的奶牛题…… 显然裸题&#x…...

seo做的最好的十个网站/泰安seo网络公司

flex 结合sandy引擎创作 &#xff08;1&#xff09; http://blog.csdn.net/hero82748274/archive/2009/01/22/3850800.aspx 之前利用flex创建一个立方体&#xff0c;但是还没有贴图&#xff0c;以及互动。在这里我们添加一些额外的操作&#xff0c;包括鼠标 和键盘的操作。以及…...

做动画人设有哪些网站可以借鉴/seo网络推广课程

首先是MySQL的安装&#xff0c;在此不多赘述。我选择了MOSH老师的Complete SQL Mastery作为学习材料&#xff0c;基础易懂。网址为https://codewithmosh.com。正式进入MySQL&#xff0c;每次打开应用时&#xff0c;画面是这样子的&#xff1a;可以创建新connections&#xff0c…...

网站丢了数据库还在/网站建设企业

通过javap工具查看生成的class文件&#xff0c;会发现&#xff1a;同步代码块使用了monitorenter和monitorexit指令实现同步&#xff1b;同步方法中依靠方法修饰符上的ACC_SYNCHRONIZED实现同步。无论哪种实现方式&#xff0c;其过程都是互斥的&#xff0c;同一时刻只有一个线程…...

没域名可以用wordpress么/南山网站seo

描述 在二维空间中有许多球形气球。 对于每个气球&#xff0c;提供的输入是水平直径的起点和终点坐标。 由于它是水平的&#xff0c;因此y坐标无关紧要&#xff0c;因此直径的起点和终点的x坐标就足够了。 起点总是小于终点。 最多将有10^4个气球。 可以沿x轴从不同点垂直向上…...