Time will tell.
fixture 是 pytest 的核心功能,也是亮点功能。
fixture 的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture 提供了区别于传统单元测试有显著改进:
-
有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
-
按模块化的方式实现,每个
fixture
都可以互相调用。 -
fixture
的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture
和测试用例进行参数化,或者跨函数 function 、类 class 、模块 module 或整个测试会话 sessio范围。
1、fixture作为参数传入
定义 fixture 跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture()
, fixture 命名不要用test
开头,跟用例区分开。用例才是test
开头的命名。
fixture 是可以有返回值的,如果没return
默认返回None
。用例调用fixture
的返回值,直接就是把fixture
的函数名称当成变量名称,如下:
# test_fixture1.py
import pytest
@pytest.fixture()
def user():
print("获取用户名")
a = "yoyo"
return a
def test_1(user):
assert user == "yoyo"
if __name__ == "__main__":
pytest.main(["-s", "test_fixture1.py"])
结果:
============================= test session starts =============================
platform win32 -- Python 3.6.0, pytest-3.6.3, py-1.5.4, pluggy-0.6.0
rootdir: D:\YOYO\fixt, inifile:
plugins: rerunfailures-4.1, metadata-1.7.0, html-1.19.0, allure-adaptor-1.7.10
collected 1 item
test_fixture1.py 获取用户名
.
========================== 1 passed in 0.20 seconds ===========================
2、error和failed区别
测试结果一般有三种:passed
、failed
、error
。(skip
的用例除外)
如果在test_
用例里面断言失败,那就是failed
。
# test_fixture2.py
import pytest
@pytest.fixture()
def user():
print("获取用户名")
a = "yoyo"
return a
def test_1(user):
assert user == "yoyo111" # 用例失败就是failed
if __name__ == "__main__":
pytest.main(["-s", "test_fixture2.py"])
如果在 fixture 里面断言失败了,那就是error
。
test_fixture3.py
import pytest
@pytest.fixture()
def user():
print("获取用户名")
a = "yoyo"
assert a == "yoyo123" # fixture失败就是error
return a
def test_1(user):
assert user == "yoyo"
if __name__ == "__main__":
pytest.main(["-s", "test_fixture3.py"])
还有一种情况也会出现error
,那就是自己写的代码有问题,代码本身报错。
好啦,以上本章节的内容就分享到这里,如果你对更多内容、及Python实例练习题、面试题、自动化软件测试感兴趣的话可以加入我们扣裙一起学习175317069。会有各项学习资源发放,更有行业深潜多年的技术人分析讲解。
最后祝愿你能成为一名优秀的测试工程师!
觉得还不错就【点赞】、【评论】、【关注】吧~
Time will tell.(时间会证明一切)
网友评论