Unittest自动化测试框架教程(二)——Python中Fixture测试夹具的使用和setUp方法相关参数传递

“此文基于系列作品 Unittest自动化测试框架教程(一)——测试用例基本框架介绍 基础上编写,初学者访问此文建议快速浏览链接文章熟悉测试用例基本框架,高手可直接上手阅读 ~ “

PS:“ 学习能力强的朋友也可以通过前情提要快速了解框架  ”

  • 博主每篇文章的注释都是干货!每个代码段都有详细注释,一定要认真看注释!!!
  • 重要的事情说三遍:一定要看注释!!!一定要看注释!!!一定要看注释!!!

前情提要

  • 测试用例基本框架
import unittest
 
class BasicTestCase(unittest.TestCase):  # 设置基础测试类名,继承库中测试用例的属性
    # setUp()和tearDown()是每个测试用例进行时都会执行的测试方法,前者为起始,后者为结束
    # 程序执行流程:setUp()-test1()-tearDown()---setUp()-test2()-tearDown()---
    def setUp(self):  # 复写父类的方法,是每一个测试用例都会执行的"起始方法"
        pass  # 自定义设置开始步骤
 
    def tearDown(self):  # 复写父类的方法,是每一个测试用例都会执行的"结束方法"
        pass  # 自定义设置结束步骤
 
    def way(self):  # 根据实际需求编写的测试方法
        pass
 
    def test1(self):  # 设置测试用例1,命名为test+xxx,会按照test后的阿拉伯数字顺序执行,命名为testdemo也执行(优先级小于数字),总之,前缀带test的都会执行
        pass  # 执行程序+断言(自定义断言方法,灵活多变)
 
    def test2(self):  # 设置测试用例2
        pass  # 执行程序+断言(自定义断言方法,灵活多变)
 
 
if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()  # 调用主函数进行多个测试用例测试!!!缺少则可能只进行最后一个用例测试

1.Fixture夹具的使用(unittest中的特殊类方法)

  • 特殊类方法setUpClass(),tearDownClass(),在所有测试用例(整体)前后执行
  • 作用,改变执行流程:
  • setUpClass()---setUp()-test1()-tearDown()---setUp()-test1()-tearDown()---tearDownClass()
  • 一定要认真看注释!!!
# 1.特殊类方法setUpClass(),tearDownClass(),在所有测试用例(整体)前后执行
# 1.作用,改变执行流程:setUpClass()---setUp()-test1()-tearDown()---setUp()-test1()-tearDown()---tearDownClass()

class BasicTestCase(unittest.TestCase):
    @classmethod  # 定义类方法
    def setUpClass(cls):  # 覆盖父类的类方法
        pass

    @classmethod  # 定义类方法
    def tearDownClass(cls):  # 覆盖父类的类方法
        pass

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test1(self):
        pass

    def test2(self):
        pass
if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()   

2. Python关键知识(一)——为3.作铺垫

  • 定义类属性,普通方法访问类属性需要通过类名访问,例如test1()中想要获取guide需要通过语句BasicTestCase.guide直接访问类属性
  • 语法块中高亮是因为这是在方法中定义的类属性,代码未运行前无法识别,运行时无影响
  • 注意与3.做比较
  • 一定要认真看注释!!!
# 2.定义类属性,普通方法访问类属性需要通过类名访问,例如test1()中想要获取guide需要通过语句BasicTestCase.guide直接访问类属性
# 2.高亮是因为这是在方法中定义的类属性,代码未运行前无法识别
# 2.注意与3.做比较

class BasicTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.guide = 'yu'  # 在类方法下,定义类属性cls.guide = 'yu'
        pass

    def test1(self):  # 设置测试用例1
        guide = BasicTestCase.guide     # 获取类方法中的类属性,通过类名.类属性访问BasicTestCase.guide


if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()   

3. Python关键知识(二)——为4.作铺垫

  • Python中的特性:如果实例没有相应属性,类属性有,则Python自动访问类属性替代

  • 注意与4.作比较

  • 一定要认真看注释!!!

# 3.Python中的特性:如果实例没有相应属性,类属性有,则Python自动访问类属性替代(注意与4.作比较)

class BasicTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.guide = 'yu'  # 在类方法下,定义类属性cls.guide = 'yu'
        pass

    def test1(self):
        guide = self.guide
        # 3.在这段话中,这句话也可以获取guide = 'yu',因为语句虽然为self.guide,实例没有定义guide属性,
        # 3.Python中的特性:如果实例没有属性,Python自动访问类属性替代


if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()   

 4.setUp定义全局实例属性——为5.作铺垫

  • 在Unittest套件中,全局实例属性可以在setUp,tearDown中设置

  • 注意和当局实例属性区分,与5.作比较
  • 一定要认真看注释!!!
# 4.在Unittest套件中,全局实例属性可以在setUp,tearDown中设置,注意与5.做对比

class BasicTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.guide = 'yu'  # 在类方法下,定义类属性cls.guide = 'yu'
        pass

    def setUp(self):
        self.guide = 'ba'   # 在setUp()方法下,定义 全局实例属性self.guide = 'ba'

    def test1(self):
        guide = self.guide  # 3.在这段话中,这句话也获取guide = 'ba',因为实例在setUp中定义全局实例属性self.guide = 'ba'

if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()   

 5.当局实例属性与方法间参数依赖

  • 普通方法(test1)只可定义"当局"实例属性,生命周期为本方法内,无法制造依赖关系
  • 即普通方法test2无法使用test1中定义的实例属性
  • 制造方法间依赖关系的手段:使用类属性在每一个方法里传参即可
  • 一定要认真看注释!!!
# 5.普通方法只可定义"当局"实例属性,生命周期为本方法内,无法制造依赖关系
# 5.制造方法间依赖关系的手段:使用类属性在每一个方法里传参即可

class BasicTestCase(unittest.TestCase):
    def setUp(self):
        self.guide = 'ba'   # 在setUp()方法下,定义"全局"实例属性self.guide = 'ba'

    def test1(self):
        guide = 'shi'  # 在test1中定义"当局"实例属性guide = 'shi'
        print(guide)   # 这里拿到的guide = 'shi'

    def test2(self):
        guide = self.guide
        print(guide)   # 这里拿到的guide = 'ba',而不是'shi',说明普通方法中的实例变量生命周期仅限"当局",无法互相依赖

if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()   

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是羽十八ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值