桌面QE工具,用于统一测试执行
项目描述
qecore - 工具库
Qecore是一个工具库,旨在通过所有必需的组件来补充我们的自动化堆栈。
用法
qecore-headless
脚本。
- 名称中的
headless
是历史遗留问题,它是一个会话配置脚本,用于运行我们的自动化堆栈。 - 此脚本提供了一种在SSH连接的机器上启动新会话的方法。
- 它仅适用于远程使用,本地使用它不会得到好结果。它旨在快速启动和停止GDM,并实现用户自动登录。
- 此脚本将启动GDM并对系统进行一些更改,以启用在所需配置中启动自动化套件,例如
qecore-headless "behave -kt automated_test"
- 此脚本接受要运行的脚本的参数。- 在这种情况下,我们通过behave运行
automated_test
。Bash是默认值 - 在bash中我们可以自行启动behave。
- 在这种情况下,我们通过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
的可访问性树根,因此任何针对Atspi
的dogtail
查询都将正常工作,自动化测试可以开始了。
- 在
环境变量。
我们有大量选项可以修改我们的运行,而无需更改 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
轻松更改它们的操作方式。
如果您需要进行某些特定的更改,请查看代码,您应该能够确定需要做什么(实际上一切都在一个地方,sandbox
、before_scenario
、after_scenario
,这就是全部,其他一切都是从那里调用的)
该项目在 Fedora 杂志中进行了介绍
- https://fedoramagazine.org/automation-through-accessibility/
- 我们团队(Red Hat DesktopQE)自动化堆栈的完整技术解决方案 https://modehnal.github.io/
执行单元测试
注意:这需要更新为 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 应该完整(在第一个场景之后有 状态
)。
项目详细信息
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
qecore-3.27.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d8dbe6a3c8a66b0f40bd3769ab8a85d68a1ad260b0762c9dc3379d7029ec76b |
|
MD5 | 8951398bed7358f4a3967165bb2b6a50 |
|
BLAKE2b-256 | 471af3058d07ca1aa382cc9f14bcf088c4f3da27819fe987a259500c224522c3 |
qecore-3.27.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f35494e4031fc8c731b4d87b74395d096529682ab2dff7a403a571bf50fad3e0 |
|
MD5 | 4d219bf66b97d1a6bf06b8bb01973986 |
|
BLAKE2b-256 | 3cee35a305c5623fe7934aa0f287843007cd04b5eb5eec2de0bdf899b4814b81 |