美文网首页
pytest中mark指定文件运行08

pytest中mark指定文件运行08

作者: 软件开发技术修炼 | 来源:发表于2022-05-20 23:34 被阅读0次

    当自动化用例特别多,目前只需运行部分用例

    测试函数标记:

    一个标记可以应用在多个函数上;
    一个函数可以有多个标记;
    被标记的在不同文件夹下也可以被执行;

    1、mark,给测试用例打各种标签,运行时指定运行某个标签的用例;

    标签可打在方法上,也可打到类上,标记两种方式:
    1、直接标记类或方法或函数:@pytest.mark.标签名
    2、类属性:pytestmark = [pytest.mark.标签名,pytest.mark.标签名] ,注意属性名称是固定的

    import pytest
     
    @pytest.mark.beta   # 可以给类打标签
    class TestLogin:    # 标记类
     
        @pytest.mark.qc
        @pytest.mark.beta   # 也可以多个标签
        def test_login(self):   # 标记方法
            pass
     
    @pytest.mark.smoke      # 单个标签
    def test_register():    # 标记函数
            pass
     
    class TestClass:
        # 加一个 pytestmark的类属性
        pytestmark = [pytest.mark.qc, pytest.mark.beta] # 标签存放在一个列表
     
    pytest.main()
    

    2、注册标签名

    想运行已打好标记的函数,需对标签名进行注册
    在根目录中创建pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到

    # pytest.ini
    # 只能修改=右边的值
    [pytest]   
    python_files = demo_*.py    # 模块名以demo_开头
    python_functions = demo_*   # 方法名以demo_开头
    python_classes = Demo*  # 类名名以Demo开头
     
    # 注册标签
    markers =
        qc
        beta
        smoke
    

    pytest.ini是pytest的配置文件
    python_files (args): 用于Python测试模块发现的全局样式文件模式(文件名)
    python_classes (args):前缀或glob名称,用于发现Python测试类(类名)
    python_functions (args): Python测试函数和方法发现的前缀或glob名称(方法名)
    addopts: 添加一个或多个命令行参数,如,添加 -vs 命令参数后:运行pytest test_case.py 等同于 pytest -vs test_case.py

    3、运行指定的标签,通过命令

    单个标签:pytest -m "标签名"(-m意思是执行标签mark),不想执行某个标签可以用not来取反,即pytest -m "not 标签名"

    多个标签:可以加上判断,pytest -m "qc and beta" 或者 pytest -m "qc or beta" 效果是一样的
    注意:标签名一定要加双引号,单引号是会报错的。

    if __name__ == '__main__':
        # main()方法是可以接收不定长参数的,因此可以把要执行的命令放在一个列表中
        pytest.main(['-m qc and beta', '-s'])   # 标签名不需要加引号
    

    4、skip跳过标记

    直接跳过:@pytest.mark.skip(reason="原因")
    条件跳过:@pytest.mark.skipif(a==1,reason="原因")

    db_host = 'localhost'
     
    @pytest.mark.skip("和现在的需求不符合")  # 不满足当下了,或别人编写的暂时不能删的
    def test_yuz(self):
        pass
     
    @pytest.mark.skipif(db_host == 'localhost', reason='只测试线上环境,不测试本地环境')
    def test_develop_env(self):
        pass
    

    相关文章

      网友评论

          本文标题:pytest中mark指定文件运行08

          本文链接:https://www.haomeiwen.com/subject/ueofprtx.html