1

私はこの基本的なチュートリアルに従っており、これらのテストは最大 2 秒で実行されるはずですが、5 つのテストで41 秒かかります。

私はChefSpecを実行しましたが--profile、これが結果です

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 失敗

4

3 に答える 3

6

いくつかの問題があります。

  1. Berkshelf の統合により、かなり高い固定オーバーヘッドが追加されます (つまり、いくらか時間がかかりますが、spec の数に関係なく 1 回だけです。
  2. ServerRunner は SoloRunner よりも一方的に遅くなります。ほとんどの場合、SoloRunner を使用する必要があります。この点で、Chef のチュートリアルは間違っています。
  3. @smefju が述べたように、キャッシングは役に立ちますが、複数の仕様を組み合わせる方が簡単なことがよくあります。

    it "does httpd stuff" do
       expect(chef_run).to enable_service 'httpd'
       expect(chef_run).to start_service 'httpd'
    end
    

    これにより、収束が 1 回だけ実行され、チュートリアルのように 2 つの個別の例として使用されるのではなく、両方のチェックに使用されます。1 つの例に任意の数のアサーションを含めることができます。ただし、速度は向上しますが、テストの分離が減少することを理解してください。この場合、おそらく価値があります。

于 2016-10-11T20:46:38.700 に答える