项目实训-testcontainer

文章介绍了如何使用Testcontainers在测试中自动管理Elasticsearch容器,以减少开发环境对测试的影响。通过POM依赖引入Testcontainers库,然后在测试类中配置Elasticsearch容器和相关模型,简化了测试环境的设置和数据操作的验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

产生原因

如果一个项目依赖的外部配置比较多,每次测试需要将项目依赖的环境服务启动,如果测试人员的开发环境不对还得修改环境,这不是测试人员应该考虑的问题,因此这里使用docker去除开发环境的影响

使用

docker启动

testcontainer需使用docker,windows直接启动docker-desktop就可以了。

demo

懒得看文档了,这里就以langchain的demo为例简单记录下使用方式。

引入pom依赖

		<dependency>
		<groupId>org.testcontainers</groupId>
		<artifactId>testcontainers</artifactId>
		<version>1.19.7</version>
		<scope>test</scope>
	</dependency>
		<dependency>
			<groupId>org.testcontainers</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>1.19.6</version>
		</dependency>

代码

@Testcontainers
class ElasticsearchEmbeddingStoreIT extends EmbeddingStoreWithFilteringIT {

    @Container
    private static final ElasticsearchContainer elasticsearch =
            new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:8.9.0")
                    .withEnv("xpack.security.enabled", "false");

    EmbeddingStore<TextSegment> embeddingStore = ElasticsearchEmbeddingStore.builder()
            .serverUrl(elasticsearch.getHttpHostAddress())
            .indexName(randomUUID())
            .dimension(384)
            .build();

    EmbeddingModel embeddingModel = new AllMiniLmL6V2QuantizedEmbeddingModel();

    @Override
    protected EmbeddingStore<TextSegment> embeddingStore() {
        return embeddingStore;
    }

    @Override
    protected EmbeddingModel embeddingModel() {
        return embeddingModel;
    }

    @Override
    protected void ensureStoreIsEmpty() {
        // TODO fix
    }

    @Override
    @SneakyThrows
    protected void awaitUntilPersisted() {
        Thread.sleep(1000);
    }
}
  1. Elasticsearch 容器准备:
    • 在测试类的静态字段中定义了一个名为 elasticsearch 的 Testcontainers Elasticsearch 容器。该容器使用官方的 Elasticsearch 镜像版本 8.9.0,并且禁用了 X-Pack 安全特性。
    • 在测试类运行之前,Testcontainers 会自动启动这个 Elasticsearch 容器。
  2. Embedding Store 和 Embedding Model 初始化:
    • 在测试类中定义了一个 embeddingStore,它是一个 ElasticsearchEmbeddingStore 实例。这个实例连接到运行在 elasticsearch 容器中的 Elasticsearch 服务,并指定了一个随机的索引名称和维度为 384。
    • 定义了一个 embeddingModel,它是一个 AllMiniLmL6V2QuantizedEmbeddingModel 实例。
  3. 测试方法重写:
    • embeddingStore() 方法返回了上面初始化的 embeddingStore 实例。
    • embeddingModel() 方法返回了上面初始化的 embeddingModel 实例。
    • ensureStoreIsEmpty() 方法是一个占位方法,需要被实现以确保存储空间为空。
    • awaitUntilPersisted() 方法是一个占位方法,通过线程休眠来模拟等待数据持久化。
  4. 测试执行:
    • 当你运行这个测试类时,Testcontainers 会自动启动 Elasticsearch 容器,并且测试方法会使用这个容器中的 Elasticsearch 服务来执行测试逻辑。
    • 测试逻辑可能包括向 Elasticsearch 存储数据、查询数据或执行其他操作,以验证代码的正确性
    • 测试的方法定义在父类中

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值