练习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 unittestfrom 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 unittestfrom 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. 关闭⽹⻚')@classmethoddef setUpClass(cls) -> None:print('1. 打开浏览器')@classmethoddef 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,点击登录 ')

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

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

相关文章

面试经典150题(114-118)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天完成了5道(114-118)150 gap 了一周,以后就不记录时间了。。 114.(70. 爬楼梯) 题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不…

24计算机考研调剂 | 集美大学(11408)

[2024考研调剂]集美大学计算机工程学院智慧城市创新实验室招收学硕 考研调剂招生信息 学校:集美大学 专业:工学->软件工程 年级:2024 招生人数:8 招生状态:正在招生中 联系方式: ********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 实验…

旅行社旅游线路预定管理系统asp.net

旅行社旅游线路预定管理系统 首页 国内游 境外游 旅游景点 新闻资讯 酒店信息―留言板 后台管理 后台管理导航菜单系统管理修改密码留言管理注册会员管理基础数据设置国别设置有份设地区设置 旅行社管理友情链接管理添加友情链接友情链接管理新闻资讯管理添加新闻资讯新闻资讯管…

LayerNormalization 和 RMSNormalization的计算方法和区别

目录 问题来源 Layer Normalization 与 RMSNormalization 的详细计算方法 Layer Normalization(层归一化) RMSNormalization(均方根归一化) Layer Normalization与RMSNormalization的异同 Layer Normalization RMSNormaliza…

24 OpenCV直方图反向投影

文章目录 参考反向投影作用calceackProject 反向投影mixchannels 通道图像分割示例 参考 直方图反向投影 反向投影 反向投影是反映直方图模型在目标图像中的分布情况简单点说就是用直方图模型去目标图像中寻找是否有相似的对象。通常用HSV色彩空间的HS两个通道直方图模型 作用…

探索未来科技:量子计算的前沿与挑战

随着信息技术的飞速发展,传统的计算模式已经难以满足日益增长的数据处理需求。在这个背景下,量子计算作为一种全新的计算模式,逐渐进入人们的视野。本文将探讨量子计算的前沿技术以及在软件开发领域所面临的挑战。 量子计算的前沿技术 量子计…

基于时空上下文(STC)的运动目标跟踪算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

Android Framework开发之Linux +Vim命令

一、linux常用命令 在Android源码开发中,Linux命令的运用是至关重要的。这些命令不仅帮助开发者有效管理文件、目录和系统资源,还能在源码编译、调试和排错过程中发挥关键作用。以下是对Android源码开发中常用Linux命令的更详细介绍: 当然可…

Midjourney 和 Dall-E 的优劣势比较

Midjourney 和 Dall-E 的优劣势比较 Midjourney 和 Dall-E 都是强大的 AI 绘画工具,可以根据文本描述生成图像。 它们都使用深度学习模型来理解文本并将其转换为图像。 但是,它们在功能、可用性和成本方面存在一些差异。 Midjourney 优势: 可以生成更…

js判断对象是否有某个属性

前端判断后端接口是否返回某个字段的时候 <script>var obj { name: "John", age: 30 };console.log(obj.hasOwnProperty("name")); // 输出 trueconsole.log(obj.hasOwnProperty("email")); // 输出 falselet obj11 { name: "Joh…

9. 编程常见错误归类

编程常见错误归类 9.1 编译型错误9.2 链接型错误9.3 运行时错误 9.1 编译型错误 编译型错误⼀般都是语法错误&#xff0c;这类错误⼀般看错误信息就能找到⼀些蛛丝马迹的&#xff0c;双击错误信息也能初步的跳转到代码错误的地方或者附近。编译错误&#xff0c;随着语言的熟练…

本地mysql测试成功后上传至云服务器出现了这么多问题?

本地MySQL数据库迁移至云服务器的过程中可能出现多种问题,以下是常见的一些原因及其解决思路: 权限问题: 账户权限:本地MySQL数据库的用户权限设置可能与云服务器上的MySQL实例不同,比如未授权远程连接或赋予了错误的权限。你需要确认云服务器MySQL数据库的用户是否有从远…

JAVA八股文面经问题整理第6弹

文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 写在最后 提问问题 介绍一下Linux常⽤命令&#xff0c;例如&#xff1a;Vim快捷键&#xff0c;常⽤查看Log的命令&#xff0c;路径相关&#x…

力扣栈题:删除最外层括号

char* removeOuterParentheses(char* s) {int stack 0;int num0;for(int i0;i<strlen(s);i){if(s[i](){stack;if(stack>1){s[num]s[i];}}else{--stack;if(stack>0){s[num]s[i];}}}s[num]\0;return s; } 思路&#xff1a;迭代加栈&#xff0c;如果不是第一个的左括号则…

苍穹外卖-day10:Spring Task、订单状态定时处理、来单提醒(WebSocket的应用)、客户催单(WebSocket的应用)

苍穹外卖-day10 课程内容 Spring Task订单状态定时处理WebSocket来单提醒客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a; 来单提醒&#xff1a; 客户催单&#xff1a; 1. Spring Task 1.1 介绍 Spring Task 是Spring框…

win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子&#xff0c;它有一个窗体&#xff0c;可以执行sql&#xff1b;下面看一下弹出一个录入数据的对话框&#xff1b; 之前它在.code段包含2个单独的asm文件&#xff0c;增加第三个&#xff0c;增加的这个里面是弹出对话框的窗口过程&#xff0…

哪些AI知识库比较好用?企业高管必看!

在科技进步的时代&#xff0c;工作效率和知识管理是企业面临的两大挑战。而AI知识库&#xff0c;正是解决这个问题的利剑。接下来&#xff0c;我将与你分享三款好用的AI知识库平台&#xff0c;感兴趣就往下看吧。 首先&#xff0c;我们不得不提的是Helplook。这是一个根据人工智…

如何在Spring Boot应用中高效集成Spring Cache与Redis实现高性能缓存机制

一、引言 在现代Web应用程序开发中&#xff0c;缓存是一种常见的优化手段&#xff0c;能够显著提升系统性能&#xff0c;减轻数据库负载。Spring Cache作为Spring框架内建的缓存抽象层&#xff0c;提供了一种简单易用的方式来统一处理缓存逻辑。而Redis作为一种高性能的内存键…

【兆易创新GD32H759I-EVAL开发板】 TLI(TFT LCD Interface)用法详细介绍

大纲 1. 引言 2. TLI外设特点 3. TLI硬件架构 4. TLI寄存器功能 5. TLI的配置和使用步骤 6. TLI图层概念 7. 图像处理和显示优化 8. 基于GD32H759I-EVAL开发板的TLI应用示例 1. 引言 在当今的嵌入式系统设计中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的应…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…