一、退出码
pytest有以下6种退出码:
- Exit code 0: 找到所有测试用例并测试通过
- Exit code 1: 找到测试用例并运行但是部分测试用例运行失败
- Exit code 2: 用户中断了测试
- Exit code 3: 执行过程中发生了内部错误
- Exit code 4: pytest命令行使用错误
- Exit code 5: 没有找到任何测试用例
二、pytest装饰器fixture
使用装饰器fixture的优势
pytest的fixture允许测试函数轻松的接收和处理应用层对象的预处理,而不必关心import/setup/cleanup这些细节。 这是依赖注入的的一个极佳的示范,fixture函数是注入器,而测试函数是fixture的使用者
实现测试用例的过程中,当你发现需要使用来自多个文件的fixture函数的时候,可以将这些fixture函数放到conftest.py中。你不需要导入这些fixture函数,它会由pytest自动检索。fixture函数的检索顺序是从测试类开始,然后测试的模块,然后就是conftest.py文件,最后是内置的插件和第三方插件。你还可以使用conftest.py(共享fixture函数)来为本地每个目录实现插件
(一)fixture函数的使用
@pytest.fixture( scope, params, autouse, ids, name)
1. scope作用范围
标记fixture的作用范围,以下是作用范围集:
- function:只能在函数或者方法中调用
- class:只能在类中调用
- module:只能在py文件内调用
- session:可以多个文件调用
2.标记函数或类为fixture
使用注意:如果只是标记,代表这个类或者方法不会运行,需要使用它才会运行
import pytest
@pytest.fixture()
def test_fail_2():
assert 1<2
运行结果为空suit
3.使用fixture
每次使用fixture,都是先执行一次使用fixture装饰的函数或者类,在执行
3.1直接传入类或函数中
import pytest
@pytest.fixture()
def test_fail():
print("这是Test1的用例")
#函数中传入
def test_1(test_fail):
pass
#类中传入
class Test_case():
def test_fail_2(self,test_fail):
print("这是Test2的方法")
3.2装饰器使用fixture
import pytest
@pytest.fixture()
def test_fail():
print("这是Test1的用例")
#函数中传入
@pytest.mark.usefixtures('test_fail')
def test_1():
pass
#类中传入
@pytest.mark.usefixtures('test_fail')
class Test_case():
def test_fail_2(self):
print("这是Test2的方法1")
def test_fail_3(self):
print("这是Test2的方法2")
(二)共享fixture函数
fixture函数的检索顺序是从测试类开始,然后测试的模块,然后就是conftest.py文件,最后是内置的插件和第三方插件。
共用的fixture方法放入conftest.py文件中,注意名称不要错了,必须是这个名。
三、跳过测试
(一)单个用例(与单个类)直接跳过
直接跳过了用例,并没有被执行
import pytest
@pytest.mark.skip("测试skip结果")
def test_fail():
assert 1>2
(二)跳过整个模块
pytest.skip("skipping windows‐only tests", allow_module_level=True)
在运行整个文件夹下的项目时,可以直接跳过整个py文件
(三)条件跳过
@pytest.mark.skipif(条件,跳过理由)
没用过,给个官方的案例
(四)跳过文件
pytest.importorskip("文件")
注意:由于pytest的特性,每次都会先检查装饰器,所以可以写一个test开头的文件专门用于跳过某些用例。
(四)标记失败
import pytest
@pytest.mark.xfail
def test_fail():
assert 1>2
@pytest.mark.xfail对用例进行标记,执行失败时不会直接报错误,影响后续的用例,并且会显示一个XFAIL结果集
如果正确,会显示通过