首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ChefSpec运行超慢

ChefSpec运行超慢
EN

Stack Overflow用户
提问于 2016-10-11 13:56:40
回答 3查看 436关注 0票数 1

我正在跟踪本基本教程,看起来这些测试应该在最多2秒的时间内运行,但是我在5个测试中得到了41秒

我使用ChefSpec运行--profile,这就是结果

代码语言:javascript
复制
Top 8 slowest examples (41.17 seconds, 99.8% of total time):
  webserver_test::default When run on CentOS 7.2.1511 installs httpd
5.21 seconds ./spec/unit/recipes/default_spec.rb:20
  webserver_test::default When run on Ubuntu 14.04 converges successfully
5.17 seconds ./spec/unit/recipes/default_spec.rb:39
  webserver_test::default When run on CentOS 7.2.1511 enables the httpd service
5.16 seconds ./spec/unit/recipes/default_spec.rb:24
  webserver_test::default When run on Ubuntu 14.04 starts the apache2 service
5.15 seconds ./spec/unit/recipes/default_spec.rb:51
  webserver_test::default When run on CentOS 7.2.1511 converges successfully
5.15 seconds ./spec/unit/recipes/default_spec.rb:16
  webserver_test::default When run on Ubuntu 14.04 installs apache2
5.13 seconds ./spec/unit/recipes/default_spec.rb:43
  webserver_test::default When run on CentOS 7.2.1511 starts the httpd service
5.11 seconds ./spec/unit/recipes/default_spec.rb:28
  webserver_test::default When run on Ubuntu 14.04 enables apache2 service
5.1 seconds ./spec/unit/recipes/default_spec.rb:47

Finished in 41.26 seconds (files took 6.58 seconds to load)

8例,0例失败

EN

回答 3

Stack Overflow用户

发布于 2016-10-11 20:46:38

有几个问题:

  1. 伯克格集成增加了一个相当高的固定开销(即,它需要一些时间,但只有一次,无论你有多少规格。
  2. ServerRunner单方面比SoloRunner慢。您几乎应该总是使用SoloRunner。厨师的教程在这方面是错误的。
  3. 正如@smefju所提到的,缓存可以有所帮助,尽管合并多个规范通常更容易: (Chef_run).to enable_service ' httpd‘expect(chef_run).to start_service 'httpd’结束 这将只运行一次收敛,并将其用于两个检查,而不是将它们作为两个单独的示例,如本教程中所示。您可以将任意数量的断言放在一个示例中,只需了解您将提高速度,但会减少测试隔离。在这种情况下,也许是值得的。
票数 6
EN

Stack Overflow用户

发布于 2016-10-11 14:07:59

您没有共享代码,但最有可能的是您没有任何用于运行厨师的缓存机制。

基本上这个代码:

代码语言:javascript
复制
let(:chef_run) do
  runner = ChefSpec::ServerRunner.new
  runner.converge(described_recipe)
end

需要在每一个规范中汇集机器,这是很慢的。如果您有更复杂的规范规则(例如,在整个测试套件中缓存不同的属性和服务),您可以考虑使用结果或构建自己的解决方案。

另一部分解决方案是并行地划分和执行规范。您可以使用测试宝石来实现它。

票数 1
EN

Stack Overflow用户

发布于 2017-06-28 14:52:55

如果您的repo中有大型dirs或文件(如.gitvendor/bundle,请参阅du -chs *获取完整列表),这可能会影响运行: chefspec将所有这些文件上载到本地临时主厨服务器。

将这些添加到chefignore以避免上传它们。

这可能与你的情况没有直接关系,但我刚刚遇到了一个类似的问题(在CI服务器上运行40分钟,在我的笔记本上运行不到10秒),所以我觉得如果有人也遇到这种情况,我应该离开这个解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39978965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档