Skip to main content

Fedora QA wiki 测试管理库

项目描述

python-wikitcms

python-wikitcms 是一个 Python 库,用于与 Fedora 的Wikitcms 的“测试(案例)管理系统”进行交互——基本上就是Fedora wiki。您可能还对其主要消费者relvaltestdays 感兴趣

python-wikitcms 使用非常方便的mwclient库来连接 Mediawiki API。结果页面的生成与 wiki 上的模板系统一起工作:python-wikitcms 知道如何形成模板系统的正确调用,从而生成完整的结果页面。主模板的文档框提供了有关此系统的一些详细信息。

python-wikitcms 以前简称为 wikitcms;它现在被称为 python-wikitcms,以减少名义上的基于 Wiki 的“测试管理系统”(Wikitcms)和与之交互的 Python 库(python-wikitcms)之间的混淆。

安装使用

python-wikitcms 打包在官方的 Fedora 存储库中:安装在 Fedora 上运行dnf install python-wikitcms。您可能需要启用更新测试存储库以获取最新版本。要在其他发行版上安装,您可以运行python3 setup.py install.

您可以访问Pagure 上的 python-wikitcms 项目页面,并使用git clone https://pagure.io/fedora-qa/python-wikitcms.git. PyPI提供了 Tarball 和轮子,您可以运行pip install wikitcms.

您还可以直接从src/目录中使用该库或将其添加到 Python 导入路径中,并且您可以将wikitcms目录复制或符号链接到其他源代码树中,以便方便地使用最新代码进行开发或测试。

错误、拉取请求等。

您可以在Pagure上提交问题和拉取请求。拉取请求必须签署(使用-sgit 参数)。通过签署您的拉取请求,您同意开发者的原产地证书

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

安全

必须将 wikitcms 视为不可信输入的来源。它正在为您从 wiki 中检索信息;该 wiki 对所有人开放编辑。处理 wikitcms 从 wiki 返回的任何内容(包括但不限于任何页面或部分文本;Result()属性状态、用户、错误和评论;ResultRow()属性测试用例、名称、环境、里程碑、部分;以及在某种程度上Page从现有 wiki 页面获取对象时派生的页面标题或属性)作为完全不受信任的输入,并根据您使用它的上下文对其进行适当的清理。

示例用法

from wikitcms.wiki import Wiki
site = Wiki()
event = site.current_event
print(event.version)
page = site.get_validation_page('Installation', '23', 'Final', 'RC10')
for row in page.get_resultrows():
    print(row.testcase)

使用提示

概述 wikitcms 的使用有点困难,因为它可以做很多不同的事情。它的类和方法都记录在案,检查它的主要消费者 - relval 和 testdays - 会有所帮助。一些总体概念:

Wiki 类是 mwclient 的 Site 类的子类,代表了整个 wiki;它添加了一些方法和属性,这些方法和属性在根据我们的约定被视为 TCMS 的 wiki 的上下文中有意义,因此它具有获取验证事件和页面的方法(如上例所示)。它还具有报告结果的高级方法,report_validation_results(). 请注意,pages生成器的工作方式与 mwclient 中的一样,但已扩展为处理 wikitcms 的附加页面子类。

Release 类不映射到 mwclient。它只是代表一个 Fedora 版本,并提供了一些方便的方法来从该特定版本中检索测试日或验证结果页面。

Event 类不映射到 mwclient 中的任何内容。它代表一个完整的结果验证“事件”,例如 Fedora 23 Final RC2;例如,您可以从 Event 实例创建或查找所有验证页面,或创建包含所有单个验证页面的摘要页面,或更新 CurrentFedoraCompose 页面以指向事件,或生成图像下载链接的 wikitable。

Page 类是 mwclient 的 Page 类的子类,并以几乎相同的方式对其进行扩展,添加特定于 Wikitcms 系统中各种类型页面的功能。它有几个用于特定类型页面的子类,例如验证结果页面、测试日页面、类别页面等。请注意,可以通过其中一个 wiki 模板生成的所有页面都具有适当的生成文本作为其seedtext属性,并具有write()使用该种子文本创建它们的方法。

