软件测试Day2|unittest02

装饰器

@unittest.skip()不执行这条用例
@unittesr.skipif(True)条件为 不执行这条用例
@unittesr.skipiUnless(False)条件为 不执行这条用例
@unittesr.expectedFailure()就算这个测试用例不通过也不算没通过

运行结果说明

.运行通过
F运行不通过
s不运行
x@unittesr.expectedFailure()认为是错的确实是错的
u@unittesr.expectedFailure()认为是错的但是是对的

unittest的清理函数

  • python3.1 添加了 addCleanupdoCleanups
  • python3.9 添加了 addClassCleanupdoClassCleanups
  • 清理函数的使用需要自己封装一个方法,这个方法里面写的代码就是用来清理作用
  • addCleanup写在setUp或者具体测试用例前都可以,但默认在tearDown后运行,
  • doClearnup方法 可自行执行清理函数
import unittest

def myClasscleanup():
    print("我的类清理函数")

def mycleanup():
    print("我的清理函数")

class TestDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print("setUpClass 方法")


    def setUp(self):
        print("setUp 方法")
        self.addCleanup(myClasscleanup)
        self.addCleanup(mycleanup)

    def test_01(self):
        self.assertEqual(1,1,"测试失败")
        print('test01 第1个测试用例')

    def test_02(self):
        self.assertNotEqual(1,2,"测试失败")
        print('test02 第2个测试用例')
        self.doCleanups()  ## 在test_02中任意位置插入清理函数的使用,则其在teardown前就运行了

    def test_03(self):
        self.assertNotEqual(1,2,"测试失败")
        print('test03 第3个测试用例')

    def tearDown(self) -> None:
        print("tearDown 方法")

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass 方法")

if __name__ == "__main__":
    unittest.main()

运行结果
在这里插入图片描述

子测试

subTest

  • 使用sunTest可以让unittest的测试用例支持数据驱动的测试方式
  • 子测试会把所有的测试数据的失败结果抛出,方便定位
  • 子测试写法固定

ddt: @ddt、@data、@file_data、@unpack

  • ddt是实现数据驱动的第三方包
import unittest
import HTMLTestRunner
from ddt import  ddt,data,unpack,file_data

def readTxt(filename):
    datas =  []
    with open(filename,"r",encoding='utf-8') as f:
        for data in f.readlines():
            data = data.replace('\n','').split(',')
            datas.append(data)
    return datas

@ddt  ##声明使用了 ddt
class TestDemo(unittest.TestCase):

    @data((1,2),(1,1),(2,3))  ## 存数据
    def test_01(self,value): #value接收data里的数据
        '''测试用例01'''
        self.assertEqual(value[0],value[1],"测试失败")

    @data({"age":17,"name":"angela"},{"age":12,"name":"angela1"},{"age":17,"name":"angela2"})
    @unpack   ## 解析元组方便
    def test_02(self, name,age):  # 直接写元组的key值方便
        '''测试用例02'''
        self.assertEqual(age, 17, "测试失败")

    @file_data("data.json") ## 读取文件数据,支持json,yaml
    @unpack
    def test_03(self, name, age):
        self.assertEqual(age, 17, "测试失败")

    @data(*readTxt('data.txt'))  ## 从txt读取数据
    def test_04(self,value): #value接收data里的数据
        '''测试用例04'''
        self.assertEqual(value[0],value[1],"测试失败")

if __name__ == "__main__":

    suite = unittest.defaultTestLoader.discover('./', pattern='unitMytest_subtest.py')
    with open(r'./res.html','wb') as f:
        runner = HTMLTestRunner.HTMLTestRunner(f,title = "单元测试",description="测试报告")
        runner.run(suite)
        print(suite)

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值