跳转到主要内容

桌面QE工具,用于统一测试执行

项目描述

qecore - 工具库

Build Status PyPI Version

Qecore是一个工具库,旨在通过所有必需的组件来补充我们的自动化堆栈。

用法

qecore-headless 脚本。

  • 名称中的 headless 是历史遗留问题,它是一个会话配置脚本,用于运行我们的自动化堆栈。
  • 此脚本提供了一种在SSH连接的机器上启动新会话的方法。
  • 它仅适用于远程使用,本地使用它不会得到好结果。它旨在快速启动和停止GDM,并实现用户自动登录。
  • 此脚本将启动GDM并对系统进行一些更改,以启用在所需配置中启动自动化套件,例如
    • qecore-headless "behave -kt automated_test" - 此脚本接受要运行的脚本的参数。
      • 在这种情况下,我们通过behave运行automated_test。Bash是默认值 - 在bash中我们可以自行启动behave。
    • qecore-headless --session-type xorg - 启动 X11 会话。
    • qecore-headless --session-type wayland - 启动 Wayland 会话。
    • qecore-headless --session-desktop gnome - 将桌面改为 GNOME。
    • qecore-headless --session-desktop gnome-classic - 将桌面改为 GNOME Classic。
    • qecore-headless --display - 为会话设置一个 DISPLAY 数字,默认是 :0
    • qecore-headless --dont-start - 不启动 GDM。
    • qecore-headless --dont-kill - 不终止 GDM。
    • qecore-headless --restart - 重新启动正在运行的 GDM。
    • qecore-headless --keep X - 在 X 测试期间保持 GDM 运行,之后重新启动。
    • qecore-headless --keep-max - 在测试期间尽可能长时间地保持 GDM 运行 - 测试失败时重新启动。
    • qecore-headless --force - 强制检查配置是否匹配,如果例如启动了 X11 而不是 Wayland,则失败。
    • qecore-headless --debug - 为 dogtail 设置环境变量,dogtail 将会记录日志。
    • qecore-headless --no-color - 无颜色输出。
    • qecore-headless --virtual-monitors X - 用于多显示器设置测试的实验选项,启用虚拟显示器。
    • qecore-headless --help - 获取更多信息。

当然,如果合理的话,您可以组合其中任何一项。

behave 一起使用。

behave 预期的结构非常简单,我们稍作调整以提高可读性。

features
├── environment.py
├── scenarios
|   └── main.feature
└── steps
    └── steps.py

qecore 交互的主要文件是 environment.py

behave 有一些钩子我们可以使用来启动我们的自动化堆栈 - 让我们看看 before_all

from qecore.sandbox import TestSandbox

def before_all(context) -> None:
    """
    This function will be run once in every 'behave' command called.
    """

    # This is the most important part, initiation of TestSandbox.
    # Most of the setup happens in this class.
    context.sandbox = TestSandbox("gnome-terminal", context=context)

    # To define an application for testing, use `get_application` from sandbox.
    # If application is not installed as rpm but as a flatpak user can use `get_flatpak`
    # Attention: Do not define gnome-shell as an application.
    # The gnome-shell accessibility tree is available for you in `context.sandbox.shell`
    context.terminal = context.sandbox.get_application(
        name="gnome-terminal",
        a11y_app_name="gnome-terminal-server",
        desktop_file_name="org.gnome.Terminal.desktop",
    )
    # To modify the application with some functionality or work around some issues.
    # Most of the time no changes should be needed.
    context.terminal.exit_shortcut = "<Ctrl><Shift><Q>"

接下来,让我们看看 before_scenario

before_scenario 将处理我们需要的所有设置,在初始化类后修改执行,并更改 TestSandbox 属性

所有属性都设置为多年来开发中证明过的值。尽管如此,尽管存在一些边缘情况,但一切都可以自定义/可破解,以启用大量选项。

def before_scenario(context, scenario) -> None:
    """
    This function will be run before every scenario in 'behave' command called.
    """
    context.sandbox.before_scenario(context, scenario)

要查看它执行的所有操作,您可以在文档页面上查看 before_scenario 的实现。

最后一部分是 after_scenario

