自动化测试 | UnitTest框架

news2024/11/25 19:24:52

1. TestCase(测试用例)

步骤:
            1. 导包 import unittest
            2. 新建测试类并继承 unittest.TestCase
            3. 测试方法必须以test字母开头

运行:
            1. 运行测试类所有的测试方法,光标定位到类当前行右键运行
            2. 运行单个测试方法:光标放到测试方法当前行。

测试脚本:

# 导包
import unittest

# 定义乘法函数
def sub(x, y):
    return x*y

# 定义测试类 并 继承
class Test01(unittest.TestCase):
    # 定义测试方法
    def test_sub01(self):
        result = sub(1, 2)
        print("test1:", result)

    def test_sub02(self):
        result = sub(3, 2)
        print("test1:",result)
        print("__name__内置变量获取当前运行的模块名称:", __name__)

    def test_sub03(self):
        result = sub(5, 2)
        print("test1:", result)



if __name__ == "__main__":
    unittest.main()

运行效果:

2.TestSuite(测试套件),TextTestRunner(以文本的形式运行测试用例)

步骤: 
            1. 导包
            2. 获取测试套件对象 suite = unittest.TestSuite()
            3. 调用addTest()方法 添加测试用例 

添加测试用例方法: 
            1. suite.addTest(类名("方法名称")) # 添加指定类中指定的测试方法
            2. suite.addTest(unittest.makeSuite(类名)) # 添加指定类中所有已test开头的方法

TextTestRunner:
        说明:执行测试套件方法
        步骤: 
            1. 导包
            2. 实例化后去执行套件对象 runner = unittest.TextTestRunner()
            3. 调用run方法去执行 runner.run(suite)
 

测试脚本:

test09.py

import unittest

class Test02(unittest.TestCase):
    def test01(self):
        print("test01执行")

    def test02(self):
        print("test02执行")

    def test03(self):
        print("test03执行")

    def test04(self):
        print("test04执行")


if __name__ == "__main__":
    print("__name__的值:", __name__)

run_main.py

import unittest
from scripts.test09 import Test02
# 实例化 suite
suite = unittest.TestSuite()
# 调用添加方法
suite.addTest(Test02("test01"))

# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

测试结果:

3.TestLoader(批量执行测试用例-搜索指定文件夹内指定字母开头的模块) 

TestLoader:
        说明:
            1. 将符合条件的测试方法添加到测试套件中
            2. 搜索指定目录文件下指定字母开头的模块文件下test开始的方法,并将这些方法添加到测试套件中,最后返回测试套件
        操作: 
            1. 导包
                    import unittest
            2. 调用TestLoader()
                    写法1. suite = unittest.TestLoader().discover("指定搜索的目录文件","指定字母开头模块文件")
                    写法2. suite = unittest.defaultTestLoader.discover("指定搜索的目录文件","指定字母开头模块文件") 【推荐】
                    注意:如果使用写法1,TestLoader()必须有括号。
            3. 执行测试套件
                    unittest.TextTestRunner().run(suite)

测试脚本:

# 导包
import  unittest
# 调用方法
suite = unittest.TestLoader().discover(r"D:\Learn\autoTest\rescource\cases")

# 执行 套件 方法 TextTestRunner
unittest.TextTestRunner().run(suite)

测试效果:

TestSuite与TestLoader区别:
        共同点:都是测试套件
        不同点:实现方式不同
        TestSuite: 要么添加指定的测试类中所有test开头的方法,要么添加指定测试类中指定某个test开头的方法
        TestLoader: 搜索指定目录下指定字母开头的模块文件中以test字母开头的方法并将这些方法添加到测试套件中,最后返回测试套件
 

4.Fixture(固定装置(两个固定的函数,一个初始化时使用,一个结束时使用))

说明:装置函数(setUp、tearDown)
    级别:
        1). 函数级别 def setUp() / def tearDown()
                特性:几个测试函数,执行几次。每个测试函数执行之前都会执行 setUp,执行之后都会执行tearDwon
        2). 类级别 def setUpClass() / def tearDownClass()
                特性:测试类运行之前运行一次setUpClass 类运行之后运行一次tearDownClass
                注意:类方法必须使用 @classmethod修饰
        3). 模块级别:def setUpModule() / def tearDownModule()
                特殊:模块运行之前执行一次setUpModule ,运行之后运行一次tearDownModule
                
    提示:
        无论使用函数级别还是类级别,最后常用场景为:
            初始化:
                1. 获取浏览器实例化对象
                2. 最大化浏览器
                3. 隐式等待
            结束:
                关闭浏览器驱动对象

测试脚本:

import unittest
def setUpModule():
    print("SetUpModule")

def tearDownModule():
    print("tearDownModule")

class Test03(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass被执行")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass被执行")

    def setUp(self):
        print("setUp被执行")

    def tearDown(self):
        print("tearDown被执行")

    def test01(self):
        print("test01被执行")

    def test02(self):
        print("test02被执行")

