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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装