跳至内容

规范文档测试三合一

三合一是 hitchstory 支持的开发和自动化过程,其中单一事实来源用于维护规范、测试和文档。示例文档及其生成的文档规范通过故事引擎执行,文档(例如 markdown、HTML 等)通过模板自动生成。

这种自动化形式有助于解决三个常见问题

  • 防止文档或规范过时。如果行为发生变化但规范没有更新,则测试将失败。

  • 文档没有被编写。如果你有规范,你就有文档。

  • 减少无聊。借助三合一,文档和测试中最乏味的部分是自动化的。## 简单现实生活示例

我创建了这个简单的命令行应用程序来解决一个问题 - 我想从我喜欢的移动笔记应用程序org 模式输出生成一个漂亮的 LaTeX 字母,而不用使用 Emacs。

我向这个应用程序添加的一项功能是将 org 模式标记 - 链接、粗体、斜体等 - 转换为 markdown。

此功能在一个简单的操作方法页面中进行了记录。该网页是静态 HTML,使用出色的 mkdocs一个 markdown 文档生成,使用 mkdos 风格的 markdown。

到目前为止,一切都很正常 - 许多项目都有这样的操作方法文档。

但是,这个 markdown 文档是使用自定义 jinja2 模板此功能的可执行规范的组合生成的,两者都使用声明式、类型安全的 YAML 定义。

这不是 Cucumber 试图做的事情吗?

不。

首先,Cucumber 不会用于生成任何类型的文档。它应该是文档本身。

由于 Gherkin 语法的设计和围绕该工具的文化,很难创建具有复杂前提条件和步骤的规范。Gherkin 故事通常最终会像这样

  Scenario: Org file that will produce markdown
    Given I have an org file and appropriate template
    When I run the orji command
    Then an output with markdown will appear

规范的许多相关细节将被埋藏在执行的步骤代码中。

这些“规范”表面上是为了促进交流,但实际上,除了编写 Cucumber 脚本的测试人员之外,所有人都忽略了它们。

这个工具可以自动生成所有文档吗?

不。

根据Diátaxis 模型,软件项目需要 4 种主要的文档类型

  • 操作方法
  • 参考
  • 教程
  • 说明

操作方法文档将包含大量与规范重叠的内容,教程也是如此。

但是,说明性文档将包含更少的重叠内容。

参考材料可能不会由 hitchstory 生成,但可能会从代码中的其他来源生成。一个很好的例子是从模式生成的 REST API 参考信息。

截图怎么办?

如果可执行规范是通过类似 Appium 或 Playwright 的工具执行的,则运行测试套件时可以生成屏幕截图工件。

生成的 Markdown/HTML/任何文档可以直接将这些文件引用为图像。

我能用它做什么?

规范到文档的自动生成有很多用途,包括:

  • 为您的 REST API 生成操作指南,供移动应用开发者使用。
  • 为 Python 库生成操作指南(本网站上的所有项目都是以这种方式生成的)。
  • 生成详细报告,向高层管理人员展示您的应用程序的功能,而无需开会。
  • 生成文档,展示多语言网站上的所有用户流程,以便翻译人员进行质量控制。
  • 为监管机构生成报告,证明应用程序已通过严格的测试。
  • …等等。