练习unittest+Fixture实现

练习01

  1. 创建⼀个⽬录 case, 作⽤就是⽤来存放⽤例脚本,
  2. 在这个⽬录中创建 5 个⽤例代码⽂件 , test_case1.py
  3. 使⽤ TestLoader 去执⾏⽤例
    将来的代码 ⽤例都是单独的⽬录中存放的
    test_项⽬_模块_功能.py

在这里插入图片描述

test_case1.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法1')

test_case2.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法2')

test_case3.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法3')

test_case4.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法4')

test_case5.py

# 1. 导包 unittest
import unittest
# 2. 定义测试类, 只要继承 unittest.TestCase 类, 就是测试类
class TestDemo(unittest.TestCase):
#3.书写测试方法,方法中的代码就是真正用例代码,方法名必须以test开头
   def test_metho(self):
       print('测试方法5')

hm_05_test.py

# 1. 导包 unittest
import unittest
# 2. 实例化套件对象 unittest.TestSuite()
suite = unittest.TestLoader().discover('case', 'test*.py')
# 3.实例化执行对象并执行
unittest.TextTestRunner().run(suite)

TestLoader()
链接: http://t.csdnimg.cn/lLkts

练习02

  1. 定义⼀个 tools 模块, 在这个模块中 定义 add 的⽅法,可
    以对两个数字求和,返回求和结果

  2. 书写⽤例, 对 add() 函数进⾏测试 1, 1, 2 1, 2, 3 3, 4, 7 4, 5, 9
    之前的测试⽅法,直接⼀个 print 这个案例中的 测试⽅法,调⽤ add 函数, 使⽤ if 判断,来判断 预期结果和实际结果是否相符 预期结果 2 3 7 9 实际结果 调⽤ add()

在这里插入图片描述

hm_06_test_add.py

# 1. 导包 unittest
import unittest

from tools import add

# 2. 定义测试类, 只要继承 unittest.TestCase 类
class TestAdd(unittest.TestCase):
    #3.书写测试方法
    def test_1(self):
        """1,1,2"""
        if 2 == add(1, 1):
            print(f'用例 {1}, {1}, {2}通过')
        else:
            print(f'用例 {1}, {1}, {2}不通过')

    def test_2(self):
        if 3 == add(1, 2):
            print(f'用例 {1}, {2}, {3}通过')
        else:
            print(f'用例 {1}, {2}, {3}不通过')

    def test_3(self):
        if 7 == add(3, 4):
            print(f'用例 {3}, {4}, {7}通过')
        else:
            print(f'用例 {3}, {4}, {7}不通过')

    def test_4(self):
        if 9 == add(4, 5):
            print(f'用例 {4}, {5}, {9}通过')
        else:
            print(f'用例 {4}, {5}, {9}不通过')

hm_07_add.py

# 套件和执行
# 1. 导包 unittest
import unittest

from hm_06_test_add import TestAdd
# 2. 实例化套件对象 unittest.TestSuite()
suite = unittest.TestSuite()
# 将 TestAdd 类中的所有测试方法添加到测试套件中
suite.addTest(unittest.makeSuite(TestAdd))
# 使用 TextTestRunner 运行测试套件中的所有测试用例,并将结果输出到标准输出(控制台)
unittest.TextTestRunner().run(suite)

当我们分解这行代码时,我们可以看到它包含了几个关键部分:

  1. unittest.makeSuite(TestAdd): 这部分调用了 unittest 模块中的 makeSuite 函数,它的作用是创建一个测试套件(TestSuite)。makeSuite 函数接受一个测试类作为参数,并自动收集该类中所有以 test 开头的测试方法,并将它们添加到测试套件中。

  2. TestAdd: 这部分是一个测试类的名称,表示我们要将哪个测试类中的测试方法添加到测试套件中。在这个例子中,TestAdd 是一个自定义的测试类。

  3. suite.addTest(...): 这部分是将测试用例(test case)添加到测试套件中的方法。addTest 方法接受一个测试用例对象作为参数,并将其添加到测试套件中。在这个例子中,makeSuite(TestAdd) 返回了一个包含 TestAdd 类中所有测试方法的测试套件,然后我们通过 addTest 方法将这个测试套件添加到另一个测试套件中。

