zoukankan      html  css  js  c++  java
  • pytest框架用法

    pytest  对比   unittest:

    1、pytest 兼容 unittest,使用unittest写的用例,可以通过pytest去执行
    2、pytest写用例更加简单
    3、加载用例更加智能:
    4、pytest可以对用例做分类管理,执行用例更加的灵活
    5、unittest是python中的官方库,兼容性更好,更稳定,pytest在安装的时候,可能会出现和python版本的兼容问题。
    6、pytest支持的插件非常丰富,功能扩展性强。
    7、pytest用例执行的前置后置处理更加高级



    pytest发现用例的规则

     注意:类一定要大写T开头!!

    
    

     跳过用例:@pytest.mark.skip

    忽略失败的用例(会执行但不会标记失败):@pytest.mark.xfail(reason = “这里可以加入备注:已知的失败用例”)

    给用例打自定义标记:

    1、注册标记:在启动文件同级别目录下创建一个 pytest.ini的配置文件
    2、在pytest.init 添加一个 pytest的配置块
    3、在pytest的配置块下面加一个markers的配置项
    4、在markers的配置项中去注册标记

    5、给对应的用例打标记:@pytest.mark.注册的标记名称

    给类打标记:

    # 方式一:直接类上面打标记
    @pytest.mark.webtest

    # 方式二:通过类属性pytestmark
    class TestClass(object):
    pytestmark = [pytest.mark.webtest, pytest.mark.slowtest]

    运行测试用例:

    满足或、与操作,or、 and

    pytest.main(["-m battery or white"])

    pytest数据驱动

    @pytest.mark.parametrize('case',[11,22,33,44,155])
    def test_03(case):
        assert case < 100
    
    -----------------------------------------------------------------------
    error_case_data = [
        {'mobile': "", "pwd": "python1", "expected": "请输入手机号"},
        {'mobile': "1868472055a", "pwd": "python1", "expected": "请输入正确的手机号"},
        {'mobile': "18684720553", "pwd": "", "expected": "请输入密码"}
    ]
    
    
    # 读取excel数据
    @pytest.mark.parametrize('case', error_case_data)
    def test_dome(case):
        print(case)
        print('--------------用例执行-------------')
        assert True

    用例前置、后置

    统一放到conftest.py文件中,和pytest的启动文件放同一目录下,不需要导入!

    # 用例级别的前置后置条件
    @pytest.fixture()
    def case_fixture():
        # 前置条件
        print("------------用例执行的前置条件--------------------")
        yield
        # 后置条件
        print("------------用例执行的后置条件--------------------")
    # 类级别的前置后置
    @pytest.fixture(scope='class')
    def class_fixture():
        # 前置条件
        print("-------用例类-----执行的前置条件--------------------")
        yield
        # 后置条件
        print("-------用例类-----执行的后置条件--------------------")
    @pytest.fixture(scope='session', autouse=True)
    def session_fixture():
        # 前置条件
        print("-------会话级别-----执行的前置条件--------------------")
        yield
        # 后置条件
        print("-------会话级别-----执行的后置条件--------------------")
    # 模块级别的前置后置:
    # autouse=True:前后置会自动执行,不需要手动添加到指定的类,或函数上去(一般用于模块或会话级别)
    @pytest.fixture(scope='module', autouse=True)
    def module_fixture():
        # 前置条件
        print("-------模块-----执行的前置条件--------------------")
        yield
        # 后置条件
        print("-------模块-----执行的后置条件--------------------")

    用例使用:

    @pytest.fixture()
    def case_fixture():
        # 前置
        driver = webdriver.Chrome()
        expected = 200
        yield driver, expected
        # 后置
        driver.quit()
    
    
    # @pytest.mark.usefixtures("case_fixture") 这个使用方法,只限于不需要将前置条件中的数据传给用例的情况下
    class TestLogin02:
        """测试登录"""
        def test_login_pass(self, case_fixture):
            """正常登录的用例"""
            driver, expected = case_fixture
            driver.get("http://www.baidu.com")


     
  • 相关阅读:
    【LeetCode-栈】栈排序
    【LeetCode-数组】旋转数组
    【LeetCode-数组】两个数组的交集 II
    【LeetCode-树】二叉树的层次遍历 II
    【LeetCode-字符串】Fizz Buzz
    【LeetCode-数组】数组的相对排序
    解决Oracle表中数据乱码的问题
    docker搭建mysql 用户名密码忘记了怎么办
    java中如何将string 转化成long
    http三次握手四次挥手
  • 原文地址:https://www.cnblogs.com/erchun/p/12953115.html
Copyright © 2011-2022 走看看