zoukankan      html  css  js  c++  java
  • Pytest框架实现一些前后置(固件、夹具)的处理

    Pytest框架实现一些前后置(固件、夹具)的处理,常用三种。

    一、setup/teardown,setup_class/teardown_class所有用例

    为什么需要这些功能?
    class TestProduct():
    
    ##这个在所有的用例之前只执行一次
        def setup_class(self):
            print("在每个类执行前的初始化工作:比如创建日志对象,创建数据库的连接,创建接口的请求对象")
    
        def setup(self):
            print("在执行测试用例之前初始化的代码:找开浏览器,加载网页面")
    
        def test_01_tester(self):
            print("我是电视机")
    
        def test_02_developer(self):
            print("我是沙发")
    
        def test_03_producter(self):
            print("我是衣柜")
    
        def teardown(self):
            print("在执行测试用例之后的扫尾的代码")
    
        def teardown_class(self):
            print("在每个类执行后的扫尾工作:比如销毁日志对象,销毁数据库的连接,销毁接口的请求对象")
    注意:和Unittest不一样的是,全是小写
     

    二、使用@pytest.fixture()装饰器来实现部分用例的前后置。

    @pytest.fixture(scope="",params="",autouse="",ids="",name="")
    1. scope表示的是被pytest.fixture标记的方法的作用域。function(默认),class,module,package/session

    @pytest.fixture()如果不写参数,参数默认就是scope="function",它的作用范围是每个测试用例之前运行一次,销毁代码在测试用例之后运行。

    fixture为class级别的时候,如果一个class里面有多个用例,都调用了次fixture,那么此fixture只在此class里所有用例开始前执行一次。

    fixture为module时,在当前.py脚本里面所有用例开始前只执行一次

    fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例的时候,如果多个用例只需调用一次fixture,那就可以设置为scope="session",并且写到conftest.py文件里。

     

    2. params:参数化(支持列表[], 元祖(),字典列表[{},{},{}],字典元祖({},{},{})

    @pytest.fixture(scope="function",params=['爸爸','妈妈','宝贝'])
    def my_fixture(request):
        print("前置")
        yield request.param        ##另外一种方法即return request.param,区别:return和yield都表示返回的意思,但是return的后面不能有代码,yield
                                     返回后后面可以接代码
        print("后置")
        
    class TestLogin():
        def test_01_tester(self):
            print("我是测试,可以登录")
    
        def test_02_developer(self,my_fixture):
            print("我是开发,可以登录")
            print('-------------------------'+ str(my_fixture))
    
        def test_03_producter(self):
            print("我是产品,不可以登录")
    ###输入结果:
    test_login.py::TestLogin::test_01_tester 我是测试,可以登录
    PASSED
    test_login.py::TestLogin::test_02_developer[u7238u7238] 我是开发,可以登录
    -------------------------爸爸
    PASSED
    test_login.py::TestLogin::test_02_developer[u5988u5988] 我是开发,可以登录
    -------------------------妈妈
    PASSED
    test_login.py::TestLogin::test_02_developer[u5b9du8d1d] 我是开发,可以登录
    -------------------------宝贝
    PASSED
    test_login.py::TestLogin::test_03_producter 我是产品,不可以登录
    PASSED

    3.autouse=True : 自动执行,默认False,为true时每个用例前执行一次前置

    4. ids: 当使用params参数化,给每一个值设置一个变量名,意义不大,作用于传参时返回[u7238u7238] 的问题

    @pytest.fixture(scope="function",params=['爸爸','妈妈','宝贝'],ids=['dad','mom','baby'])
    def my_fixture(request):
        print("前置")
        yield request.param  
        print("后置")

    5. name: 表示的是被@pytest.fixture标记的方法取一个别名,当取了别名之后,那么原来的名称就用不了了。

     

    三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)

     
    1. conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改。

    2. 可以作用于不同的py文件中的使用同一个fixture的函数。

    3. conftest.py需要和运行的用例放到同一层目录下,并且不需要做任何的import导入的操作。

     

    总结:

    setup/teardown, setup_class/teardown_class, 它是作用于所有用例或者所有的类

    @pytest.fixture() 它的作用是既可以部分也可以全部前后置

    conftest.py 和@pytest.fixture()结合使用,作用于全局的前后置

     

    四、断言

    assert 1==2
     

    五、pytest结合allure-pytest插件生成allure测试报告

    1. 下载,解压,配置path路径

    验证:allure --version
    问题:终端中可以验证,pycharm中不能验证,重启pycharm

    2. 加入命令生成json格式的临时报告

    --alluredir ./temp

    3. 生成allure报告

    os.system('allure generate ./temp -o ./report --clean')
      • allure generate 命令,固定写法

      • ./temp 临时的json格式报告的路径

      • -o 输出output

      • ./report 生成的allure报告的路径

      • --clean 清空./report 路径原来的报告

    三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
  • 相关阅读:
    洛谷P1514引水入城
    洛谷P2827蚯蚓
    外部排序总结
    桶排序
    基数排序
    计数排序
    搜索文件-读目录的使用
    堆排序
    甲乙用同一串数字玩游戏
    Cracking the Coding Interview 8.7
  • 原文地址:https://www.cnblogs.com/deeptester-vv/p/14844345.html
Copyright © 2011-2022 走看看