前置条件
#conftest.py
import pytest
@pytest.fixture()
def login():
print('登陆了')
例子 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'])
例子 2
import pytest
@pytest.fixture(scope="module", autouse=True)
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_fixture2.py'])
import pytest
@pytest.fixture(scope="function", autouse=True)
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_fixture2.py'])
例子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'])
例子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'])
例子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'])
例子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()
例子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 != ""
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture7.py'])
例子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, "失败原因:密码为空"
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture8.py'])
例子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)
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture10.py'])
"D:\Program Files\ProgramData\envs\python36_ttsx\python.exe" C:/Users/luojun/Desktop/demo/test_fixture10.py
============================= test session starts =============================
platform win32 -- Python 3.6.12, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: C:\Users\luojun\Desktop\demo
plugins: allure-pytest-2.8.40, html-3.1.1, metadata-1.11.0, rerunfailures-9.1.1
collected 9 items
test_fixture10.py
用户名:linda,密码:888888
查询的搜索词:中国平安
None
{'q': '中国平安', 'count': 3, 'page': 1}
.查询的搜索词:阿里巴巴
None
{'q': '阿里巴巴', 'count': 2, 'page': 2}
.
用户名:servenruby,密码:123456
None
{'q': '阿里巴巴', 'count': 2, 'page': 2}
.查询的搜索词:中国平安
None
{'q': '中国平安', 'count': 3, 'page': 1}
.查询的搜索词:pdd
None
{'q': 'pdd', 'count': 3, 'page': 1}
.
用户名:linda,密码:888888
None
{'q': 'pdd', 'count': 3, 'page': 1}
.
用户名:test01,密码:
None
{'q': 'pdd', 'count': 3, 'page': 1}
.查询的搜索词:阿里巴巴
None
{'q': '阿里巴巴', 'count': 2, 'page': 2}
.查询的搜索词:中国平安
None
{'q': '中国平安', 'count': 3, 'page': 1}
.
例子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(['-s', 'test_fixture10.py'])
例子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)
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture12.py'])
例子13
import time
import random
def test_rerun():
time.sleep(1)
a = random.randint(1, 3)
print(a)
assert 3 == a
最后我也整理了一些软件测试学习资料,对于学软件测试的小伙伴来说应该会很有帮助,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这份资料也已经帮助了很多的软件测试的学习者,希望也能帮助到你。需要的进群 644956177 自取喔。软件测试,与你同行!陪你成为优秀的测试工程师!
既然都看到这里啦,请你帮个忙:
1、点赞,让更多小伙伴看到;
2、关注我,持续更新测试干货。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
干货分享
从一个萌新小白到一次拿下5个测试offer,我的测试成长之路···