场景测试的功能集¶
场景测试的运行器和模板没有提供一种简单的方法来指定某个条目(例如,针对某个集群的 EDP 作业)与其配置(例如,凭据、作业的定义)之间的依赖关系。本提案旨在解决这个问题。
问题描述¶
Sahara-scenario 的一个关键特性是对测试模板的支持。它们支持参数,允许测试人员在不编写多个仅在几个参数上不同的测试模板副本的情况下描述不同的测试场景。这种灵活性在测试 S3 支持等功能时受到一定限制。测试 S3 集成需要在配置测试时指定一些额外的细节
访问 S3 API 所需的凭据;
使用 S3 的新的 EDP 作业的定义;
对于需要执行作业的每个集群,EDP 作业的名称。
前两项可以轻松添加到可以作为 sahara-scenario 命令的参数指定的新文件中(例如 credentials_s3.yaml.mako 和 edp_s3.yaml.mako)。它们包含的键(credentials 和 edp_jobs_flow)将由运行器合并。它们的内容也可以直接添加到现有的 YAML 文件中(credentials.yaml.mako 和 edp_s3.yaml.mako),但这将意味着为模板中的所有参数添加一个很长的默认值列表。
第三项更复杂,因为没有简单的方法来覆盖 cluster 元素中的一个条目,而 cluster 是一个列表,而不是一个字典。
虽然可以引入一个命令行参数来覆盖特定集群中的条目,但这仍然需要用户记住指定启用 S3 测试所需的所有内容。
解决此问题的更通用的方法是定义用于测试的功能集。
提议的变更¶
sahara-scenario 的用户只需要传递一个参数,例如
sahara-scenario ... --feature s3 ...
如果指定了 -p 和 -v 参数,对于每个 feature 参数,sahara-scenario 将包含文件 credentials_<feature>.yaml.mako 和 edp_<feature>.yaml.mako(如果它们存在)。
此外,对于所有启用的集群指定的 EDP 作业列表,将选择所有标记为 feature: s3 的条目。
这意味着没有 feature 标签的条目将始终执行,而带有 feature 标签的条目仅在选择了相关功能时才会执行。
初始实现将侧重于 EDP 作业,但其他条目也可能受益于标记。
替代方案¶
在 YAML 文件中使用条件语句。但是,在讨论 sahara-scenario 初始规范时,本规范的作者多次要求保持 YAML 文件不包含业务逻辑,而仅为纯声明式。
另一种可能的解决方案是复制 YAML 模板,这违背了可维护性和易用性。
数据模型影响¶
无。
REST API 影响¶
无。
其他最终用户影响¶
无。
部署者影响¶
新的测试运行器将与旧模板向后兼容,但新的模板将需要新的运行器,但这不应该成为问题。
开发者影响¶
无。
镜像打包影响¶
无。
Sahara-dashboard / Horizon 影响¶
无。
实现¶
负责人¶
- 主要负责人
ltoscano
工作项¶
扩展运行器以接受 feature 参数
添加新的 EDP 作业,并将功能标记添加到需要它的 EDP 作业,扩展现有的 S3 测试尝试(参见 参考文献),这是解决该问题的早期尝试。
依赖项¶
无。
测试¶
新的参数和值的合并将由单元测试覆盖。门控中的 sahara-tests-scenario 作业将覆盖回归测试。
文档影响¶
新的参数及其用法将从用户和测试编写者的角度进行记录。
参考资料¶
支持 S3 测试的初始工作