前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么我们在RDO中使用OpenStack包构建的测试[Openstack]

为什么我们在RDO中使用OpenStack包构建的测试[Openstack]

作者头像
用户6667850
修改2019-11-12 11:05:20
6750
修改2019-11-12 11:05:20
举报

确保各个代码单元按预期工作对于减少错误和意外行为至关重要。

单元测试用于验证源代码的各个单元是否按照定义的规范工作。虽然这听起来很复杂,但简而言之,这意味着我们要验证源代码的每个部分是否按预期工作,而不必运行它们所属的整个程序。

所有的OpenStack项目都有自己的一套单元测试,例如,这是oslo的单元测试文件夹。配置项目。这些测试是在提出一个新补丁供评审时执行的,以确保现有(或新)功能不会被新代码破坏。例如,如果检查这篇综述,您可以看到执行的一个持续集成作业是“openstack-tox-py27”,它使用Python 2.7运行单元测试。

RDO单位

这如何转化为包装世界?作为spec文件的一部分,我们可以定义%check部分,在这里我们添加脚本来测试安装的代码。虽然这不是Fedora打包指南中的强制部分,但强烈建议这样做,因为它可以很好地保证打包的代码是正确的。

在许多情况下,RDO包在它们的规范中包含这个%check部分,并且在构建包时执行项目的单元测试。这是为python-oslo-utils包执行的单元测试的一个示例。

您可能会问:“但是为什么在打包时要重新执行这些测试呢?”毕竟,这些相同的测试是在合并之前由Zuul gate执行的。原因有很多:

这些单元测试是在特定的操作系统版本和特定的包集上运行的。它们可能与RDO使用的不同,所以我们需要确保项目与那些组件的兼容性。

项目依赖项使用pip安装在OpenStack gate中,有些版本可能会有所不同。这是因为OpenStack项目为每个依赖项支持一系列的版本,但通常只测试一个版本。我们已经看到过项目声明支持版本x的情况。0的库,但随后添加了需要版本x.1的代码。OpenStack gate不会注意到这个变化,但是它会使单元测试在打包时失败。

它们还允许我们在问题发生在上游通道之前进行检测。OpenStack项目使用requirements项目来决定其他项目应该使用他们自己的库的哪个版本。这允许了一些相互依赖的问题,在这些问题中,Oslo库的变更可能会在另一个项目中发现一个bug,但是直到需求项目被Oslo库的新版本更新时才会被注意到。在RDO的情况下,我们在所有项目中使用来自主分支的代码运行RDO trunk builder,这允许我们提前通知,就像在这个示例bug中一样。

当新的依赖项被添加到项目中时,它们会给我们一个早期的警告,但是它们还没有出现在包规范中。由于单元测试测试大部分代码,任何缺少的依赖项都会使它们失败。

由于在包构建期间执行单元测试的方式,在定义它们时需要记住一些细节。如果你是一名开发人员,你会让他们的生活更容易:

不要创建依赖于Internet上可用资源的单元测试。大多数打包环境在构建包时不允许Internet访问,因此依赖于通过DNS解析IP地址的单元测试将失败。

尽量将单元测试运行时间保持在合理的范围内。如果一个项目的单元测试需要1个小时才能完成,那么它们很可能不会在打包过程中执行,如本例中所示。

不要假设单元测试总是在拥有8个快速核心的机器上执行。我们已经看到过单元测试失败的案例,比如在有限的环境中运行,或者需要超过一定时间才能完成。

既然您已经了解了RDO打包的单元测试的重要性,那么您可以继续并确保我们在每个包上都使用它。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档