首页 > 其他分享 >Unittest单元测试框架-知识点总结

Unittest单元测试框架-知识点总结

时间:2023-10-16 22:45:32浏览次数:28  
标签:__ 知识点 Unittest 单元测试 套件 test suite main unittest

unittest单元测试框架
1.导入unittest包
========================================================================
2.创建类的时候要继承与unittest.TestCase类
2.1,setUp方法是在类中测试执行前的初始化工作
2.2,tearDown方法是在类中测试执行后的清除工作
2.3,测试用例函数以test开头的方法是普通的测试用例方法,
按照ACSII码的顺序加载测试用例,数字与字母的顺序为:0~9,A~Z,a~z
2.4,在主入口main中,使用unittest.main()方法执行以test开头的方法
注意: 在执行的时候应以run下的指定模块执行,不能以unittest in 模块执行,不然会重复执行
========================================================================
3.设置断言
可以在测试用例的函数中设置
self.assertEqual(4,demo02_calc.sum(2,2),"测试sum是否pass")
常用的断言
self.assertEqual(4,4) # 判断是否相等
self.assertTrue(a) # 判断是否为真
self.assertIn("马怒",name) # 判断是否在里面
self.assertGreater(4,2) # 判断是否大于
========================================================================
4,忽略用例:
@unittest.skip("无条件跳过"),
@unittest.skipIf(True,"条件为真时跳过")
@unittest.skipUnless(False,"条件为假False则跳过"),
@unittest.expectedFailure # 执行失败不计入失败的数量中

========================================================================
5,测试用例执行顺序:(在不使用测试套件的情况下是按照ASCII码的顺序执行,使用测试套件就按照测试套件的添加顺序执行)
5.1,方法一:(通过addTest方法执行(通过测试套件执行的不以test开头的用例也可执行))
在main的主入口中创建测试套件的实例 :suite = unittest.TestSuite()
然后通过实例使用addTest(类名(方法名))方法按照顺序执行测试用例(一条一条用例执行)
suite.addTest(类名("方法名1"))
suite.addTest(类名("方法名2"))
suite.addTest(类名("方法名3"))
unittest.main(defaultTest="suite")
或者(同方法一类似,写测试套件的方法,如下)
把unittest.Testsuite写成方法
def suite():
suite = unittest.TestSuite()
suite.addTest(test_case("test_bbb")) # addTest(类名(“方法名称”))
suite.addTest(test_case("ccc"))
return suite
if __name__ == '__main__':
unittest.main(defaultTest="suite")

5.2,方法二:(unittest.makeSuite()添加整个测试类)
if __name__ == '__main__':
# 注意:此时不是以test开头的方法不会被添加进测试套件中
# 注意:makeSuite 可能需要手动添加
suite = unittest.TestSuite(unittest.makeSuite(test_case)) # 里面是类名
unittest.main(defaultTest="suite")

5.3,方法三(unittest.TestLoader().loadTestsFromName()添加整个.py文件下的测试类)
if __name__ == "__main__":
# 通过TestLoader中字符串的方法加载用例
# 1,增加一个测试用例 模块名称.类名.方法名称
# suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4.test_case1.test_aaa")
# 2,增加整个测试类
# suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4.test_case1")
# 3,增加整个.py模块下所有的测试类
suite = unittest.TestLoader().loadTestsFromName("demo11_测试套件4")
unittest.main(defaultTest='suite')

5.4,方法四(创建多个子套件然后整合到一个大的主套件中):
先通过导入别的py模块的包,然后创建多个子套件
在创建一个主套件,把多个子套件通过addTest()方法添加到主套件中
import unittest
from unittest框架 import demo11_测试套件4
from unittest框架 import demo08_测试套件1
# 依次创建多个套件
# 1,单个用例套件
suite01 = unittest.TestLoader().loadTestsFromName('demo08_测试套件1.test_case.test_aaa')
# 2,整个类
suite02 = unittest.TestLoader().loadTestsFromName("demo08_测试套件1.test_case")
# 3,整个.py模块
suite03 = unittest.TestLoader().loadTestsFromName("demo11_测试套件4")
main_suite = unittest.TestSuite() # 主套件
main_suite.addTest(suite01) # 添加子套件到主套件中
main_suite.addTest(suite02)
main_suite.addTest(suite03)
unittest.main(defaultTest="main_suite")

5.5,方法五:(使用discover()来实现添加执行整个目录下所有的测试用例)
首先导入需要的包,然后通过os找到all_case目录的路径,在通过unittest.defaultTestLoader.discover()方法,匹配到所有的用例
再创建一个套件,通过addTest(discover)方法添加discover,最后在unittest.main(defaultTest="main_suite")执行
import os
import unittest
import HTMLTestRunner
import time
curren_path = os.path.dirname(__file__)
print(curren_path)
case_path = os.path.join(curren_path,"all_case")

# 从当前路径回到上一层路径
# case_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
print(case_path)

