python接口自动化测试之unittest自动化测试框架基本使用

news2025/4/25 10:58:10

目录

unittest简单介绍

unittest基础使用

unittest.Testcase

setUp

tearDown

setUpClass

tearDownClass

测试用例

unittest.main()

unitteest提供的各种断言方式

unittest测试用例跳过执行

跳过执行测试用例共有四种写法

self.skipTest(reason)

跳过执行测试用例注意点


unittest简单介绍

  • 单元测试框架
  • 还可以适用WEB自动化测试用例的开发与执行
  • 提供丰富的断言方法
  • 官方文档:

unittest基础使用

 1 # 导入unittest模块
 2 import unittest
 3 
 4 
 5 # 创建单元测试类,继承unittest.TestCase
 6 class testCase(unittest.TestCase):
 7 
 8     def setUp(self):
 9         print("case执行前")
10 
11     def tearDown(self):
12         print("case执行后")
13 
14     @classmethod
15     def setUpClass(cls):
16         print("对象执行前")
17 
18     @classmethod
19     def tearDownClass(cls):
20         print("对象执行后")
21 
22     # 测试用例
23     def test_01(self):
24         print("test01")
25 
26     def test_02(self):
27         print("test02")
28 
29 
30 if __name__ == '__main__':
31     unittest.main()

运行结果

 1 对象执行前
 2 case执行前
 3 test01
 4 case执行后
 5 case执行前
 6 test02
 7 case执行后
 8 对象执行后
 9 
10 
11 Ran 2 tests in 0.002s
12 
13 OK

unittest自动化测试框架:3天精通Unittest自动化测试实战训练营,零基础小白都能学_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1zg4y1g7it/?spm_id_from=333.999.0.0                  

 

这里包含的知识点:

unittest.Testcase

  • 自己创建的单元测试类都要继承它,它是所有单元测试类的基类

setUp

  • 用于每个测试用例执行前的初始化工作
  • 所有类中方法的入参为 self ,定义实例变量也要 self.变量

tearDown

  • 每个测试用例执行后的都会执行此方法

setUpClass

  • 每个单元测试类运行前调用该方法,只会执行一次
  • 属于类方法,需要加上装饰器 @classmethod
  • 默认入参是 cls ,指的就是“类对象”本身,其实和self没什么区别,用法一致

tearDownClass

  • 每个单元测试类运行后调用该方法,只会执行一次
  • 属于类方法,需要加上装饰器 @classmethod

测试用例

  • 必须以“test_”开头命名的方法,否则无法识别并执行
  • 方法里面需要有断言,才能在最后运行时有该用例的执行结果
  • 可包含多个测试用例

unittest.main()

  • 运行单元测试
  • 该命令会搜索当前module 下所有以 test开头的测试用例,并运行它们
  • 执行顺序是按照case的命名

unitteest提供的各种断言方式

 1 class testCase(unittest.TestCase):
 2 
 3     def test_03(self):
 4         # 断言 - 是否为True
 5         flag = True
 6         self.assertTrue(flag, msg="测试失败的信息,可不填")
 7 
 8     def test_04(self):
 9         # 断言 - 是否为False
10         flag = False
11         self.assertFalse(flag)
12 
13     def test_05(self):
14         # 断言 - 提供的两个参数是否相同(任意类型)
15         self.assertEqual("123", "123")  # 字符串
16         self.assertEqual({"a": 1}, {"a": 1})  # 字典
17         self.assertEqual([1, 2], [1, 2])  # 列表
18         self.assertEqual((1, 2), (1, 2))  # 元组
19         self.assertEqual({1, 2}, {1, 2})  # 集合
20 
21     def test_06(self):
22         # 断言 - 列表是否相同
23         self.assertListtEqual([1, 2], [1, 2])
24 
25     def test_07(self):
26         # 断言 - 字典是否相同
27         self.assertDictEqual({"a": 1}, {"a": 1})
28 
29     def test_08(self):
30         # 断言 - 元组是否相同
31         self.assertTupleEqual((1, 2), (1, 2))
32 
33     def test_09(self):
34         # 断言 - 集合是否相同
35         self.assertSetEqual({1, 2}, {1, 2})

这是比较常见的断言方式,当然还有一些比较容易理解的断言方式就没有一一举例啦,具体可以看看下面列表

方法

等同于python里面的写法

assertEqual(a, b)

a == b

assertNotEqual(a, b)

a != b

assertTrue(x)

bool(x) is True

assertFalse(x)

bool(x) is False

assertIs(a, b)

a is b

assertIsNot(a, b)

a is not b

assertIsNone(x)

x is None

assertIsNotNone(x)

x is not None

assertIn(a, b)

a in b

assertNotIn(a, b)

a not in b

assertIsInstance(a, b)

isinstance(a, b)

assertNotIsInstance(a, b)

not isinstance(a, b)

assertRegex(s, r)

r.search(s)

unittest自动化测试框架:

3天精通Unittest自动化测试实战训练营,零基础小白都能学_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1zg4y1g7it/?spm_id_from=333.999.0.0  

 