Result 和 ResultRow 类表示结果验证页面中的单个结果和行。ValidationPages 包含 ResultRows 包含 Results,并且要报告结果,您实际上将 Result 添加到 ResultRow。

请注意,事件版本控制的工作方式与fedfind的 pre-Pungi 4(发布、里程碑、撰写)版本控制方案完全相同,但有一个值得注意的例外。Fedfind 中的 Rawhide nightly 'releases' 有发布 'Rawhide' 并且没有里程碑;python-wikitcms 中的 Rawhide 夜间验证事件有一个版本号和里程碑“生皮”。这是因为,从概念上讲,不应该说 Rawhide nightly compose 有一个特定的版本号,但验证事件. 当我们为特定的 Rawhide 每晚声明发布验证测试事件时,我们作为该声明的一部分采取的一项行动是声明我们正在测试每晚组合作为特定 Fedora 发布准备的一部分,因此我们基本上'将版本号应用于验证事件。因此,我们可能会在夜间编写“Rawhide (blank) 20151201”,并决定我们希望将其作为 Fedora 24 发布准备的一部分进行测试;因此我们创建了发布验证事件“24 Rawhide 20151201”。

fedfind 和 python-wikitcms 中的高级函数 -get_release()在 fedfindget_validation_page()get_validation_event()python-wikitcms 中 - 将尝试处理版本控制中的这种差异,因此在使用这些高级函数时,您通常可以在 fedfind 和 python- 之间传递版本- wikitcms 不用担心。

为了方便与 Pungi 4 compose 兼容,get_validation_event()并且get_validation_page()(因此也report_validation_results())接受cid作为release/ milestone/的替代方案compose,并将尽最大努力为指定的 compose 实例化适当的验证事件。

值得注意的是,您可以通过几种完全不同的方式使用 python-wikitcms:

  • 基于“发布、里程碑、撰写”版本控制概念(或从 Pungi 4 撰写 ID)实例化尚不存在的页面,并创建它们
  • 基于“发布、里程碑、撰写”概念(或从撰写 ID)实例化现有页面并读取或添加结果
  • 从其名称或类别成员中实例化现有页面并读取或添加结果

python-wikitcms 的大多数使用归结为获取一些 Page 实例并对它们做一些事情,但是你到达那里的方式会根据你所遵循的上述路径而有所不同。对于前两个,您可能会使用 的get_validation_foo()方法Wiki或 中的方法Release,对于最后一个,您可以遵循与使用相同的过程mwclient并相信您将获得适当类的实例。按照上面的例子,你可以做page = site.pages["Test Results:Fedora_23_Final_RC10_Desktop"]并且page将成为一个ValidationPage实例。

验证

您应该在编辑之前登录到 wiki,使用Wiki.login().

从 2018 年初开始,Fedora wiki 使用统一的基于 Fedora OpenID Connect 的身份验证服务,python-wikitcms 支持这一点。当与 Fedora wiki 交互时login(),第一次调用时,python-wikitcms 将尝试打开浏览器并通过身份验证服务请求凭据。一旦用户尝试登录,调用将完成。在这种情况下,传递给的任何用户名或密码都将login()忽略。对于新身份验证系统的无人值守操作,有效令牌必须以~/.openidc/oidc_wikitcms.json. 一次成功的交互式登录后,无人值守操作将工作一段时间(直到令牌过期);对于长期无人值守的操作,您必须向 wiki 维护者索取特殊的永久会话令牌。

当与任何其他 wiki 交互时(尽管在大多数情况下这是不寻常的事情),python-wikitcms 的行为将与 mwclient 完全相同。

学分

  • Mike Ruckman (roshi) 在 python-wikitcms 的早期开发过程中提供了审查和建议。
  • Patrick Uiterwijk提供了支持 OpenID Connect 身份验证的代码。

执照

python-wikitcms 在GPL下发布,版本 3 或更高版本。

项目详情