• 九、测试夹具fixture


    unittest中前置后置条件:setUp() 、tearDown()

    pytest中前置后置条件:fixture  也叫测试夹具

    fixture测试夹具语法:

    函数上面添加@pytest.fixture(),说明这是个测试夹具,我们在代码中设置浏览器函数(函数名driver))为测试夹具

    把 return 改成 yield 实现前置和后置

      - yield 前就是前置

      - yield 后的就是后置

      注意:yield可以理解为return,有返回值。执行yield,其后面的代码会继续执行,执行return,其后面的代码不会执行

    后置清理语句放在 yield 之后driver.quit()

    文件名放在根目录,名称为conftest.py(注意:文件名称是固定的,不可修改为其他)

    """固定文件名 conftest.py.
    存储所有的测试夹具。fixture
    """
    import pytest
    from config.config import WAIT_TIME
    
    @pytest.fixture(scope="class")  
    def driver():
        """管理浏览器"""
        # 前置条件
        from selenium import webdriver
        driver = webdriver.Chrome()
        driver.implicitly_wait(WAIT_TIME)
        yield driver   # yield 是个生成器,在这个之前的就是前置条件,在这个之后的就是后置条件 ,相当于return
        # 后置条件
        driver.quit()
    
    '''
    @pytest.fixture(scope="class")  ,在运行程序时:
    scope="class",,每个测试用例的类,只会执行一次。
    scope="function",每个函数都会执行一次。
    scope="module",每个模块执行一次。
    '''

    fixture测试夹具使用:

    将测试夹具的定义的函数名,作为参数,放到测试用例的函数中

    @pytest.mark.parametrize("test_info", login_success)
    def test_login_success(self,test_info,driver):
        pass

    测试用例的方法中要用到driver,调用driver这个测试夹具,再执行测试用例的方法,最后再执行后置条件

    思考:为什么不将测试夹具放在common模块中去?

    在因为driver这个对象,在测试用例中会经常的使用,放在common中要经常进行模块的import操作;而conftest是pytest里面有一个比较智能的地方,不需要去导入,运行程序的时候,会直接去conftest.py文件去找driver,找到了就继续运行,找不到就报错。省了很多导入的操作,也避免了因为导入模块可能存在路径错误的隐患

    pytest 有2个功能不能和unittest兼容:

    --parmatrize

    --fixture

    --hook

    unittest去编写用例

    --ddt

    --setUpteatDowm

    --self.assertTrue()

    pytest运行用例

    --自动收集

    --用例筛选

    --测试报告

    --测试插件

    pytest有哪些好处?为什么用pytest、unittest

    --unittest是标准库,pytest是第三方库

    --标准库不需要安装

    --标准库不存在说和python版本不兼容的问题 

    pytest重运行

    安装:pip3 install pytest-rerunfailures

    为什么要重运行:这次运行成功,不代表下次运行也会成功,因为有网络等因素的影响 

    多次运行用例 

    pytest --reruns 2 --reruns-delay 5    # 重运行2次,意思是一共运行3次,每一次的重运行之间相隔5秒

    pytest.main(['--reruns','5'])

  • 相关阅读:
    CSS属性选择器
    JS中For循环中嵌套setTimeout()方法的执行顺序
    document.getElementsByTagName()方法的返回值
    常见浏览器及其内核
    git与svn的区别
    JS解析URL参数为对象
    CSS中的伪类和为伪元素
    CSS中:first-child伪类
    CSS链接使用伪类的顺序
    CSS行内框(内联元素)
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/13810509.html
Copyright © 2020-2023  润新知