pytest使用规则:
1.文件开头用test_开头
2.测试类用Test开头
3.测试函数以test_开头
4.断言用assert
固定装置:fixture(固定代码)
1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等
2.测试用例前置条件可以用fixture实现
3.像unitest一样能使用step,teardown
4.fixturn可以实现unittest不能实现的功能,如unittest中的测试用例和测试用例无法传递参数和数据,但fixturn可以
详解:
一、又独立命名,通过声明它们从函数模块类整个项目使用来激活
二、模块化方式实现,每个fixture可互相调用
三、fixture可以从简单的单元扩展到复杂功能,允许配置跟组件。对fiture和测试用例参数化,或者跨函数function类class模moudle测试会话session
在fixture中断言失败error 在用例失败是fail
1.当作参数传入:
@python.fixture()
当其他函数调用被fixture标记的函数,直接当参数传入,用fixture()标记的函数不要用test_开头
用例fixture没有reture,返回值是none
例子:
@pytest.fixture
def login():
p=12345
u=test
return(P)
使用:
def test_login(login)
asser p!=-1,u!=-1
2.使用@pytest.mark.usefixtures('fixture),下面类中的函数自动带入标记的函数入参
使用:
@pytest.fixture
def login():
p=12345
u=test
return(P)
@pytest.mark.usefixtures(login)
class Test_login():
def test_login():
assert p!=1
def test_login2():
assert u!=1
3.autouse参数,可以设置生效范围
@python.fixture(scope="调用范围“,autouse=Ture). [class:每个类运行一次,用例运行前调用一次;session:多.py文件调用;function:每个函数方法运行一次;moudle:每个模块运行一次)
例子:
@python.fixture() 不写范围默认为function
def psw():
p=12345
u=test
return(p)
def test_login(psw):
psw=psw
assert psw==123456
@python.fixture(scope='class') 如果class里有很多用例,都调用fixture,那么此fixture在该class里所有用例开始前执行一次,但里面的值可一直使用
@python.fixture(scope='modle') 在模块里的所有用例开始前运行一次,里面的值可用
@python.fixture(scope='session') session级别是可以跨多个.py文件模块调用的,如果有多个py文件调用且需调用一次,可以设置为scope=session并写到conftest.py下
conftest.py文件名称固定,pytest会自动识别该文件,放工程根目录,就可以全局调用了,如放到其package包下,那只在该package内有效,可以在两个文件内直接调用
多个fixture直接相互作用
1.使用多个fixture,可以返回列表,数组,字典
@pytest.fixture()
def login():
u=test
p=123456
return(u,p)
def test_login(login):
u=login[u]
p=login[p]
2.可设置多个fixture
@pytest.fixture()
def psw():
p=123456
return(p)
def user():
u=test
return(u)
def test_login(user,psw):
u=user
p=psw
asser user and psw !=-1
3.fixture 与fixture相互调用
@pytest.fixture()
def first():
u=user
return u
@pytest.fixture()
def psw(first):
u=first
p=123456
return(u,p)
def test_login(psw):
u=psw[0]
p=psw[1]
asser u!=-1