Docker环境下PHPUnit对接Elasticsearch的功能测试配置方案咨询
集成测试最优方案
优先选择完全隔离的测试专用ES容器实例,无需修改现有业务代码和YAML映射配置,也不会污染开发/生产环境数据,适配你的Docker环境操作成本最低:
- 在你的
docker-compose.yml中新增测试ES服务,不需要持久化卷,测试结束销毁容器即可自动清理所有测试数据:
elasticsearch-test: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1 container_name: my-app-elasticsearch-test ulimits: memlock: soft: -1 hard: -1 environment: - bootstrap.memory_lock=true - discovery.type=single-node - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
- 测试环境单独配置连接参数,比如在
.env.test文件中指定测试ES实例的地址即可,原有业务逻辑完全不用调整:
ELASTICSEARCH_HOST=my-app-elasticsearch-test ELASTICSEARCH_PORT=9200
你正在使用的elasticsearchunit库可以直接对接这个测试实例,自动完成测试前索引重建、测试数据灌入,测试后数据清理的流程,完全适配你现有的elastically映射文件,不需要单独编写测试用映射。
同实例多节点连接配置说明
如果你确实需要用同实例多节点的方案,配置逻辑如下:
- 每个节点设置独立的
container_name,关闭discovery.type=single-node参数,按照官方集群配置规则设置节点发现规则即可 - PHP连接时如果要访问整个集群,可将所有节点的
容器名:端口按格式配置到客户端host列表:
ELASTICSEARCH_HOSTS=es-node1:9200,es-node2:9200,es-node3:9200
jolicode/elastically原生支持多host配置,直接传入数组即可正常使用。如果仅需要连接测试专用节点,测试环境单独配置对应节点的容器名作为host即可。
测试方案补充
单元测试直接使用官方提供的mock handler即可满足需求,功能/集成测试使用上述独立ES实例方案,两套方案互不冲突,可以覆盖所有测试场景。
内容的提问来源于stack exchange,提问作者Bogdan Dubyk
相关产品推荐
相关产品推荐