unittest测试用例跳过执行

 1 class testCase(unittest.TestCase):
 2 
 3     # 直接跳过
 4     @unittest.skip("直接跳过")
 5     def test_skip(self):
 6         self.fail("shouldn't happen")
 7 
 8     # 满足condition则跳过
 9     @unittest.skipIf(1 < 2, "满足condition则跳过")
10     def test_skipIf(self):
11         print("skip if")
12 
13     # 不满足condition则跳过
14     @unittest.skipUnless(sys.platform.startswith("win"), "需要window平台才不会跳过")
15     def test_skipUnless(self):
16         print("skip Unless")
17 
18     # 预计该测试用例会测试失败
19     @unittest.expectedFailure
20     def test_fail(self):
21         self.assertEqual(1, 0, "broken")
22 
23     # 方法体内跳出不执行case
24     def test_maybe_skipped(self):
25         if True:
26             self.skipTest("调用unittest的skipTest,在方法体内满足某些条件则跳过该case")
27         pass

运行结果

 1 Skipped: 调用unittest的skipTest,在方法体内满足某些条件则跳过该case
 2 
 3 Skipped: 直接跳过
 4 
 5 Skipped: 满足condition则跳过
 6 skip Unless
 7 
 8 
 9 Ran 5 tests in 0.010s
10 
11 OK (skipped=3, expected failures=1)

跳过执行测试用例共有四种写法

  • @unittest.skip(reason) :跳过测试用例,reason 为测试被跳过的原因
  • @unittest.skipIf(condition, reason) :当 condition 为真时,跳过测试用例。
  • @unittest.skipUnless(condition, reason) :跳过测试用例,除非 condition 为真
  • @unittest.expectedFailure :把测试用例标记为预计失败;如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败

self.skipTest(reason)

在方法体内满足某些条件下才跳过执行该测试用例

跳过执行测试用例注意点

  • 被跳过的测试的 setUp() 和 tearDown() 不会被运行
  • 只输入 unittest.skip ,也可以正常跳过,不必写reason
  • 若输入 unittest.skip() ,括号内必须写reason,不得为空
  • 可以针对单元测试类级别设置跳过执行(在class声明上面直接加装饰器即可),该单元测试类所有测试用例不会被执行
  • 被跳过的类的 setUpClass() 和 tearDownClass() 不会被运行
  • 当方法体内调用了 self.skipTest(reason) 方法,该测试用例还是会调用 setUp() 和 tearDown()

unittest自动化测试框架:

3天精通Unittest自动化测试实战训练营,零基础小白都能学_哔哩哔哩_bilibiliicon-default.png?t=N4N7https://www.bilibili.com/video/BV1zg4y1g7it/?spm_id_from=333.999.0.0

 

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

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

相关文章

手动搭建一个简单的MVVMLight框架的方法

本章讲述&#xff1a;手动搭建一个简单的MVVMLight框架步骤&#xff1a; 1、下载MVVMLight所需要的dll库文件 主要文件包括&#xff1a;CommonServiceLocator.dll、GalaSoft.MvvmLight.dll、GalaSoft.MvvmLight.Extras.dll、GalaSoft.MvvmLight.Platform.dll、System.Windows.…

小兔新--项目实战总结1

目录 Layout-吸顶导航交互实现 吸顶交互 vueUse Layout-Pinia优化重复请求 为什么要优化 如何优化 Home-懒加载指令优化 场景和指令用法 实现思路和步骤 回顾核心步骤代码 Home-懒加载指令优化 问题1:逻辑书写位置不合理 问题2:重复监听问题 一级分类-解决路由缓存问…

Web基本与HTTP协议

目录 一&#xff1a;域名 1.域名概述 2.域名空间结构 3. 域名注册 二&#xff1a; 网页访问&#xff08;HTTP/HTTPS&#xff09; 1.网页的基本概念 2.网站 3.主页 4.域名 5.HTTP 6.URL 7.网页基本标签 &#xff08;1&#xff09;网页摘要信息的作用 &#xff08;…

Oracle SQLTUNING优化SQL

通过AWR的TOPSQL观察到sqlid为6pk9xfmjd0s8j的sql语句耗时1分钟。 通过ash观察到&#xff0c;该SQL由于全表扫描占用了大量的IO资源。 解析执行计划&#xff0c;看到是MED_SALE_ORDER表做了全表扫描。 该表有678W条记录&#xff0c;全表扫描必定IO指标会冲高&#xff0c;影…

SFM过程(一)

以图像为基础的三维重建过程SFM基本如下图所示&#xff1a; 以SfM-Toy-Library代码为例&#xff0c;如下&#xff1a; ErrorCode SfM::runSfM() {if (mImages.size() < 0) {cerr << "No images to work on." << endl;return ErrorCode::ERROR;}//in…

Java-网络原理

目录 一、网络互连 局域网LAN 广域网WAN 二、网络通信基础 IP地址 端口号 认识协议 三、五元组 四、协议分层 五、OSI七层模型 六、TCP/IP五层&#xff08;或四层&#xff09;模型 网络分层对应 七、封装和分用 一、网络互连 随着时代的发展&#xff0c;越来越需要计…

