一、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


二、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"])

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:觉得这篇文章有用的朋友,多多点赞打赏哦~!
网友评论