Em suma, este é um problema não trivial e não é facilmente resolvido analisando os manifestos. Compilar o catálogo pode expandir o escopo do teste, mas não é uma panacéia. puppet master --compile requer acesso aos fatos do nó, e idealmente um nó fictício que testa todas as classes. Você ainda tem que lidar com as limitações de:
- classes que não podem estar no mesmo catálogo (apache, apache :: disable)
- dependência entre classes.
- diferentes plataformas de sistema operacional.
- nós com parâmetros diferentes.
Por exemplo, se o nó um incluir aeb, tudo bem, mas o nó dois requer apenas b, é apenas uma falha que você verá no nó dois.
class a {
notify { 'hi': }
}
class b {
notify { 'bye':
require => Notify['hi'],
}
}
Se você tiver os recursos, poderá compilar o catálogo para todos os nós e fornecerá coberturas bastante abrangentes.
puppet apply --noop também tem suas limitações: ele falhará em um executável implementado por um pacote, ele falhará nos arquivos dependendo de um local de preparação e não testará várias plataformas a menos que você expanda o teste para uma amostra representativa de seus sistemas. Em geral, fornece uma cobertura suficiente para garantir que não haja problemas de compilação, dá uma ideia de quais sistemas são afetados, quais são as mudanças e você pode julgar pelos relatórios se as alterações são aceitáveis ou um problema real.
Na maioria dos casos, noop é suficiente, tenho visto vários graus de testes automatizados, como jenkins, onde cada módulo testa arquivos são simulados com --noop (limitações acima se aplica), ou usando o Vagrant para gerar MVs para executar o full teste de sopro.