跳转到主要内容

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。您可能需要启用updates-testing仓库以获取最新版本。在其他发行版上安装,您可以运行python3 setup.py install

您可以访问 Pagure 上的 python-wikitcms 项目页面,并使用 git clone https://pagure.io/fedora-qa/python-wikitcms.git 进行克隆。可以从 PyPI 获取 Tarballs 和 wheels,并运行 pip install wikitcms

您也可以直接从 src/ 目录使用库,或将它添加到 Python 的导入路径。您可以将 wikitcms 目录复制或创建符号链接到其他源代码树中,以便方便地在开发或测试中使用最新代码。

错误、pull requests 等。

您可以在 Pagure 上提交问题和 pull requests。pull requests 必须经过签发(使用 git 的 -s 参数)。通过签发您的 pull request,您同意 开发者来源证书

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 视为不受信任输入的来源。它为您从维基获取信息;该维基对所有编辑者开放。将 wikitcms 从维基返回的任何内容(包括但不限于任何页面或部分文本;Result() 属性包含状态、用户、错误和评论;ResultRow() 属性包含测试用例、名称、环境、里程碑、部分;以及从现有维基页面获取 Page 对象时,某些程度上页面标题或属性的元素)视为完全不受信任的输入,并适当地对其进行清理。

示例用法

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 类的子类,代表整个维基;它添加了一些在将维基视为 TCMS 的上下文中有意义的方法和属性,因此它有获取验证事件和页面的方法(如上述示例所示)。它还有一个报告结果的高级方法 report_validation_results()。请注意,pages 生成器在 mwclient 中工作方式相同,但已扩展以处理 wikitcms 的附加 Page 子类。

Release 类不对应于 mwclient 中的任何内容。它仅代表一个 Fedora 发布版本,并提供了从该特定版本检索测试日或验证结果页面的便捷方法。

Event 类在 mwclient 中没有对应项。它代表一个完整的“事件”验证,例如 Fedora 23 Final RC2;从 Event 实例中,您可以创建或查找所有验证页面,例如创建包含所有单独验证页面的摘要页面,或更新 CurrentFedoraCompose 页面以指向事件,或生成包含图像下载链接的 wikitable。

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

Result 和 ResultRow 类代表结果验证页面中的单个结果和行。ValidationPages 包含 ResultRows,ResultRows 包含 Results,要报告结果,您本质上是将一个 Result 添加到 ResultRow。

请注意,事件版本化在 fedfind 中与 Pungi 4(发布、里程碑、组合)版本化方案完全相同,只有一个例外。在 fedfind 中,Rawhide 夜间“发布”具有“Rawhide”发布和没有里程碑;在 python-wikitcms 中的 Rawhide 夜间验证事件具有发布编号和里程碑“Rawhide”。这是因为,从概念上讲,Rawhide 夜间组合实际上不应该有特定的发布编号,但验证事件确实有。当我们为特定的 Rawhide 夜间声明发布验证测试事件时,我们采取的一个行动是声明我们正在将该夜间组合作为特定 Fedora 发布的准备工作的一部分进行测试,因此我们本质上“应用”了发布编号到验证事件。因此,我们可能有一个夜间组合“Rawhide (空白) 20151201”,并决定我们希望将其作为 Fedora 24 发布的准备工作的一部分进行测试;因此,我们创建发布验证事件“24 Rawhide 20151201”。

fedfind 和 python-wikitcms 中的高级功能 - fedfind 中的 get_release(),python-wikitcms 中的 get_validation_page()get_validation_event() - 将尝试处理这种版本化差异,因此在使用这些高级功能时,您通常可以在 fedfind 和 python-wikitcms 之间传递版本而无需担心。

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

值得注意的是,您可以使用 python-wikitcms 的几种相当不同的方式

  • 根据“发布、里程碑、组合”版本化概念(或来自 Pungi 4 组合 ID)实例化尚不存在的页面,并创建它们
  • 根据“发布、里程碑、组合”概念(或来自组合 ID)实例化现有页面,并读取或添加结果
  • 根据其名称或类别成员资格实例化现有页面,并读取或添加结果

python-wikitcms 的大多数使用将归结为获取一些页面实例并对它们进行操作,但您如何到达那里将根据您遵循的上述路径而有所不同。对于前两个,您可能会使用 Wikiget_validation_foo() 方法或 Release 中的方法,对于最后一个,您可以遵循与 mwclient 使用的相同程序,并相信您将获得适当类的实例。按照上面的例子,您可以这样做 page = site.pages["Test Results:Fedora_23_Final_RC10_Desktop"],此时 page 将是一个 ValidationPage 实例。

身份验证

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

从 2018 年初开始,Fedora wikis 使用基于统一的 Fedora OpenID Connect 身份验证服务,python-wikitcms 支持。当与 Fedora wikis 交互时,当第一次调用 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或更高。

支持者