美文网首页Pytest
pytest单元测试框架(2)skip&fixture

pytest单元测试框架(2)skip&fixture

作者: 小二哥很二 | 来源:发表于2019-07-25 20:44 被阅读0次

一、skip和skipif跳过用例

import pytest
import sys

@pytest.mark.skip(reason='no way of currently testing this')
def test_01():
    x='this'
    assert 'h' in x
@pytest.mark.skipif(sys.version_info<(3.6),reason='requires python3.6 or higher')
def test_02():
    y='hello'
    assert 'o' in y
image.png
image.png

二、fixture:fixture(scope="function", params=None, autouse=False, ids=None, name=None):

1、函数传参和fixture传参数request

# 测试账号数据
test_user_data = [{"user":"admin1", "psw":"111111"},
                  {"user":"admin1", "psw":""}]
@pytest.fixture(scope="module")
def login(request):
    user = request.param["user"]
    psw = request.param["psw"]
    print("登录账户:%s" % user)
    print("登录密码:%s" % psw)
    if psw:
        return True
    else:
        return False
# indirect=True 声明login是个函数
@pytest.mark.parametrize("login", test_user_data, indirect=True)      
def test_login(login):
    '''登录用例'''
     a = login
     print("测试用例中login的返回值:%s" % a)
     assert a, "失败原因:密码为空"
if __name__ =="__main__":
        pytest.main(["-s", "test_03.py"])
image.png

2、xfail,当用例a执行失败,用例b和c都依赖于a时候,b和c就没必要再执行,所以标记为xfail

import pytest
canshu=[{'user':'admin','pwd':''}]

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

@pytest.mark.parametrize('login',canshu,indirect=True)
class Test_xx():
    def test_01(self,login):
        resutl=login
        print('用例1:%s' %resutl)
        assert resutl==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

输出:
正在操作登录,账号:admin,密码:
用例1:False
F正在操作登录,账号:admin,密码:
用例2登录结果:False
x正在操作登录,账号:admin,密码:
用例3登录结果:False
x
=================FAILURES===================
_________________ Test_xx.test_01[login0] __________
self = <pytest_learn.test_01.Test_xx object at 0x000001B26C69A358>, login = False
def test_01(self,login):
resutl=login
print('用例1:%s' %resutl)
》 assert resutl==True
E assert False == True
test_01.py:174: AssertionError
1 failed, 2 xfailed in 0.08 seconds

3、三种方法调用fixture
1)函数或类里面方法直接传fixture的函数参数名称
2)使用装饰器@pytest.mark.usefixtures()修饰,括号里传入所要调用的函数名:'login'

import pytest

@pytest.fixture(scope='function',autouse=True)
def start():
    print('\n-----开始执行function-----')

@pytest.mark.usefixtures('start')       #使用usefixtures装饰器,就可以调用start函数
def test_a():
    print('-----用例a执行-----')

3)autouse=True自动使用
4、fixture的作用范围

  • function 每一个函数或方法都会调用
  • class 每一个类调用一次,一个类可以有多个方法
  • module 每一个.py文件调用一次,该文件内又有多个function和class
  • session 是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
    PS:觉得这篇文章有用的朋友,多多点赞打赏哦~!

相关文章

网友评论

    本文标题:pytest单元测试框架(2)skip&fixture

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