综上所述,suite.addTest(unittest.makeSuite(TestAdd)) 这行代码的作用是将 TestAdd 类中的所有测试方法添加到一个测试套件中。

htools.py

#函数的调用
def add(a, b):
    return a + b

Fixture

⽅法级别 Fixture

在每个⽤例执⾏前后都会⾃动调⽤, ⽅法名是固定的

def setUp(self): # 前置
 # 每个⽤例执⾏之前都会⾃动调⽤
 pass
def tearDown(self): # 后置
 # 每个⽤例执⾏之后 都会⾃动调⽤
 pass
# ⽅法前置 ⽤例 ⽅法后置
# ⽅法前置 ⽤例 ⽅法后置

类级别 Fixture

在类中所有的测试⽅法执⾏前后 会⾃动执⾏的代码, 只执⾏⼀次

# 类级别的 Fixture 需要写作类⽅法
@classmethod
def setUpClass(cls): # 类前置
 pass
@classmethod
def tearDownClass(cls): # 后置
 pass

模块级别Fixture(了解)

模块, 就是代码⽂件
模块级别 在这个代码⽂件执⾏前后执⾏⼀次

# 在类外部定义函数
def setUpModule():
 pass
def tearDownModule():
 pass

Fixture实现

tpshop 登录

  1. 打开浏览器 (⼀次)
  2. 打开⽹⻚,点击登录 (每次)
  3. 输⼊⽤户名密码验证码1,点击登录 (每次, 测试⽅法)
  4. 关闭⻚⾯ (每次)
  5. 打开⽹⻚,点击登录 (每次)
  6. 输⼊⽤户名密码验证码2,点击登录 (每次, 测试⽅法)
  7. 关闭⻚⾯ (每次)
  8. 打开⽹⻚,点击登录 (每次)
  9. 输⼊⽤户名密码验证码3,点击登录 (每次, 测试⽅法)
  10. 关闭⻚⾯ (每次)
  11. 关闭浏览器 (⼀次)

在这里插入图片描述

import unittest
class TestLogin(unittest.TestCase):
 def setUp(self) -> None:
 print('2. 打开⽹⻚, 点击登录')
 def tearDown(self) -> None:
 print('4. 关闭⽹⻚')
 @classmethod
 def setUpClass(cls) -> None:
 print('1. 打开浏览器')
 @classmethod
 def tearDownClass(cls) -> None:
 print('5. 关闭浏览器')
 def test_1(self):
 print('3. 输⼊⽤户名密码验证码1,点击登录 ')
 def test_2(self):
 print('3. 输⼊⽤户名密码验证码2,点击登录 ')
 def test_3(self):
 print('3. 输⼊⽤户名密码验证码3,点击登录 ')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt学习--QT Creator使用基本介绍

话不多说,直接开搞,笔者用的是5.12.9版本 双击打开QT Creator 显示这个界面 新建工程 然后出现这样的界面 点击运行 就弹出了一个这个,空的,因为我们啥也没写

集成学习 | 集成学习思想:Bagging思想

目录 一. Bagging思想1. Bagging 算法2. 随机森林(Random Forest)算法 在正文开始之前,我们先来聊一聊什么是集成学习? 集成学习是一种算法思想:将若干个弱学习器分组之后,产生一个新的学习器 弱学习器指预测误差在50%以下的学习器…

快速文字快闪pr模板视频制作素材

Premiere快速文字开场视频模板(pr快闪模板)下载。 项目特点:全高清分辨率,适用于任何字体,包含帮助文件,适用于Premiere Pro 2021及以上版本。 来自:pr模板网,免费下载地址:https://prmuban.com…

JavaScript进阶:js的一些学习笔记-原型

