• UnitTest基础、测试实例


    1.四大组件:
    a.test fixture:setUp(前置条件),tearDown(后置条件),用于初始化测试用例及清理和释放资源
    b.test case:测试用例,通过集成unittest.TestCase,来实现用例的继承。在UnitTest中,测试用例都是通过test来识别的。
    例:class forTest(unites.TestCase);def test_xx
    c.test suite:测试套件,也称为测试用例集
    d.test runner:运行器,一般通过runner来调用suite去执行测试

    2.UnitTest运行机制:通过在main函数中,调用unittest.main()运行所有内容。

    import unittest
    
    class forTest(unittest.TestCase):
    
        # 类的初始化
        @classmethod
        def setUpClass(cls) -> None:
            print('sClass')
    
        # 类的释放
        @classmethod
        def tearDownClass(cls) -> None:
            print('tclass')
    
        # 用例初始化(用例执行前执行)
        def setUp(self) -> None:
            print('setUp')
    
        # 用例释放(用例执行后执行)
        def tearDown(self) -> None:
            print('tearDown')
    
        #函数
        def plus(self,a,b):
            print(a+b)
            return a+b
    
        def test_c(self):
            self.plus(1,2)
            print('c')
    
        # 测试用例
        def test_a(self):
            print('a')
    
        def test_b(self):
            print('b')
    
    if __name__=='__main__':
        unittest.main(verbosity=2)  # verbosity=2 让结果更细致些
    
    '''
    只有test_xx() 的函数才能执行
    '''

    打印结果:

    3.ddt数据驱动
    ddt(data-driver tests), 在实际测试中,单个测试需要用多种不同的条件(测试数据)对其测试。

    a. 在class前定义@ddt,data用于设定参数

    下面的例子实现自动打开百度,并输入'网球王子' 、'王者荣耀',相当于两条测试数据

    import unittest
    from selenium import webdriver
    import time
    from ddt import ddt,data,
    
    @ddt
    class forTest01(unittest.TestCase):
    
        def setUp(self) -> None:
            self.driver = webdriver.Chrome()
            self.driver.get('http://www.baidu.com/')
            # pass
    
        def tearDown(self) -> None:
            time.sleep(2)
            # pass
    
        @data('网球王子', '王者荣耀')
        def test_1(self, txt):
            self.driver.find_element_by_id('kw').send_keys(txt)
            self.driver.find_element_by_id('su').click()
    
    if __name__=='__main__':
        unittest.main()

    b. unpack用于解析参数。当需要传入多个参数时,unpack可以依次解析传参。

    @ddt
    class forTest01(unittest.TestCase):
    
        def setUp(self) -> None:
            self.driver = webdriver.Chrome()
            # pass
    
        def tearDown(self) -> None:
            time.sleep(2)
            # pass
    
        @data(('http://www.baidu.com/', '王者荣耀'),('http://www.baidu.com/','网球王子'))
        @unpack
        def test_1(self, url, txt):
            self.driver.get(url)
            self.driver.find_element_by_id('kw').send_keys(txt)
            self.driver.find_element_by_id('su').click()

    c. file_data是ddt中用于读取yml文件的装饰器

    文件传参实现自动化

    import unittest
    from selenium import webdriver
    import time
    from ddt import ddt,data,unpack,file_data
    import yaml
    
    @ddt
    class forTest01(unittest.TestCase):
    
        def setUp(self) -> None:
            self.driver = webdriver.Chrome()
            # pass
    
        def tearDown(self) -> None:
            time.sleep(3)
            # pass
    
        @file_data('ppp.yml')
        def test_1(self, **kwargs):
            self.driver.get(kwargs.get('url')) # 获取参数中key为url的value
            self.driver.find_element_by_id('kw').send_keys(kwargs.get('txt'))
            self.driver.find_element_by_id('su').click()

    安装PyYAML

    import yaml
    
    file = open('f.yml', encoding='utf-8')
    res = yaml.load(file, Loader = yaml.FullLoader)
    print(res)

    打印结果:

    {'name': '小龙女', 'age': 18, 'data': {'a': 1, 'b': '2', 'c': 3, 'd': 4}, 'list': [1, 2, 'c']}

  • 相关阅读:
    P1019 单词接龙
    P1219 八皇后
    Find a way
    P1056 排座椅
    P1067 多项式输出
    关于前缀和,A
    洛谷P1223
    洛谷P1803
    洛谷P1208
    常用方法 Excel转换为DataSet
  • 原文地址:https://www.cnblogs.com/suancaipaofan/p/13153199.html
Copyright © 2020-2023  润新知