UnitTest框架应用

38 篇文章 6 订阅
23 篇文章 0 订阅
本文详细介绍了Python内置的Unittest框架,包括其应用规则、测试用例设计、断言方法以及前后置条件的使用。通过实例展示了如何编写和执行测试用例,并给出了自动化测试的实现,强调了用例间的独立性和测试流程的管理。此外,还提供了两个具体的Unittest测试类案例,涉及类级别的前后置条件和用例执行顺序。
摘要由CSDN通过智能技术生成


1.UnitTest的应用规则

'''
    Unittest的应用规则:
        1.是Python默认自带的库。不需要安装了,直接导入就可以。
        2.调用时一定要通过继承UnitTest.TestCase类来实现
        3.UnitTest四大组件
            前后置条件:setup和teardown,分为class级和function级
                    不会把测试数据的初始化放到前置函数之中
                    一个class中只能存在class级和Function级各一套
                    如果考虑多用例间浏览器缓存通用的场景,使用setupclass,否则使用setup进行前置设置
            测试用例:所有的测试用例都是基于test开头的函数,用例运行顺序是固定的,基于ASCII来进行排序,再执行。
            0-9,A-Z.a-z的顺序,建议在编写用例的时候,进行编号排序
            不加test开头的函数,都是普通的函数,需要被调用才可以生效。
            unittest下支持单用例执行,但是虚竹不推荐使用,因为容易因为用例关联逻辑报错
            断言:在unitTest下,只要代码没有报错,就认为是通过的。
            通过self.assert*字样来进行调用
        4.UnitTest要启动运行,一定是在main函数中用unittest.main()启动
        5.UnitTest控制台的打印有点莫名其妙,不要太过于在意控制台的输出顺序
        6.测试用例在设计的时候一定要考虑到用例间的关联性要尽可能低,让每一个用例尽可能是独立化存在的。
'''

import unittest

class UnitDemo02(unittest.TestCase):
    # 前置条件:可以理解为是class在执行之初,先执行的初始化行为(类级别),只执行一次
    @classmethod
    def setUpClass(cls) -> None:
        print('这是setUpclass02')
        cls.a = '虚竹'

    # 后置条件:可以理解为是每一个class在执行结束时,最后执行的收尾(类级别) 只执行一次
    @classmethod
    def tearDownClass(cls) -> None:
        print('这是teardownclass02')

    # 前置条件:可以理解为是每一个测试用例在执行前的初始化行为。(用例级别)
    def setUp(self) -> None:
        print('这是前置条件')
        # a = '虚竹'

    # 后置条件:可以理解为是每一个用例在执行结束之后的收尾(用例级别)
    def tearDown(self) -> None:
        print('这是后置条件')

    # 测试用例1
    def test_01_a(self):
        print('这是a')
        # print(self.a)
        # 修改cls.a的值:类名
        # 类名.属性修改,可以修改元素的值,对全局生效
        # UnitDemo.a = '钟灵'
        # self.属性修改,可以在函数内修改,对全局无效
        # self.a = '钟灵'
        # print(self.a)

    # 测试用例2
    def test_02_A(self):
        # print('这是A')
        # print(self.a)
        pass

    # 测试用例3
    def test_03_1(self):
        print('这是1')


# 这个是第二个class对象
class UnitDemo(unittest.TestCase):
    # 前置条件:可以理解为是class在执行之初,先执行的初始化行为(类级别),只执行一次
    @classmethod
    def setUpClass(cls) -> None:
        print('这是setUpclass')
        cls.a = '虚竹02'

    # 后置条件:可以理解为是每一个class在执行结束时,最后执行的收尾(类级别) 只执行一次
    @classmethod
    def tearDownClass(cls) -> None:
        print('这是teardownclass')



    def test_01(self):
        # print('这是unitDemo的测试用例')
        # print(self.a)
        a = 3.1415926123456789
        b = 3.141592612345678
        self.assertAlmostEqual(a,b,msg = '不对')
        # self.assertEqual(a,b,msg='不对')

    def test_02(self):
        # c = self.func(1,2)
        # print(c)
        c = 10
        print('这是02')
        UnitDemo.a = c
        return c

    def test_03(self):
        # print(self.test_02())
        print(self.a)

    # 如果不用test开头,则为普通函数
    def func(self,a,b):
        print('这是func函数')
        return a + b

#  unittest启动
if __name__ == '__main__':
    unittest.main()

2.UnitTest下的自动化测试实现

'''
    Unittest下的自动化测试实现
        一个完整的流程,不同的小流程分为不同的用例去管理。这样便于维护


'''
import unittest

from class24.web_keys import Keys


class UnitAuto(unittest.TestCase):

    # 前后置
    @classmethod
    def setUpClass(cls) -> None:
        cls.key = Keys('Chrome')

    # def setUp(self) -> None:
    #     self.key = Keys('Chrome')
    #
    # def tearDown(self) -> None:
    #     self.key.quit()

    @classmethod
    def tearDownClass(cls) -> None:
        cls.key.quit()

    def test_01_login(self):
        # key = Keys('Chrome')
        self.key.open('http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
        self.key.input('name','accounts','sixiaoyou')
        self.key.input('name','pwd','xxx')
        self.key.click('xpath','//button[text()="登录"]')
        # self.assertEqual() 类似于 assert a == b,msg
        # self.assertTrue(self.key.assert_text('link text','退出','退出1'),msg = '断言失败')
        self.assertEqual('退出1',self.key.get_text('link text','退出'),msg = '断言失败')
        self.key.sleep(5)
        # key.quit()

    # def test_02_search(self):
        # key = Keys('Chrome')
        # self.key.open('http://39.98.138.157/shopxo/index.php')
        # self.key.input('id','search-input','手机')
        # self.key.click('id','ai-topsearch')
        # self.key.sleep(5)
        # key.quit()

if __name__ == '__main__':
    unittest.main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

司小幽

真诚赞赏,手留余香。

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

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

打赏作者

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

抵扣说明:

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

余额充值