pytest

Pytest‌是一个功能强大且易于使用的Python测试框架,主要用于编写单元测试、集成测试和功能测试。它具有以下主要特点和功能:

  1. 简洁易用‌:Pytest的语法非常简洁清晰,几乎可以在几分钟内上手,适合快速编写和运行测试用例‌。
  2. 自动发现测试‌:Pytest能够自动发现项目中的测试文件和测试函数,无需手动编写繁琐的配置‌。
  3. 丰富的断言库‌:内置了丰富的断言库,可以轻松地进行测试结果的判断‌。
  4. 参数化测试‌:支持参数化测试,能够快速地对多组输入进行测试‌。
  5. 插件丰富‌:拥有丰富的插件生态系统,可以通过插件扩展各种功能,如覆盖率测试、测试报告生成等‌。
  6. 持续集成‌:支持与Jenkins等持续集成工具集成,方便自动化测试‌。

基本用法:

        测试框架做什么

                1.测试发现

                2.环境管理

                3.执行用例(手机信息,失败原因)

                4.输出报告

一、测试发现

        1.创建 test_开头的文件

        2. 创建Test开头的类

        3. 创建 test_开头函数或方法(真正的用例)

# 类的外面叫函数,类的里面叫方法
def test_a():#函数
    return 0

class Test:
    def test_b(self):  # 方法
        return 0

1.pytest以一个函数/方法来作为用例,但不是所有函数/方法都是用例

2.pytest主要以名字区分普通函数(方法),用例

3.pytest的启动方式‘pytest’

pytest_第1张图片

4.pytest输出用例的收集、执行、汇总信息

 二、断言

        内容判断机制,如果判断失败,就会抛出异常

name='q'
# if name == 'qqq':
#     print('qqq')
# else:
#     print('不是qqq')
assert name == 'qqq','不是qqq'

         对于框架来说:

                1.没有异常,判定通过

                2.存在异常,判定失败

三、读懂结果 

 test_01.py .F                                                                                                        [100%]

在test_01文件中执行两个用例,直至全部用例执行完成

pytest_第2张图片

第一个通过,第二个用例失败

pytest_第3张图片

高级用法 :

一、mark 标记

        标记是为了用例之间,彼此不同,进行精确使用,实现用例筛选。

        标记的使用步骤:

                1.注册标记:

[pytest]

markers =
 api
 ui
 ut
 e2e

                2.使用标记:

                        1)贴上标记

# 类的外面叫函数,类的里面叫方法
import pytest

@pytest.mark.api
def test_a():#函数
    assert 11 == 11 # 测试通过

class Test:
    @pytest.mark.e2e
    def test_b(self):  # 方法
        assert 11 == 22 # 测试失败

                        2)筛选标记

pytest -m api#只执行api标记
pytest -m "api or e2e"#筛选多个标记

pytest_第4张图片

除了自己注册的标记之外,pytest还内置了一些标记:跳过、预期失败、参数化、调用fixture、第三方插件,也会内置一些标记:执行顺序、执行依赖、失败重试

二、fixture

自动的:在用例之前、之后完成,用于测试环境的构建和销毁

使用生成器实现前置、后置的分离

# 类的外面叫函数,类的里面叫方法
import pytest

@pytest.fixture()
def test1():
    print('test1') # 前置代码,用例执行之前自动运行
    yield
    print('test2') # 后置代码,在用例执行之后自动运行

@pytest.mark.api
@pytest.mark.ui
def test_a(test1):#函数
    assert 11 == 11 # 测试通过

class Test:
    @pytest.mark.e2e
    def test_b(test1):  # 方法
        assert 11 == 22 # 测试失败

pytest_第5张图片

1.fixture的作用范围:支持5级范围

2.同一范围内的用例,  共享fixtrue

3.conftest.py 创建全局范围fixture(作用小的可以调用作用大的,作用大的不能调用作用小的,)

三、hook

钩子:当pytest和合适的时机,运行我们进入、退出pytest核心内部

目的:改变pytest原有的处理方式、运行模式

test_name:abc #测试用例名称
steps:#测试用例步骤
    -a:6
    b:2
    c:8 #a+b==c

你可能感兴趣的:(pytest,测试,pytest)