discover = unittest.defaultTestLoader.discover(start_dir=case_path, # 用例路径
pattern="*_case*.py",
top_level_dir=None) # 文件类型
# print(discover)
main_suite = unittest.TestSuite()
main_suite.addTest(discover)
unittest.main(defaultTest="main_suite")
========================================================================
6,在使用unittest.main()方法执行代码
6.1 如果使用测试套件要用 unittest.main(defaultTest="suite")

========================================================================
7,unicode码转成中文
name.encode("utf-8").decode("unicode_escape") # 转码成中文

========================================================================
8,导入HTMLTestRunner包,用来生成测试报告
# 执行并生成测试报告
# 加个时间戳
now = time.strftime("%y-%m_%d_%H_%M_%S_",time.localtime(time.time()))
file_obj = open("D:/pythonProject/P7_P8_Requests/"
"unittest框架/test_report/"
"{}test_report.html".format(now),"w+",encoding="utf-8")
# 创建测试报告对象,将执行的过程写入到file_obj中
runner = HTMLTestRunner.HTMLTestRunner(stream=file_obj,
title="第一次的测试报告",
description="我是测试报告的描述信息")
runner.run(main_suite)
========================================================================

详细信息的展示unittest.main(verbosity=2)
0 (静默模式): 你只能获得总的测试用例数和总的结果。
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “E”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息 并且 你在命令行里加入不同的参数可以起到一样的效果

测试用例的方法下面---写上测试的注释信息---在报告中体现出来
self._testMethodName = "API_CASE_01"
self._testMethodDoc = "验证获取token接口能否正常调用"

 

标签:__,知识点,Unittest,单元测试,套件,test,suite,main,unittest
From: https://www.cnblogs.com/YouJeffrey/p/17768580.html

相关文章

  • 关于浮点数的一些小知识点
    转载自:C++标准cout输出精度解析double和float的区别1.double是双精度浮点数,内存占8个字节,有效数字16位,表示范围是-1.79E+308~1.79E+308。float是单精度浮点数,内存占4个字节,有效数字8位,表示范围是-3.40E+38~3.40E+38。2.两者处理速度不同,CPU处理float的速度比处理double快。......
  • 【十分钟一个知识点】约瑟夫环问题
    问题来历据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,......
  • 盘点2023Android面试常考知识点(持续更新中.......)
    前言面试一线互联网公司的Android岗位,技术能力是首要标准。在这个互联网时代,技术更新迭代速度极快,我们需要不断学习提升自己来应对职场需求变化。在最近的面试过程中,我总结了一些中大厂面试中常考的一些核心知识点,这些知识点覆盖了Java基础、集合、多线程、虚拟机、反射、泛型、并......
  • 无涯教程-ASP.NET MVC - 单元测试
    在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元以确定它们是否适合使用。换句话说,这是一个软件开发过程,其中应用程序的最小可测试部分(称为单元)被单独且独立地检查以确保其正常运行。单元测试通常是自动化的,但也可以手动完成。单元测试的目标......
  • 一种有效的嵌入式软件单元测试工具
     一、引言在当今的软件开发领域,单元测试已经成为确保代码质量,提升软件可靠性和安全性的重要环节。对于嵌入式软件来说,尤其在汽车控制等安全性至关重要的领域,单元测试更成为不可或缺的一部分。然而,传统的单元测试方法往往效率低下且容易出错。为了解决这一问题,本文介绍了一种有......
  • nittest单元测试框架—加载测试用例的3种方法以及测试报告存储管理
     项目结构 测试用例importunittestclassLoginTestCase(unittest.TestCase):deftest_login_success(self):self.assertEqual({'code':200,'msg':'登录成功'},self.login('kobe','666'))deftest_......
  • 通过unittest加载测试用例的不同方法
    使用python+unitest做自动化测试执行时,执行用例时就涉及测试用例的加载。即如何把测试cases加载到测试suite,然后进行运行。一般把用例加载方法分为两大类:通过unittest.main(),或者通过testsuit。第一种方式使用比较简单,第二种比较灵活多样。 一、测试文件中有测试类,及main......
  • 使用GoogleTest框架进行cpp代码的基本单元测试
    title:aliases:tags:-cpp/单元测试-cmake-工程技术category:-方法stars:url:creation-time:2023-10-1119:02modification-time:这里主要介绍从0开始实现基本的单元测试功能。构建首先从googletest代码仓下载源码。网上很多指导包括官方的指......
  • Unittest测试框架基础及进阶
    需求假设领导让你开发一个接口测试框架。领导提出了一些新的需求,你如何实现?支持用例优先级、标签,支持通过优先级或标签筛选用例支持用例负责人、迭代,及通过负责人或迭代筛选用例支持多环境配置支持超时及重试机制,防止不稳定用例并发执行用例以提高用例回归效率Unitt......
  • 几个易错的python小知识点
    大家好,我是暴走の海鸽~本期整理了几个基础python防坑小常识,希望对大家有所帮助。1.type==object?执行以下代码的结果是什么:>>>isinstance(type,object)True>>>isinstance(object,type)True>>>isinstance(object,object)True>>>isinstance(type,type)True......