zoukankan      html  css  js  c++  java
  • pytest_前置后置

    今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈

    这次总结主要涉及到了以下几点:

    1、unittest中的setUp、tearDown、setUpClass、tearDownClass

    2、pytest中的前置后置如何表达

    3、如何将前置后置和用例关联

    4、pytest中的前置后置的级别如何区分

    5、pytest中的前置后置“继承”关系,如何继承

    简单总结下pytest的前置后置吧,pytest的前置后置非常简单,但是不同于unittest的前置后置,首先回顾下

    1、unittest中的setUp、tearDown、setUpClass、tearDownClass

      在unittest中的前置后置有明确的格式,看如下代码

    import unittest
    
    
    class MyTestCase(unittest.TestCase):
    
        def setUp(self):
            print("我是set_up")
    
        def tearDown(self):
            print("我是teardown")
    
        def test_1(self):
            print("我是测试用例1")
    
        def test_ha(self):
            print("我说测试用例2")
    
    
    if __name__ == '__main__':
        unittest.main()

    可以得出结论,以下是运行结果:

     unittest的前置必须是放在setUp里面,后置必须是放在tearDown里面,这个是有明确的格式的

    当然了,setUp、tearDown是用例级别的,unittest还有类界别 的,请看如下代码

    import unittest
    
    
    class MyTestCase(unittest.TestCase):
    
        @classmethod
        def setUpClass(cls):
            print("我是setupclass")
    
        @classmethod
        def tearDownClass(cls):
            print("我是teardownclass")
    
        def test_1(self):
            print("我是测试用例1")
    
        def test_ha(self):
            print("我说测试用例2")
    
    
    if __name__ == '__main__':
        unittest.main()

    结果如下:

     可以看出setUpClass和tearDownClass都是在这个测试类只运行一次的

    说了这么多,还是言归正传,说下pytest的前置后置

    2、pytest中的前置后置如何表达

      pytest的前置后置只用一个函数就可以解决

    import pytest
    
    
    @pytest.fixture
    def iniy():
        print("我是前置")
        yield
        print("我是后置")
    
    
    @pytest.mark.usefixtures("iniy")
    class TestCase:
    
        def test_1(self):
            print("我是测试用例1")
    
        def test_ha(self):
            print("我说测试用例2")
    
    
    if __name__ == '__main__':
        pytest.main(["test.py"])

    上面代码中的iniy函数就是一个前置后置,只需要加上一个装饰器(pytes.fixture)即可,

    3、如何将用例与前置后置关联

      设置了前置后置之后,用例如何引用?

     @pytest.mark.usefixtures("init_driver")
        def test_name_null_login(self, init_driver):
            """
            用户名为空
    
            """
            init_driver[1].login(test_login_datas.login_name_null_data["name"], test_login_datas.login_name_null_data["passwd"])
            assert(init_driver[1].error() == test_login_datas.login_name_null_data["expect"])

    上面代码中标记的部分就是引用前置后置的方式,置于为什么用例需要传递参数?

    r

    4、pytest中的前置后置的级别如何区分

      查看源码可以看出这个fixture函数存在scope这个参数,这个参数是确定这个前置后置的级别,pytest中前置后置的界别分为函数级别、类级别、模块级别、会话级别,当然我们常用的还是类级别和函数级别

    5、pytest中的前置后置“继承”关系,如何继承

      pytest中的前置后置还可以共用,类似于类的“继承”,当然这个也是需要固定的用法

    如果要实现公用的前置后置,那么需要将这个前置后置放到指定的文件中去------conftest.py

    当然这个继承关系也是有要求的:低级别可以继承高级别,高级别不能继承低级别

      举个栗子:函数级别的可以继承函数级别及更高的级别,但是类级别不能继承函数级别

    # -*- coding:utf-8 -*-
    """
    File Name: conftest
    """
    import pytest
    
    
    @pytest.fixture(scope="class")
    def ini():
        print("我是类前置")
        yield 2
        print("我是类后置")
    
    
    @pytest.fixture
    def init(ini):
       pass

    以上脚本可以看出init这个前置后置继承了ini这个类级别的前置后置,那么我们在下面脚本中直接调用这个init前置后置看看结果如何

    import pytest
    
    
    @pytest.fixture()
    def iniy():
        print("我是前置")
        yield
        print("我是后置")
    
    
    @pytest.mark.usefixtures("init")
    class TestCase:
    
        def test_1(self):
            print("我是测试用例1")
    
        def test_ha(self):
            print("我说测试用例2")
    
    
    if __name__ == '__main__':
        pytest.main(["test.py"])

  • 相关阅读:
    使用Xposed+JustTrustMe来突破SSL Pinning
    反编译工具
    java练习生 使用feign
    java练习生 AOP【日志】【异常处理】
    java 中string类型转Date类型和Date类型转string类型
    Metro Style App 异步简洁而不简单的异步
    Metro Style app :浏览器扩展
    用async 解放你的大脑
    Metro Style App :推送概述(二)
    Metro Style App :Framwork与WinRT(二)
  • 原文地址:https://www.cnblogs.com/LCboss/p/12027916.html
Copyright © 2011-2022 走看看