Покрытие кода не работает при использовании в сочетании с задачей parallel_spec - PullRequest
0 голосов
/ 08 июня 2018

Я хотел бы знать, почему параллельный rspec показывает другой процент покрытия и пропущенные ресурсы по сравнению с тем, когда я запускаю без распараллеливания.

Вот вывод:

    Sysctl[net.ipv6.conf.all.accept_redirects]
      Sysctl[net.ipv6.conf.all.disable_ipv6]
      Sysctl[net.ipv6.conf.default.accept_ra]
      Sysctl[net.ipv6.conf.default.accept_redirects]
      Sysctl[net.ipv6.conf.default.disable_ipv6]
      Sysctl[net.ipv6.conf.lo.disable_ipv6]
      Sysctl[vm.min_free_kbytes]
      Sysctl[vm.swappiness]
      Systemd::Unit_file[puppet_runner.service]
      Users[application]
      Users[global]
    F

Failures:

  1) Code coverage. Must be at least 95% of code coverage
     Failure/Error: RSpec::Puppet::Coverage.report!(95)

       expected: >= 95.0
            got:    79.01
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:104:in `block in coverage_test'
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:106:in `coverage_test'
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:95:in `report!'
     # ./spec/spec_helper.rb:22:in `block (2 levels) in <top (required)>'

Finished in 42.12 seconds (files took 2.11 seconds to load)
995 examples, 1 failure

Failed examples:

rspec  # Code coverage. Must be at least 95% of code coverage


2292 examples, 2 failures


....................................................................

    Total resources:   1512
    Touched resources: 1479
    Resource coverage: 97.82%
    Untouched resources:

      Apt::Source[archive.ubuntu.com-lsbdistcodename-backports]
      Apt::Source[archive.ubuntu.com-lsbdistcodename-security]
      Apt::Source[archive.ubuntu.com-lsbdistcodename-updates]
      Apt::Source[archive.ubuntu.com-lsbdistcodename]
      Apt::Source[postgresql]

    Finished in 1 minute 25.3 seconds (files took 1.43 seconds to load)
    2292 examples, 0 failures

1 Ответ

0 голосов
/ 10 июня 2018

Поскольку из вопроса не совсем ясно, я предполагаю, что вы настроили покрытие кода, добавив строку в ваш spec / spec_helper.rb, например:

at_exit { RSpec::Puppet::Coverage.report!(95) }

Отчет покрытия являетсяфункция, предоставляемая rspec-puppet.

Кроме того, я предположил, что у вас есть более одного файла спецификации, который содержит ваши тесты, и что они выполняются параллельно, вызывая задачу parallel_spec, которая предоставляется puppetlabs_spec_helper .

Проблема заключается в следующем:

Чтобы покрытие кода работало правильно, все задачи Rspec должны выполняться в одном и том же процессе (см. код здесь ).

Между тем для параллелизации должно быть несколько файлов спецификаций, которые выполняются параллельно в отдельных процессах.Это ограничение связано с библиотекой parallel_tests, которая используется задачей Parallel_spec.См. README .

Отчет о покрытии кода, следовательно, учитывает только ресурсы, которые были замечены внутри каждого процесса.

Пример:

class test {
  file { '/tmp/foo':
    ensure => file,
  }
  file { '/tmp/bar':
    ensure => file,
  }
}

Файл спецификаций 1:

require 'spec_helper'

describe 'test' do
  it 'is expected to contain file /tmp/foo' do
    is_expected.to contain_file('/tmp/foo').with({
      'ensure' => 'file',
    })
  end
end

Файл спецификаций 2:

require 'spec_helper'

describe 'test' do
  it 'is expected to contain file /tmp/bar' do
    is_expected.to contain_file('/tmp/bar').with({
      'ensure' => 'file',
    })
  end
end

spec_helper.rb:

require 'puppetlabs_spec_helper/module_spec_helper'
at_exit { RSpec::Puppet::Coverage.report!(95) }

Параллельно работать:

Total resources:   2
Touched resources: 1
Resource coverage: 50.00%
Untouched resources:

  File[/tmp/bar]

Finished in 0.10445 seconds (files took 1.03 seconds to load)
1 example, 0 failures



Total resources:   2
Touched resources: 1
Resource coverage: 50.00%
Untouched resources:

  File[/tmp/foo]
Must be at least 95% of code coverage (FAILED - 1)

4 examples, 0 failures

Took 1 seconds

Запуск без распараллеливания:

Finished in 0.12772 seconds (files took 1.01 seconds to load)
2 examples, 0 failures


Total resources:   2
Touched resources: 2
Resource coverage: 100.00%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...