Unittest自动化测试框架教程

Unittest自动化测试框架教程,第1张

“此文基于系列作品 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()   

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/868695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存