基础设施自动化测试全解析
1. 测试类型选择与反模式
在基础设施代码库的测试中,并没有固定的公式来确定应该使用哪种类型的测试。最佳的做法是从相对简单的测试开始,然后在有明确需求时引入新的测试层次和类型。
1.1 反模式:反射性测试
低级基础设施测试的一个陷阱是编写仅仅重复配置定义的测试。例如,以下是一个 Chef 代码片段,用于创建配置文件:
file '/etc/our_app.yml'
owner ourapp
group ourapp
end
对应的 Chefspec 单元测试示例如下:
describe 'creating the configuration file for our_app' do
# ...
it 'gives the file the right attributes' do
expect(chef_run).to create_template('/etc/our_app.yml').with(
user: 'ourapp',
group: 'ourapp'
)
end
end
这个测试只是重复了定义,实际上是在测试 Chef 开发者是否正确实现了文件资源,而不是我们编写的代码。如果习惯编写这类测试,会产生大量此类测试,并且会浪费大量精力对每个配置进行两次编辑,一次用于定义,一次用于测试。
一般来说,当逻辑存在一定复杂性需要验证时才