文章目录 js面向对象1. 原型2. constructor属性3. 对象原型4. 原型继承5. 原型链 js面向对象 构造函数 属性和方法 function Person(name,age){this.name name;this.age age;this.play ()>{console.log(玩!);} } const a new Person(1,12),b new Person(2…

深入探讨ChatGPT:技术突破与应用前景

目录 一、ChatGPT究竟是什么? 二、ChatGPT的发展脉络 三、ChatGPT的突出优势 强大的语言生成能力 多场景适应性 多语言处理能力 广泛的应用范围 数据敏感性的重视 四、结语:ChatGPT的未来与挑战 Tips:国内的ChatGPT ⭐ 点击进入Chat…

基于MATLAB的OFDM系统实现

1、内容简介 略 78-可以交流、咨询、答疑 基于MATLAB的OFDM系统实现 2、内容说明 略正交频分复用;16QAM;QPSK;系统仿真;误码率 OFDM(正交频分复用)的基本原理是将高速的数据流通过串并转换分解成若干低…

B140XW01 V8 +OZ9956B PDF

B140XW01 V8 PDF OZ9956B 14B38-COW 18650串联50欧点亮一颗灯珠

结构体成员访问操作符

1.结构体成员的直接访问: 结构体变量.成员名: 2.结构体成员的间接访问: 间接访问应用于指向结构体变量的指针:如下

Linux系统——nload命令

目录 引言 一、nload安装 二、nload命令详解 1.命令使用 2.命令详解 3.命令选项 3.1-u选项 nload -u h 自动变更单位,Bit/s nload -u H 自动变更单位,Byte/s 3.2-m选项 nload -m 不显示流量图 nload -m -H ens33 不显示流量图,以By…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins(建议别用docker安装,坑太多) docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

Vue3项目部署安装

Vue3ts部署 查看官网安装项目vue3的命令(四个)其中有: yarn create vuelatest 我执行时遇到报错,可能是我yarn版本不是最新 的问题, 改用这个命令去掉latest即可 yarn create vue 新项目先要安装yarn依赖,才能yarn …

数字化转型之于国家:为三驾马车更新马达

随着国民经济和社会发展第十四个五年规划的开启,中国也进入了全面建设社会主义现代化国家的新发 展阶段,未来要在坚持“创新、协调、绿色、开放、共享”的新发展理念下,在质量效益明显提升的基础上实 现经济持续健康发展。持续的发展意味着…

2684. 矩阵中移动的最大次数

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干 正 整数组成。 …

CSS 绝对定位 position:absolute

什么是CSS绝对定位absolute定位? 绝对定位absolute定位是CSS中的一种定位方式,可以将元素精确定位到一个确定的点,这与元素在文档流上的自然位置无关。相比起其他定位方式,绝对定位很灵活性,它可以将元素脱离文档流&am…

一个新名词之CSS高度塌陷

CSS高度塌陷 解决CSS高度塌陷的方法 CSS高度塌陷 CSS高度塌陷是指在网页布局中,父元素没有正确地根据其浮动子元素的高度进行扩展,从而表现为父元素的高度未能包裹住浮动子元素的现象。 通常表现为父元素高度变为0,或者比实际应该表现的高度…

【Android】工厂测试中 局部 字体显示重叠 问题分析与解决(Android14)

继上一篇【Android】工厂模式中 字体大小/显示重叠/显示不完整 相关 问题分析与解决 的分析与解决,可以实现调整所有字符整体的宽高。 但在局部,如果只希望修改局部的某一行字符的样式,且这一行字符没有直接的资源布局控制文件,而…

使用蜂鸟地图完成楼层自定义、房间着色、热力图、添加图片覆盖物、添加dom覆盖物、定位到固定区域的中心点

项目里有用到蜂鸟地图的地方,虽然有跟她们对接,但看他们文档也挺费劲的,要自己慢慢研究好久,有些实在研究不出来让他们帮忙看代码发现一些问题,所以把我发现的需要注意的一些点发上来,希望可以帮助到部分有…

力扣Lc17--- 345.反转字符串中的元音字母(java版)-2024年3月18日

1.题目 2.知识点 注1: indexOf() 是 Java 中 String 类的方法之一,它用于查找指定字符或字符串在字符串中第一次出现的位置。如果找到了该字符或字符串,则返回它在字符串中的索引位置(从0开始),如果没有找…

读《Cheating Depth: Enhancing 3D Surface Anomaly Detection via Depth Simulation》

WCAV2024 摘要&引言 RGB骨干:某些表面异常仅在RGB中实际上仍然是看不见的,因此需要合并三维信息(确实重点在于“合并”,单纯看例子里的深度图片也看不出来异常在哪里,但是和rgb overlay之后就明显一些了&#xf…