Smartbi电子表格故事之用数据进行销售问题分析

天津小麦商贸有限公司&#xff08;X&M&#xff09;成立于2012年11月&#xff0c;主营业务是商贸流通业&#xff0c;主要是日用商品的批发销售。 2012年前&#xff0c;公司创始人&#xff08;总经理和销售总监&#xff09;一直从事外贸的生意&#xff0c;自从2008年金融危机…

java 课程信息管理系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java 课程信息管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql&#xff0c;使…

Scrum的执行过程及产品Backlog梳理的目的、时间、内容

Scrum的迭代运行过程 产品Backlog梳理 目的&#xff1a; •对下个Sprint的需求进行需求细节梳理和精化&#xff0c;识别技术风险和依赖&#xff0c;完成估算和优先级排序。 时间&#xff1a; •本Sprint开始后第6天&#xff0c;2小时以内 。 内容&#xff1a; •理解需求…

2020下半年

2020下半年 d a b 小阶向大阶对齐 b b 平均cpi: MIPS: d c 公加验&#xff0c;私解签 加密防止被动攻击&#xff0c;认证防止主动攻击 a 访问控制包括&#xff1a;授权&#xff0c;确定存取权限&#xff0c;实施存取权限 c a c a 先申请先得 b b 著作权包括&…

论文分享 | WSBERT:Weighted Sampling for Masked Language Modeling

本次分享阿里巴巴达摩院语音实验室、新南威尔士大学与香港科技大学&#xff08;广州&#xff09;等在ICASSP2023会议发表的论文《Weighted Sampling for Masked Language Modeling》。该论文主要提出了两种简单有效的加权采样策略&#xff0c;来缓解掩码语言模型&#xff08;ML…

七、数据仓库详细介绍(调度)

0x00 前言 在之前的文章&#xff0c;我们规划了数仓架构&#xff0c;制定了数仓规范&#xff0c;然后在架构和规范的指导下设计了存储模型、构建了 ETL 系统。 数仓模型解决了数据存储问题&#xff0c;ETL 解决了数据同步集成计算问题&#xff0c;而调度解决的是自动化问题。 …

【音视频】音视频自研对比

WVP(自研视频调度平台&#xff09;CM8播放器&#xff08;前端&#xff09;传输协议&#xff1a;websocket 编码协议&#xff1a;ts 语言&#xff1a;TS传输协议&#xff1a;websocket 编码协议&#xff1a;fmp4、mse 语言&#xff1a;JS框架&#xff1a;jessibuca 性质&#xf…

TCP和UDP

文章目录 1、常见误区2、TCP和UDP的区别和应用场景3、使用了它们的协议有哪些&#xff1f;4、总结 我之前的文章中讲解即时通讯系统中&#xff0c;就用到了可靠传输协议TCP&#xff0c;在那里面我们解决了TCP传输中的半包和黏包&#xff0c;而且还实际的讨论了用了TCP&#xff…

免费开源 | 基于SpringBoot的学生信息管理系统

一、项目简介 学生信息管理后台&#xff0c;包括学生管理、课程管理、成绩管理&#xff0c;适用于课设等&#xff0c;仅具有管理功能&#xff0c;感兴趣的伙伴可以再次完善。 二、软件架构 springboot mybatis thymeleaf 三、系统运行 注&#xff1a;mysql数据库要8.0以上…

【老王读SpringMVC-6】Controller method 的正常返回值处理

handler method 的返回值处理包含两个方面&#xff1a; 一是&#xff1a;返回值对象的处理&#xff1b; 二是&#xff1a;视图的渲染。 返回值对象的处理 通过前面的分析&#xff0c;我们知道&#xff0c; 被 RequestMapping 标记 handler method 的执行是通过调用 RequestMa…

Java的反射

1.反射的定义 Java反射是Java被视为动态&#xff08;或准动态&#xff09;语言的一个关键性质。JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&a…

react学习3 生命周期

componentDidMount()与render()一个级别的&#xff0c;在组件挂载完成之后调用 卸载组件&#xff1a;REACTDOM.unmountComponentAtNode() componentWillUnmount() 组件马上被卸载的时候 老生命周期&#xff1a; 新的生命周期&#xff1a; 废弃了&#xff08;加上Unsate_还是…

Python3安装pyhanlp最佳解决方法

1、Hanlp介绍 Hanlp是一款中文自然语言处理工具。Hanlp支持多种自然语言处理任务&#xff0c;包括分词、词性标注、命名实体识别、依存句法分析、情感分析、文本分类等。其主要优点包括&#xff1a; 高准确率&#xff1a;Hanlp采用了基于神经网络的分词方法&#xff0c;有效提…

关于字符集

字符集 编码与解码 计算机中储存的信息都是用二进制数表示的&#xff0c;而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则&#xff0c;将字符存储到计算机中&#xff0c;称为编码 。反之&#xff0c;将存储在计算机中的二进制数…