项目实训-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 存储数据、查询数据或执行其他操作,以验证代码的正确性
    • 测试的方法定义在父类中

vs2010 中添加 ActiveX Control Test Container工具(转载) vs2010中的TSTCON( ActiveX Control Test Container )工具非自动安装,而是作为一个例程提供。所以应找到该例程,并编译: 如vs2010安装在默认路径则 1, 进入:C:\Program Files\Microsoft Visual Studio 10.0\Samples\1033,可找到VC2010Samples.zip文件, 2, 将其解决到同一个文件夹,解压后将出现一个C++子文件夹。 3, TstCon例程在:C:\Program Files\Microsoft Visual Studio 10.0\Samples\1033\C++\MFC\ole\TstCon,双击其中的.sln文件启动工程,直接编译, 4, 编译后在Debug子文件夹中将出现一个TstCon.exe文件,将其复制到:C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools文件夹。 5, 在vs2010中的Tools菜单点击“External Tools...”,出现如下对话框,点击“Add”添加一项工具。 6, 新工具项的"Title"为:ActiveX Control Test Container,"Command"为:C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\TstCon.exe。 7, 确认退出对话框,Tools菜单将出现“ActiveX Control Test Container”菜单项。完毕! 同理在2015安装目录下找到并编译: 但是编译的时候需要区分win32和x64的不同平台生成的工具 分别添加 ActiveX Control Test Container 32和 ActiveX Control Test Container 64的工具,因为不同工具显示的是不同平台注册的com组件,比如你注册一个32位的com组件,此时只能用ActiveX Control Test Container 32测试,而在ActiveX Control Test Container 64中是找不到这个com组件的
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值