after_scenario 将处理拆卸。它会处理在 before_scenario 中设置的任何内容,例如停止视频、获取用于报告的日志、上传数据到我们的 HTML 日志以及关闭任何启动的应用程序,以便为下一个测试清理会话。

def after_scenario(context, scenario) -> None:
    """
    This function will be run after every scenario in 'behave' command called.
    """
    context.sandbox.after_scenario(context, scenario)

要查看它执行的所有操作,您可以在文档页面上查看 after_scenario 的实现。

完整示例 中,您还可以看到 try/except 的用法。这是用于恢复的。一些问题可以在运行时修复。我们还需要一种优雅地结束的方式,以便我们的数据被加载到 HTML 页面上,而不是在出现问题时被丢弃。

steps.py 中工作。

environment.py 中的设置之后,我们现在可以开始在 steps.py 中工作我们的自动化。

设置很重要有两个原因。

  • 现在测试通过沙箱拥有了所有机器设置,因此它们可以查询属性或使用对测试非常有用的沙箱方法。
    • context.sandbox.<attribute>
    • context.sandbox.<method>
  • 现在用户不需要启动应用程序和加载无障碍树来使用,因为它们已在 environment.py 中定义。
    • main.feature 中,用户现在可以使用例如 * 通过 "command" 启动应用程序 "terminal"
      • 应用程序将启动。
      • 加载其无障碍树。
      • 将应用程序标记为测试后清理。
      • steps.py 中,用户现在有了 context.terminal.instance,它是 gnome-terminal-server 的可访问性树根,因此任何针对 Atspidogtail 查询都将正常工作,自动化测试可以开始了。

环境变量。

我们有大量选项可以修改我们的运行,而无需更改 Python 代码。

  • RICH_TRACEBACK=true behave... - 启用丰富的 Traceback 以进行问题调试。
  • AUTORETRY=X behave... - 自动化测试在标记为失败之前有 X 次尝试通过。
    • 此选项作为功能文件中的 tag 也可用 @autoretry=X
  • STABILITY=X behave... - 运行自动化测试 X 次,每次尝试都必须通过才能标记为通过。
    • 此选项作为功能文件中的 tag 也可用 @stability=X
  • QECORE_EMBED_ALL=true behave... - 即使套件通过(默认情况下我们不嵌入 PASS),也会嵌入所有可用数据。
  • QECORE_NO_CACHE=true behave... - 不保留缓存并重新生成文件。
  • LOGGING=true behave... - 启用日志记录,这是一个关于 qecore 执行的非常详细的日志。
  • PRODUCTION=false behave... - 禁用所有嵌入、视频录制和屏幕截图捕获。
  • BACKTRACE=true behave... - 启用从 coredumpctl 列表中获取回溯。

您可以使用多个变量,如果组合有意义,可以一起使用。

黑客技术。

在这里展示的每一项,都可以在一定程度上进行自定义。

我以这种方式实现了大多数方法,以便通过 environment.py 轻松更改它们的操作方式。

如果您需要进行某些特定的更改,请查看代码,您应该能够确定需要做什么(实际上一切都在一个地方,sandboxbefore_scenarioafter_scenario,这就是全部,其他一切都是从那里调用的)

该项目在 Fedora 杂志中进行了介绍

执行单元测试

注意:这需要更新为 Fedora 40 及更高版本和 RHEL-10 及更高版本。

在具有 dogtail 的机器上从项目根目录执行测试

rm -f /tmp/qecore_version_status.txt
rm -f dist/*.whl
python3 -m build
python3 -m pip install --force-reinstall --upgrade dist/qecore*.whl
sudo -u test scripts/qecore-headless "behave -f html-pretty -o /tmp/report_qecore.html -f plain tests/features"

您可以使用 -f pretty 而不是 -f plain 以获取彩色输出。

标准输出不应包含任何 Python 回溯,生成的 HTML 应该完整(在第一个场景之后有 状态)。

项目详细信息


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

qecore-3.27.1.tar.gz (107.6 kB 查看哈希值)

上传时间

构建分布

qecore-3.27.1-py3-none-any.whl (113.2 kB 查看哈希值)

上传时间 Python 3

由以下组织支持