class Test04(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("setUpClass被执行")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass被执行")

    def setUp(self):
        print("setUp被执行")

    def tearDown(self):
        print("tearDown被执行")

    def test01(self):
        print("test01被执行")

    def test02(self):
        print("test02被执行")

测试效果:

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

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

相关文章

国家海洋环境预报中心李本霞:全国首个海浪智能预报系统已投入业务化运行,AI助力海浪预报多项突破

近日,在第 20 届 CCF HPC China 2024 大会中,第六届海洋数值预报与高性能计算论坛圆满举办。在本次大会上,国家海洋环境预报中心海浪预报室主任李本霞以「人工智能在海浪预报中的应用」为主题展开演讲, HyperAI超神经在不违原意的…

配置MAC地址安全

概述 MAC地址安全配置是确保网络设备和通信安全的重要措施,通过限制、监控和管理设备的物理地址来防止未授权访问和潜在的网络威胁。以下是对MAC地址安全的概述: 基本概念 定义:MAC地址(Media Access Control Address&#xff09…

某音商品详情sku示例参考,API说明

以下提供某音(即抖音)商品详情SKU(Stock Keeping Unit,库存量单位)的示例参考以及API的详细说明: 一、某音商品详情SKU示例参考 在抖音电商平台中,商品详情页通常会展示商品的SKU信息&#xff…

线性自抗扰控制(LADRC)系统算法框图

非线性ADRC(NLADRC)详细算法框图和源代码请参考专栏系列文章,常用链接如下: 1、NLADRC自抗扰控制 NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-CSDN博客文章浏览阅读1.6k次,点赞2次,收藏7次。本文介绍了如何将ADRC自抗扰控制算法从Simulink…

计算机毕业设计 | vue+SpringBoot图书借阅管理系统 图书管理系统(附源码)

1, 概述 1.1 课题背景 随着现在科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用越来越重要,在我国图书馆计算机等 信息技术的应用起步…

MySQL数据库表分区

1.背景 当前数据库中,数据库表已经存在,同时该数据库表的数据还在每天不断增长。因为数据库表太大,导致检索过程耗时,为提高检索效率,故对相关数据库表进行分区处理。 2.MySQL分区 分区就是将一个表分解成多个区块进…

补充面试知识点

jwt鉴权 实现登录流程 jwt鉴权登录实现步骤(JWT工具类拦截器前端配置)——前后端鉴权方案和使用_jwtsigner-CSDN博客 就是前端每一次刷新页面的时候 都判断一下发来的请求头里边的token信息 通过token识别用户信息和登录状态也就是id 线程池的执行流程 …

Visual Studio2022 Razor格式化慢

菜单:工具-->选项-->文本编辑器-->HTML 设置使用旧版本Razor 为True Razor文件格式化变很快

师生共评作业管理:Spring Boot系统的设计与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

深入理解 JDK 的 Optional 类

深入理解 JDK 的 Optional 类 深入理解 JDK 的 Optional 类1. 什么是 Optional?1.1 主要构造方法示例 2. Optional 的常用方法2.1 判断值是否存在示例2.2 获取值示例2.3 进行操作示例 3. 使用场景3.1 避免 null 值示例3.2 提高代码可读性3.3 与流结合示例 4. 注意事…

利用C++封装鼠标轨迹算法为DLL:游戏行为检测的利器

在现代软件开发中,鼠标轨迹模拟技术因其在自动化测试、游戏脚本编写等领域的广泛应用而备受青睐。本文将介绍如何使用C语言将鼠标轨迹算法封装为DLL(动态链接库),以便在多种编程环境中实现高效调用,同时探讨其在游戏行…

十一长假!迷你主机小巧便携成为假期新宠。

在十.一国庆长假期间,出游成为许多人的首选活动,你是否已按捺不住内心的悸动,渴望一场说走就走的旅行?但面对繁重的行李与有限的背包空间,如何在享受旅途美景的同时,又不失娱乐与工作的便捷性?今…

Chrome与Firefox浏览器HTTP自动跳转HTTPS的解决方案

一、背景介绍 随着网络安全意识的不断提高,越来越多的网站开始采用HTTPS协议,以确保数据传输的安全性。然而,有时用户在浏览网页时,可能会遇到HTTP请求被自动跳转至HTTPS的情况导致网站打不开,提示安全问题&#xff0…

【Linux】Windows搭建CentOS7环境

【重要提示】在安装CentOS之前,请确保Vmware虚拟机已准备就绪 【准备工作】 一、获取CentOS 7镜像文件 首先,从阿里云的开源镜像站点下载CentOS 7的镜像文件,点击以下链接即可开始下载: 阿里云镜像开源 二、安装VMware Works…

2024年【A特种设备相关管理】模拟试题及A特种设备相关管理作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理模拟试题参考答案及A特种设备相关管理考试试题解析是安全生产模拟考试一点通题库老师及A特种设备相关管理操作证已考过的学员汇总,相对有效帮助A特种设备相关管理作业考试题库学员顺利通…

Could not get JDBC Connection: wait millis 10000, active 500

Could not get JDBC Connection: nested exception is com,alibaba,druid.pool,GetConnectionTimeoutException: wait millis 10000, active 500 1、生产突然出现这样的问题,后经过各种分析查找 jmap -dump:formatb,filewar_l.hporf 10333 ‌jmap -dumpb命令用于生成…

Leetcode 数组中第 k 大的元素

使用最小堆 (min-heap) 来解决该问题 代码逻辑: 初始化最小堆并插入前 K 个元素: 首先,将数组的前 K 个元素插入到堆中。此时,堆的大小为 K,堆顶元素是这 K 个元素中最小的。 遍历剩余的数组元素: 对于数…

VMware ESXi 8.0d 发布下载 - 领先的裸机 Hypervisor

VMware ESXi 8.0d 发布下载 - 领先的裸机 Hypervisor ESXi 8.0 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮) OEM 定制版 请访问原文链接:https://sysin.org/blog/vmware-esxi-8/ 查看最新版。原创作品,转载请保留出处。…

基于Python的程序员薪资数据分析和可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Detectron2和LSTM进行人体动作识别

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝,拥有2篇国家级人工智能发明专利。 社区特色…