IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> unittest单元测试框架 -> 正文阅读

[开发测试]unittest单元测试框架

一、unittest单元测试框架简介?

  1. 什么是单元测试?

??单元测试负责对最小的软件设计单元(模块)进行验证,对重要程序分支进行测试以发现模块中的错误,python语言下有很多单元测试框架,如:doctest、unitest、pytest等 单元测试本身就是用一段代码验证另一段代码,不用单元测试框架也是可以做单元测试的。(异常处理)
2. unittest简介

??Unittest 是python内部自带的单元测试的模块、测试用例继承自unittest.TestCase、所有的测试函数以test开头,test_XXX,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作

  1. unittest中的概念
  • 测试固件 , 一个测试固件包括两部分,执行测试代码之前的准备部分和测试结束之后的清扫代码。这两部分一般用函数setUp()和tearDown()表示。

  • 测试用例,unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。一个测试用例中,测试固件可以不写,但是至少有一个已test开头的函数。unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头

  • 测试套件,就是很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例

  • 测试执行器 ,test runner是一个用来执行加载测试用例,并执行用例,且提供测试输出的一个组建。test runner可以加载test case或者test suite进行执行测试任务,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

二、实例

# coding=utf-8
import unittest

class Mytest(unittest.TestCase): #继承自unittest.TestCase
    @classmethod
    def setUpClass(cls):
        print('所有测试前执行一次---111')
    @classmethod
    def tearDownClass(cls):
        print('所有测试后执行一次---222')

    def setUp(self):
        print("每个测试用例执行前执行一次---aaa")
    def tearDown(self):
        print("每个测试用例执行后执行一次---bbb")

    def test_a(self):
        self.assertEqual(1,1)
        print('1相等1')
    def test_b(self):
        self.assertEqual(2,2)
        print('2相等2')
if __name__ == '__main__':
    unittest.main()

# unittest的用法
# setUpClass 执行一次    方法:自动执行,在执行所以测试用例之前执行
# tearDownClass 执行一次 方法:自动执行,所有用例执行结束之后执行

# setUp 执行多次 (初始化环境) 方法:自动执行,每个用例执行前都要执行
# tearDown 执行多次 (清理环境) 方法:自动执行,每个用例结束后执行
#  unittest.main() 执行所有的测试用例


Testsuit() 测试套件

# coding=utf-8

import unittest
class UCTestCase(unittest.TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass
    def test_1(self):
        pass
    def test_2(self):
        print('hello')
if __name__ == "__main__":
    suit = unittest.TestSuite()   # 创建一个测试套件测试集
    suit.addTest(UCTestCase("test_1"))  # 把需要执行测测试用例放在测试套件中
    suit.addTest(UCTestCase("test_2"))  # 把需要执行测测试用例放在测试套件中
#    suit.addTest([UCTestCase("test_1"), UCTestCase("test_2")])  # 添加多条测试用例
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suit)

verbosity是一个选项,表示测试结果的信息复杂度,有0、1、2三个值

0:静默模式,只能获取总的测试数和总的执行结果,比如成功3,失败4
1:默认模式,非常类似静默模式,只是在每个成功的测试用例前面会有".",在每个失败的测试用例前面有"F"
2:详细模式,测试结果会显示每个测试用例的所有相关的信息

Testloader() 此方法可同时测试多个

import unittest
class TestCase_1(unittest.TestCase):
    def test_1(self):
        print("111")
    def test_2(self):
        print("111_1")
class TestCase_2(unittest.TestCase):
    def test_1(self):
        print("222")
    def test_2(self):
        print("222_2")
if __name__ == '__main__':
    suit_1 = unittest.TestLoader().loadTestsFromTestCase(TestCase_1)
    suit_2 = unittest.TestLoader().loadTestsFromTestCase(TestCase_2)
    suit = unittest.TestSuite([suit_1, suit_2])
    unittest.TextTestRunner(verbosity=2).run(suit)

三、断言

import unittest
import math
import re
class demoTest(unittest.TestCase):
    def test_1(self):  # 基本断言
        self.assertEqual(4+4, 8)
        self.assertNotEqual(2, 3)  # a == b

        self.assertTrue(3+2 == 5, "true")
        self.assertNotEqual(3+2 == 20 , "assertion fails")  # bool(x) is true

        self.assertIn( "百度", self.driver.title)
        self.assertNotIn(3, [1,2])   #  in \ not in 区间

    def test_2(self):  # 比较断言
        self.assertAlmostEqual(22/7,3.142857143,places = 7) # 验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
        self.assertNotAlmostEqual(10/3,3,places = 7)
        self.assertGreater(math.pi,3) #  验证first > second,否则fail
        self.assertGreaterEqual (first, second, msg = None) # 验证first ≥ second,否则fail
        self.assertLess (first, second, msg = None) # 验证first < second,否则fail
        self.assertLessEqual (first, second, msg = None)# 验证first ≤ second,否则fail
        self.assertRegexpMatches (text, regexp, msg = None)#  验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
        self.assertNotRegexpMatches (text, regexp, msg = None) # 验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
    def test_3(self):  # 复杂断言
        self.assertListEqual(list1,list2, msg = None) #验证list1 = list2 不等则fail报错
        self.assertTupleEqual(toupe1,toupe2,msg=None) #验证tuple1 = toupe2 不等则fail报错
        self.assertSetEqual(set1,set2,msg=None) #验证set1 = set2 不等则fail报错
        self.assertDictEqual(zd1,zd2, msg=None) #验证字典1 = 字典2 不等则fail报错

if __name__ == '__main__':
    unittest.main()
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 23:05:08  更:2021-07-22 23:05:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 22:49:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码