测试pyglet

测试套件

对pyglet的测试分为3个套间。

单元测试

单元测试仅涵盖代码的单个单元或有限数量的单元的组合。不应包括资源密集型计算。这些测试应该在没有任何用户交互的情况下在有限的时间内运行。

集成测试

集成测试包括将小程序的组件集成到整个小程序中以及集成到支持的系统中。与单元测试一样,这些测试不需要用户交互,但由于对系统资源的访问,它们可能需要更长的时间才能运行。

互动式测试

交互式测试要求用户验证测试是否成功,在某些情况下还需要用户执行操作才能继续测试。这些测试可能需要很长时间才能运行。

目前有3种类型的交互测试用例:

  • 只能在完全交互模式下运行的测试,因为它们需要用户执行操作才能继续测试。这些测试都是用 requires_user_action()

  • 测试可以在没有用户交互的情况下运行,但不能验证它们应该通过还是失败。这些测试都是用 requires_user_validation()

  • 测试可以在没有用户交互的情况下运行,并且可以将结果与上一次运行的屏幕截图进行比较,以确定它们是通过还是失败。这是默认类型。

运行测试

pyglet测试套件基于 pytest framework

强烈建议使用虚拟环境来运行测试。有关设置虚拟环境的说明,请参阅 开发环境

运行测试时,请确保以下事项:

1.您要测试的Python版本的虚拟环境处于活动状态。2.您正在针对当前支持的Python版本运行测试。

理想情况下,还应针对受支持的最低版本(当前)进行测试 3.8 )以确保您的更改与所有受支持的Python版本兼容。

要运行所有测试,请在pyglet存储库的根目录中执行pytest::

pytest

您也可以只运行单个套件::

pytest tests/unit
pytest tests/integration
pytest tests/interactive

对于交互式测试套件,还有一些额外的命令行开关用于pytest:

  • --non-interactive :仅运行只能使用截图进行自我验证的交互测试。屏幕截图是在交互模式下运行测试时创建的,因此您需要交互运行测试一次,然后才能使用此选项;

  • --sanity :在没有用户干预的情况下,通过运行尽可能多的交互式测试来执行健全性检查。并非所有测试都可以在没有干预的情况下运行,因此仍将跳过这些测试。主要用于快速检查代码中的更改。并不是所有的测试都执行完整的验证。

写试卷

注解

通过使用装饰符形式的注释,可以对测试执行进行一些控制。注释的一个功能是在某些条件下跳过测试。

一般注解

模块中提供了常规测试注释 tests.annotations

@require_platform(platform)

只在指定平台(S)上运行测试,在其他平台上跳过。

参数:

platform (list(str)) -- 返回的平台标识符列表 pyglet.options 。另请参阅 Platform

@skip_platform(platform)

跳过给定平台上的测试(S)。

参数:

platform (list(str)) -- 返回的平台标识符列表 pyglet.options 。另请参阅 Platform

class Platform

平台的预定义标识符列表。与配合使用 require_platform()skip_platform() 。使用+组合平台。

LINUX = ('linux-compat', 'linux2', 'linux')

Linux平台

OSX = ('darwin',)

Mac OS X平台

WINDOWS = ('win32', 'cygwin')

MS Windows平台

@require_gl_extension(extension)

如果给定的总账扩展不可用,则跳过测试。

参数:

extension (str) -- 所需扩展的名称。

套件注释

这是当前未使用的。

@pytest.mark.unit

测试属于单元测试套件。

@pytest.mark.integration

测试属于集成测试套件。

@pytest.mark.interactive

测试属于交互式测试套件。

交互式测试注释

可以使用特定的最热标记来标记交互式测试用例。目前使用的标志如下:

@pytest.mark.requires_user_action

测试需要用户交互才能运行。在非交互或正常模式下运行时,需要跳过它。

@pytest.mark.requires_user_validation

需要用户验证才能将测试标记为通过或失败。但是,测试可以在正常模式下运行。

@pytest.mark.only_interactive

另一个原因是测试只能在交互模式下运行。