当前位置: 首页 > news >正文

【02_Unittest跳过测试和预期失败】

02_Unittest跳过测试和预期失败

  • 一、 跳过测试
    • 1.通过条件判断跳过单个测试用例执行
    • 2.通过调用 skipTest() 跳过单个测试用例执行
    • 3. 通过 @unittest.skip() 装饰器跳过整组的测试用例
  • 二、预期失败

一、 跳过测试

Unittest 支持跳过单个或整组的测试用例,跳过测试的方式:

  1. 通过条件判断跳过单个测试用例执行,如:@unittest.skipIf(3>2,"条件成立跳过")
  2. 通过调用 skipTest() 跳过单个测试用例执行
  3. 通过 @unittest.skip() 装饰器跳过整组的测试用例

1.通过条件判断跳过单个测试用例执行

test_case_skip_01.py

import unittest
import sys
# 通过skip装饰器中的条件判断是否跳过用例的用法
class TestCaseSkip01(unittest.TestCase):@unittest.skip("无条件跳过")def test_01(self):print("test_01")@unittest.skipIf(3>2,"条件成立跳过")def test_02(self):print("test_02")@unittest.skipUnless(1<0,"跳过这个用例,除非条件为真才执行")def test_03(self):print("test_03")@unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")def test_windows_support(self):print("在windows上才会执行")# 执行结果:
# Skipped: 无条件跳过
# Skipped: 条件成立跳过
# Skipped: 跳过这个用例,除非条件为真才执行
# 在windows上才会执行

2.通过调用 skipTest() 跳过单个测试用例执行

test_case_skip_02.py


import unittest
# 通过条件判断,直接调用skipTest()跳过执行
class TestCaseSkip02(unittest.TestCase):def external_resource_available(self):""""伪代码:外部资源是否可用的判断方法"""return False  # 表示外部资源不可用def test_maybe_skipped(self):if self.external_resource_available() == False:self.skipTest("external resource not available")  #调用skipTest()跳过执行# test code that depends on the external resourceprint("test_maybe_skipped") # if条件成立,用例会被跳过,此行不会被执行,
if __name__ == '__main__':unittest.main()# 执行结果:
# OK (skipped=1)

3. 通过 @unittest.skip() 装饰器跳过整组的测试用例

test_case_skip_03.py

import unittest
'''
使用@unittest.skip()装饰器,跳过整个测试类
整个类中的测试用例都不会执行
'''
@unittest.skip("showing class skipping")
class MySkippedTestCase(unittest.TestCase):def test_not_run1(self):print("test_not_run1")def test_not_run2(self):print("test_not_run2")if __name__ == '__main__':unittest.main()# 执行结果
# Ran 2 tests in 0.004s
# OK (skipped=2)
# Process finished with exit code 0
# Skipped: showing class skipping
# Skipped: showing class skipping

二、预期失败

多用于编写异常场景的测试用例,举个例子
正常场景:用户名正确、密码正确 —> 登录响应—>断言code=200
异常场景:用户名正确、密码传空 —> 登录响应—> 断言code= 200 断言是失败的,但测试验证功能、场景是正常的
示例:

expectedFailure.py

import unittest
import randomclass ExpectedFailureTestCase(unittest.TestCase):def get_login_code(self,name,password):"""伪代码,调用login接口获取响应"""if (name == "admin" and password == "admin112SS"):return 200else:response_code_list = [400,401,402,403,404]return response_code_list[random.randint(0,5)]def test_login_success(self):"""正常场景验证"""actual_code = self.get_login_code("admin","admin112SS")self.assertEqual(actual_code, 200, "登录成功")@unittest.expectedFailuredef test_login_fail(self):"""异常场景验证"""actual_code = self.get_login_code("admin"," ")# print("actual_code=",actual_code)self.assertEqual(actual_code, 200, "登录参数错误")  #参数不正确,那么code!=200  但是具体code是多少不一定就是一个固定的404if __name__ == "__main__":unittest.main()# 执行主要结果:
# Ran 1 test in 0.004s
# 
# OK (expected failures=1)
# ....
#     raise self.failureException(msg)
# AssertionError: 402 != 200 : 登录参数错误
  • test_login_fail() 使用@unittest.expectedFailure 执行的日志: OK (expected failures=1) 代表测试场景通过,如果是接口测试,说明接口正常
  • test_login_fail() 未使用@unittest.expectedFailure 执行的日志:FAILED (failures=1) 测试场景没通过,如果是接口测试,说明接口存在bug

常见的unittest中测试用例执行结果和对应含义

        1、FAILED(errors=1) 可能是本身python编码错误2、FAILED (failures=1) 断言没通过,所测的接口或功能异常3、OK 断言成功4、OK(expected failures = 1) 断言通过,预期失败,所测接口、功能正常

相关文章:

  • Python使用多进程及代理ip爬取小说
  • vue3学习--初始
  • 学习k8s的介绍(一)
  • 给VSCode插上一双AI的翅膀
  • [ffmpeg] aac 音频编码
  • 基于C#实现外排序
  • 在linux中进行文件的打包(打压缩)和解压
  • 文件上传的实现
  • rust每日一库 rand 生成随机数
  • 将对象转成URL参数
  • 网络编程相关面试题
  • 安装vmware_esxi 超详细
  • 什么是好的FPGA编码风格?(2)--多参考设计软件的语言模板(Language Templates)
  • 一文让你深入了解JavaSE的知识点
  • docker start一个容器之后,怎么进入这个容器界面
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android单元测试 - 几个重要问题
  • Apache Zeppelin在Apache Trafodion上的可视化
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Date型的使用
  • Invalidate和postInvalidate的区别
  • JavaScript设计模式之工厂模式
  • java正则表式的使用
  • learning koa2.x
  • Making An Indicator With Pure CSS
  • php ci框架整合银盛支付
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • webpack4 一点通
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 新版博客前端前瞻
  • 一、python与pycharm的安装
  • 06-01 点餐小程序前台界面搭建
  • mysql面试题分组并合并列
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ###C语言程序设计-----C语言学习(6)#
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (function(){})()的分步解析
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .NET MVC之AOP
  • .net反编译工具
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET中的Exception处理(C#)
  • @DataRedisTest测试redis从未如此丝滑
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [ C++ ] STL---仿函数与priority_queue