• Pytest搜索规则/命令详解/跳过测试和预期失败测试


    pytest中文文档

    '''
    https://learning-pytest.readthedocs.io/zh/latest/index.html
    '''

    pytest的安装与应用

    '''
        在pycharm终端输入
            pip3 install pytest==5.4.3
        验证是否安装是否成功?
            再次输入pytest,出现python及pytest版本号,就说明安装成功了
    '''

    pytest中搜索规则

    '''
        1 当前目录搜索以test_开头或者_test结尾的文件
            test_01.py
            login_test.py
        2 测试函数以及测试方法是以test开头
            def testlogin():
                assert 1==1
            不符合要求:
                def logintest():
                    assert 3==3
    
        3 测试类必须是Test开头
            class Test_Login():
                def test_login_01(self):
                    assert 2==2
            不符合要求:
                class Login_Test():
                    def test_login_02(self):
                        assert 4==4
    '''

    pytest命令详解:

    '''
        --help: 
    
        -v:可以输出用例更加详细的执行信息
        -s: 输出用例中的调试信息,比如print等打印信息
        --collect-only:列出当前目录下所有的测试模块,测试类及测试函数
        
        -k: 执行用例中包含“关键字”的用例
        -m: 根据标记执行特定的测试用例(@pytest.mark.xxx加上装饰器>>>pytest -m xxx)
            and>>>@pytest.mark.login/@pytest.mark.exit这两个装饰器在同一个测试用例可以用and>>>pytest -m "login and exit"
            or>>>pytest -m "login or exit">>>执行包含login或exit的装饰器
            not>>>pytest -m "login not exit">>>执行login但不包括exit的装饰器
        -x: 用例失败后立刻停止,后续的用例也不执行了
        --maxfail=num: 指定失败num次后停止(从上往下执行用例,如果失败num次就停止,小于num则继续运行剩下的用例)
        --durations=num: 当num等于0时,可以打印出所有用例接口所消耗时间;当num=3(不一定要等于3)时,打印出接口耗时最长的3条用例信息
            requests库中,requests.get(url='xxx').elapsed.total_seconds(),可以统计出一个接口所消耗时间
        
        -q: 简化控制台的输出
        --tb=style(style可以是:no,line,short) 屏蔽测试用例执行输出的回溯信息,可以简化用例失败时的输出信息
        
        运行指定的测试类:pytest test_cc/m1_test.py::TestClass -v
        运行指定的测试方法:pytest test_cc/test_m2.py::test_three -v
        
        学习博客地址:https://www.cnblogs.com/pipile/p/12696425.html
    '''

    pytest中运行测试子集(冒号左右不能有空格,需要注意)

    '''
        单独运行一个包
            pytest -v logins/
        单独运行一个模块
            pytest -v logins/test_01.py
        单独运行一个模块下的一个方法用例(单个def)
            pytest -v logins/test_01.py::test_login_01
        单独运行一个模块下的一个类下的一个方法用例(class下的def)
            pytest -v logins/test_01.py::Test_Login::test_login_02
    '''

    pytest中断言详解

    '''    assert是python中原生断言,但是pytest中的assert会帮你把错误信息找出来,加上-v参数可以看到更详细的错误信息
            in判断(成员运算符,字符串也可以使用)
            ==判断(在python中,==是表示值和类型都要相等)
        eg:
            import requests
            import pytest
            def test_login():
                dict1 = {
                    'loginName':'',
                    'password':"******",
                    'rand': "1234",
                    'randCode': "1234",
                    'roleFrom': "1"
                }
                r = requests.post(url='http://******/login', json=dict1)
                assert '账号不能为空' == r.json()['msg']
    '''

    pytest中跳过测试与预期失败的测试

    '''
        跳过测试(@pytest.mark.skip(reason='说明原因'))
            import pytest
            @pytest.mark.skip(reason='该功能暂时取消,此测试用例忽略执行')
            def test_login_phone_001():
                assert 1==1
    
            @pytest.mark.skip(reason='该功能暂时取消,此测试用例忽略执行')
            def test_login_phone_002():
                assert 2==2
    
            def test_login_email_001():
                assert 3==3
                    结果:
                        test_01.py::test_login_phone_001 SKIPPED
                        test_01.py::test_login_phone_002 SKIPPED
                        test_01.py::test_login_email_001 PASSED
        预期失败测试(@pytest.mark.xfail(reason='说明原因'))
            import pytest
            import requests
            @pytest.mark.xfail(reason='期望返回状态码200,实际是1001')
            def test_login():
                dict1 = {
                    'loginName':'',
                    'password':"******",
                    'rand': "1234",
                    'randCode': "1234",
                    'roleFrom': "1"
                }
                r = requests.post(url='http://******/login', json=dict1)
                assert r.status_code==200        
                    结果:
                        test_01.py::test_login XPASS
    '''
    while True: print('studying...')
  • 相关阅读:
    c++ range库
    差分数组
    简单比较一下C++中的引用和指针
    数字图像处理中一张常用图片
    内存池与内存块
    SmartPtr
    Allocator
    Java学习第12天
    Java学习第11天
    Java学习第10天
  • 原文地址:https://www.cnblogs.com/xuewei95/p/15129727.html
Copyright © 2020-2023  润新知