Testcontainers对GCP服务进行测试

2023-10-21 20:44

本文主要是介绍Testcontainers对GCP服务进行测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在上一篇博客我介绍了如何用Testcontainers来做Java测试,并以Kafka为例。在我的项目中,还用到了GCP的一些服务,例如Bigquery,Testcontainers同样提供了对GCP服务的支持。因为官网对于Bigquery的模拟测试介绍的太简略了,我这里总结一下如何来模拟Bigquery。

官网介绍可以用以下代码来配置一个Bigquery container

BigQueryEmulatorContainer container = new BigQueryEmulatorContainer("ghcr.io/goccy/bigquery-emulator:0.4.3")

但是这样得到的container是无法新增一个dataset的,起码我没找到对应的方法。

我这里采用另一种方式来加载Bigquery

public GenericContainer<?> bqSimulator = new GenericContainer<>(DockerImageName.parse("ghcr.io/goccy/bigquery-emulator")).withExposedPorts(9050,9060).withCommand("--project=test-project", "--dataset=dataset1");

这种方式加载,就可指定创建一个名为test-project的项目,并创建一个dataset1

之后就可以按照正常的方式来调用Bigquery的功能了,例如创建table,写入数据,查询数据等。先获取Bigquery client

String url = String.format("http://%s:%d", bqSimulator.getHost(), bqSimulator.getMappedPort(9050));
BigQueryOptions options = BigQueryOptions.newBuilder().setProjectId("test-project").setHost(url).setLocation(url).setCredentials(NoCredentials.getInstance()).build();
BigQuery bigQuery = options.getService();

查看当前项目的dataset

Page<Dataset> datasets = bigQuery.listDatasets("test-project", DatasetListOption.pageSize(100));
if (datasets == null) {System.out.println("Dataset does not contain any models");return;
}    
datasets
.iterateAll()
.forEach(dataset -> System.out.printf("Success! Dataset ID: %s ", dataset.getDatasetId()));

建立一个table,写入测试数据,然后再查询

TableId tableId = TableId.of("dataset1", "abc");
Schema schema =Schema.of(Field.of("name", StandardSQLTypeName.STRING),Field.of("time", StandardSQLTypeName.TIMESTAMP));
TableDefinition tableDefinition = StandardTableDefinition.of(schema);
TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build();
bigQuery.create(tableInfo);DatasetId datasetId = DatasetId.of("test-project", "dataset1");
Page<Table> tables = bigQuery.listTables(datasetId, TableListOption.pageSize(100));
tables.iterateAll().forEach(table -> System.out.print(table.getTableId().getTable() + "\n"));QueryJobConfiguration jobconf = QueryJobConfiguration.of("insert into dataset1.abc (name, time) values ('test', '2023-01-01T00:00:00')");
bigQuery.query(jobconf);String queryResult = "Select * from dataset1.abc;";
QueryJobConfiguration queryConfig =QueryJobConfiguration.newBuilder(queryResult).setUseLegacySql(true).build();
TableResult result = bigQuery.query(queryConfig);
result.iterateAll().forEach(rows -> rows.forEach(row -> System.out.println(row.getValue())));

以上就是对Bigquery进行模拟测试的方法。

这篇关于Testcontainers对GCP服务进行测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256858

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务