【问题标题】:Test Kitchen integration tests with Chefspec: testing cookbook with dependencies使用 Chefspec 测试 Kitchen 集成测试:使用依赖项测试食谱
【发布时间】:2016-05-09 06:48:17
【问题描述】:

我了解测试厨房遵循顺序

创建节点 > 收敛说明书 > 运行测试

创建一个假设强外部依赖的测试的最佳实践是什么?

一个例子是 Kafka 食谱https://supermarket.chef.io/cookbooks/kafka。您可能知道,Kafka 是一个依赖于 Zookeeper 的消息代理应用程序,Zookeeper 是一个独立的应用程序,即消息中心。

按照适当的关注点分离,Kafka 食谱不包括 Zookeeper - 它可以安装在同一台主机或不同的机器上。

但是,为了对 Kafka 是否正常工作进行简单验证(即创建简单消息),您需要运行 Zookeeper 服务器。

比如测试可以在安装后运行这三个命令

# creates a message topic
bin/kafka-create-topic.sh --zookeeper localhost:2181 --replica 1 --partition 1 --topic test

# lists existing message topics
bin/kafka-list-topic.sh --zookeeper localhost:2181

# sends a message to this machine
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

使用 Chefspec,有没有办法存根这个外部服务器(上面的 localhost:2181 部分)?

谢谢!

【问题讨论】:

    标签: testing chef-infra apache-kafka apache-zookeeper chefspec


    【解决方案1】:

    答案分为两部分:首先 ChefSpec 用于单元测试,与 Test Kitchen 和集成测试无关。其次,您需要制作一个最小的测试配方来安装 1 节点 ZK 服务器并将其用于集成测试。通常,您可以通过在test/cookbook 下放置一个测试食谱来做到这一点,然后使用path 源将其添加到您的 Berksfile。您可以使用“真正的” ZK 食谱,或者您可以使用更简单、更专业的东西。只是用于测试的极简主义示例,请参阅my MongoDB recipe。在这种情况下,您可能可以对 ZK 使用类似的东西。

    【讨论】:

    • 感谢您的回答,并感谢您对应用程序手册的赞誉!我正在处理一个 .Net 项目,将看看我是否可以使用你的食谱而不是我目前使用的 powershell 命令序列。关于测试,我宁愿避免仅仅为了测试而将依赖配方包含在主配方中的方法。不过,我会尝试做测试/食谱,看看它是否能解决问题。尽快更新。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多