Python pytest模块学习笔记之中级篇

一、退出码

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")
image.png

(二)共享fixture函数

fixture函数的检索顺序是从测试类开始,然后测试的模块,然后就是conftest.py文件,最后是内置的插件和第三方插件。
共用的fixture方法放入conftest.py文件中,注意名称不要错了,必须是这个名。

三、跳过测试

(一)单个用例(与单个类)直接跳过

直接跳过了用例,并没有被执行

import pytest
@pytest.mark.skip("测试skip结果")
def test_fail():
    assert 1>2
image.png

(二)跳过整个模块

pytest.skip("skipping windows‐only tests", allow_module_level=True)
在运行整个文件夹下的项目时,可以直接跳过整个py文件

项目内容

结果

(三)条件跳过

@pytest.mark.skipif(条件,跳过理由)
没用过,给个官方的案例

image.png

(四)跳过文件

pytest.importorskip("文件")
注意:由于pytest的特性,每次都会先检查装饰器,所以可以写一个test开头的文件专门用于跳过某些用例。

image.png

(四)标记失败

import pytest
@pytest.mark.xfail
def test_fail():
    assert 1>2

@pytest.mark.xfail对用例进行标记,执行失败时不会直接报错误,影响后续的用例,并且会显示一个XFAIL结果集


失败结果

如果正确,会显示通过

正确结果

image.png

你可能感兴趣的:(Python pytest模块学习笔记之中级篇)