Pytest学习—标记失败

前言

        在进行自动化测试时,有时候多条测试用例会共用或者依赖某一功能,如果这这一个所依赖的功能报错时,其他依赖的用例全部不能运行。 就比如A用例、B用例执行前都要进行登录,如果登录方法错误了,那么A、B用例都不会运行,那有没有这样一个功能呢,就是依赖的登录用例错的话,只要操作A报错后,B用例就直接跳过不再执行,并且被标记为失败用例。其实Pytest中已经帮我们想到了,那就是使用xfail用例标记为失败的用例。

设计思路

        我们以一个登录操作实例进行说明,
        1、首先把登录写为前置操作,并对登录的密码、账号进行参数化。

        2、将多个用例test_01,test_02、test_03放在同一个class类中

        3、test_01,test_02、test_03全部调用登录方法

        4、设置test_02、test_03执行前用if判断登录的结果,登陆失败的话就执行,pytest.xfail("登录不成功, 标记为 xfail"),具体代码如下:

        

import pytest

canshu = [{'user':'admin','psw':'123'}]

@pytest.fixture(scope='module')
def login(request):
    user = request.param['user']
    psw = request.param['psw']
    print('正在进行操作登录:%s,%s'%(user,psw))
    if psw:
        return True
    else:
        return False

@pytest.mark.parametrize('login',canshu,indirect=True)
class TestLogin():
    def test_01(self,login):
        '''用例1登录'''
        result= login
        print('用例1:%s'%result)
        assert result == True

    def test_02(self,login):
        result = login
        print('用例2,登陆结果:%s' % result)
        if not result:
            pytest.xfail('登陆不成功,标记为xfail')
        assert 1==1

    def test_03(self,login):
        result = login
        print('用例3登陆结果:%s'%result)
        if not result:
            pytest.xfail('登录不成功,标记为xfail!')
        assert 1==1

if __name__ == '__main__':
    pytest.main(['-s','test_xfail.py'])

        上面传的login登录参数是正确的,test_01、test_02、test_03三个用例全部通过。

        此时我们将参数canshu修改一下,再看一下登陆失败的情况,


import pytest

canshu = [{'user':'admin','psw':''}]

@pytest.fixture(scope='module')
def login(request):
    user = request.param['user']
    psw = request.param['psw']
    print('正在进行操作登录:%s,%s'%(user,psw))
    if psw:
        return True
    else:
        return False

@pytest.mark.parametrize('login',canshu,indirect=True)
class TestLogin():
    def test_01(self,login):
        '''用例1登录'''
        result= login
        print('用例1:%s'%result)
        assert result == True

    def test_02(self,login):
        result = login
        print('用例2,登陆结果:%s' % result)
        if not result:
            pytest.xfail('登陆不成功,标记为xfail')
        assert 1==1

    def test_03(self,login):
        result = login
        print('用例3登陆结果:%s'%result)
        if not result:
            pytest.xfail('登录不成功,标记为xfail!')
        assert 1==1

if __name__ == '__main__':
    pytest.main(['-s','test_xfail.py'])

可以看到,只用test_01执行了login方法,而test_02、test_03均未执行login方法,并进行了失败标记,如此一来的话就会提高测试用例额执行效率。

 

扫描二维码关注公众号,回复: 13507686 查看本文章

猜你喜欢

转载自blog.csdn.net/sl01224318/article/details/118612056