#conftest.py
import pytest
@pytest.fixture()
def login():
print('登陆了')
image.png
例子1:
import pytest
@pytest.fixture(scope="module", autouse=True)
def open_browser():
print("\n打开浏览器,打开百度首页")
yield
print('执行teardown')
print('最后关闭浏览器')
def test_soso(login):
print('case1: 登际后执行搜索')
def test_cakan():
print('case2:不登陆就看')
def test_cart(login):
print('case3,登陆,加购物车')
if __name__ == '__main__':
pytest.main(['-s','test_fixture.py'])
test_fixture.png
例子2:
import pytest
@pytest.fixture()
def open_browser():
print("\n打开浏览器,打开百度首页")
yield
print('执行teardown')
print('最后关闭浏览器')
@pytest.mark.usefixtures('open_browser')
def test_soso():
print('case1: 登际后执行搜索')
def test_cakan():
print('case2:不登陆就看')
@pytest.mark.usefixtures('open_browser')
def test_cart():
print('case3,登陆,加购物车')
if __name__ == '__main__':
pytest.main(['-s','test_fixture.py'])
image.png
例子3:
#test_fixture_assert_skip_01.py
import pytest
import sys
# 默认 scope=function
def test_soso(login):
print('case1: 登际后执行搜索')
assert 1 == 1
assert {'name': 'linda', 'age': 18} == {'name': 'linda', 'age': 188}
a = 'hello'
age = 35
assert a in 'hello world'
assert 20 < age < 80
def f():
return 3
@pytest.mark.skip
def test_cakan():
print('case2:不登陆就看')
assert f() == 4
environment = 'android'
@pytest.mark.skipif('environment=="android"', reason='android平台没有这个功能')
def test_cart_3(login):
print('case3,登陆,点击苹果图标')
@pytest.mark.skipif(sys.platform =='win32', reason='不在windows下运行')
@pytest.mark.skipif(sys.version_info < (3,6), reason='3.6版本以下不执行,您需要更高版本')
def test_cart(login):
print('case3,登陆,点击苹果图标,3.6以下版本无法执行')
@pytest.mark.xfail
def test_xfail():
print(broken_fixture())
def broken_fixture():
raise Exception("Sorry, it's 中断异常.")
if __name__ == '__main__':
pytest.main(['-s','test_fixture_assert_skip_01.py'])
image.png
image.png
image.png
image.png
image.png
例子4:
import pytest
test_user_data = ["linda", "servenruby"]
@pytest.fixture(params=test_user_data)
def login_r(request):
user = request.param
print("\n打开首页准备登陆,登陆用户:%s" % user)
return user
def test_login_s(login_r):
print(login_r)
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture_request_06.py'])
image.png
例子5:
import pytest
@pytest.fixture()
def start():
print("\n----begin-登陆--")
def test_soso():
print('\ncase1: 登际后执行搜索')
def test_cakan():
print('\ncase2:不登陆就看')
def test_cart():
print('\ncase3,登陆,加购物车')
def test_quit():
print('case3,登陆,退出')
if __name__ == '__main__':
pytest.main(['-s','-v','test_fixture_usefixtures_05.py'])
image.png
例子6:
import pytest
# 参数化,前面两个变量,后面是对应的数据;3+5--->test_input,8-->expected
@pytest.mark.parametrize("test_input,expected",[("3+5", 8),
("2+5", 7),
("7*5", 30),
])
def test_eval(test_input, expected):
# eval将字符串str当成有效的表达式来求值并返回计算结果
assert eval(test_input) == expected
if __name__ == '__main__':
pytest.main()
image.png
例子7:
import pytest
test_user_data = ["linda", "servenruby"]
@pytest.fixture(scope="module")
def login_r(request):
# 这是接收传入的参数,接收一个参数
user = request.param
print("\n打开首页准备登陆,登陆用户:%s" % user)
return user
# 这是pytest的参数化数据驱动,indirect=True 是把login_r当作函数去执行
@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
# 登陆用例
a = login_r
print(test_user_data)
print("测试用例中login的返回值:%s" % a)
assert a != ""
image.png
例子8:
import pytest
test_user_data = [{"user": "linda", "password": "888888"},
{"user": "servenruby", "password": "123456"},
{"user": "test01", "password": ""}]
@pytest.fixture(scope="module")
def login_r(request):
# 可以通过dict形式,虽然传递一个参数,但通过key的方式可以达到类似传入多个参数的效果
user = request.param['user']
pwd = request.param['password']
print("\n打开首页准备登陆,登陆用户:%s,密码:%s" % (user, pwd))
if pwd:
return True
else:
return False
# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
# 登陆用例
a = login_r
print("测试用例中login的返回值:%s" % a)
assert a, "失败原因:密码为空"
image.png
例子9:
import pytest
test_user_data1 = [{"user": "linda", "password": "888888"},
{"user": "servenruby", "password": "123456"},
{"user": "test01", "password": ""}]
test_user_data2 = [{"q": "中国平安", "count": 3, "page": 1},
{"q": "阿里巴巴", "count": 2, "page": 2},
{"q": "pdd", "count": 3, "page": 1}]
@pytest.fixture(scope="module")
def login_r(request):
# 这是接收传入的参数,接收一个参数
user = request.param['user']
password = request.param['password']
print("\n用户名:%s,密码:%s" % (user, password))
@pytest.fixture(scope="module")
def query_param(request):
q = request.param['q']
count = request.param['count']
page = request.param['page']
print("查询的搜索词:%s" % q)
return request.param
# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
# 从下往上执行
# 两个数据进行组合测试有3*3个测试用例执行(test_user_data1的个数*test_user_data2的个数)
@pytest.mark.parametrize("query_param", test_user_data2, indirect=True)
@pytest.mark.parametrize("login_r", test_user_data1, indirect=True)
def test_login(login_r, query_param):
# 登陆用例
print(login_r)
print(query_param)
例子10:
import pytest
test_user_data1 = [{"user": "linda", "password": "888888"},
{"user": "servenruby", "password": "123456"},
{"user": "test01", "password": ""}]
test_user_data2 = [{"q": "中国平安", "count": 3, "page": 1},
{"q": "阿里巴巴", "count": 2, "page": 2},
{"q": "pdd", "count": 3, "page": 1}]
@pytest.fixture(scope="module")
def login_r(request):
# 这是接收传入的参数,接收一个参数
user = request.param['user']
password = request.param['password']
print("\n用户名:%s,密码:%s" % (user, password))
@pytest.fixture(scope="module")
def query_param(request):
q = request.param['q']
count = request.param['count']
page = request.param['page']
print("查询的搜索词:%s" % q)
return request.param
# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
# 从下往上执行
# 两个数据进行组合测试有3*3个测试用例执行(test_user_data1的个数*test_user_data2的个数)
@pytest.mark.parametrize("query_param", test_user_data2, indirect=True)
@pytest.mark.parametrize("login_r", test_user_data1, indirect=True)
def test_login(login_r, query_param):
# 登陆用例
print(login_r)
print(query_param)
image.png
例子11:
import pytest
@pytest.mark.webtest
def test_send_http():
pass
@pytest.mark.apptest
def test_devide():
pass
@pytest.mark.android
def test_search():
pass
@pytest.mark.ios
def test_add():
pass
def test_plus():
pass
if __name__ == '__main__':
pytest.main()
image.png
例子12:
import pytest
def test_01():
print('test01')
@pytest.mark.last
def test_02():
print('test02')
assert(4==1)
@pytest.mark.skip
def test_03():
print('test03')
@pytest.mark.run(order=1)
def test_04():
print('test04')
# assert(4==1)
image.png
例子13:
import time
import random
def test_rerun():
time.sleep(1)
a = random.randint(1, 3)
print(a)
assert 3 == a
image.png
例子14:
import pytest
@pytest.mark.parametrize(('x', 'y'), [(1, 1), (1, 0), (0, 1)])
def test_simple_assume(x, y):
pytest.assume(x == y)
pytest.assume(True)
pytest.assume(False)