使用TestContainers提高测试性能

在我以前的测试文章中,我描述了如何使用TestContainers为数据库测试提供现实的测试环境。 此评论显示了缺点:

…如上所述,似乎总是有一些缺点。 在这种情况下,启动Docker映像及其包含的所有内容的开销将增加您的总体构建时间。

提醒一下,这是TestContainer特定的代码。 注意实例成员postgres ,以及根据每个方法重新初始化它的JUnit Rule

package be.objectify.tcexample.db;import be.objectify.tcexample.AbstractUserDaoTest;
import be.objectify.tcexample.UserDao;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.testcontainers.containers.PostgreSQLContainer;
import play.db.Database;public class JooqUserDaoTest extends AbstractUserDaoTest implements DbTestSupport,TestData {@Rulepublic PostgreSQLContainer postgres = new PostgreSQLContainer();private Database database;@Beforepublic void setup() throws Exception {// the database has all evolutions applieddatabase = create(postgres); // load some test dataloadTestData(database); }@Afterpublic void tearDown() {destroy(database);}@Overridepublic UserDao dao() {return new JooqUserDao(database);}
}

鉴于测试持续时间的巨大增加是由Docker容器启动时间导致的,因此我们可以改用JUnit ClassRule启动一个容器,并将其重新用于类中的每个测试。 这意味着您不再应该并行运行这些测试,但是性能提升将大大超过测试并行化。

package be.objectify.tcexample.db;import be.objectify.tcexample.AbstractUserDaoTest;
import be.objectify.tcexample.UserDao;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.testcontainers.containers.PostgreSQLContainer;
import play.db.Database;public class FasterJooqUserDaoTest extends AbstractUserDaoTest implements DbTestSupport,TestData {@ClassRulepublic static PostgreSQLContainer postgres = new PostgreSQLContainer();private Database database;@Beforepublic void setup() throws Exception {database = create(postgres); loadTestData(database); }@Afterpublic void tearDown() {destroy(database);}@Overridepublic UserDao dao() {return new JooqUserDao(database);}
}

节省的时间取决于类中测试方法的数量。 我有一些测试类,每个类最多包含30个测试,在这种情况下,执行时间从几分钟缩短到几秒钟。 更改几行代码也不错。

翻译自: https://www.javacodegeeks.com/2017/05/boosting-test-performance-testcontainers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 横向排列,mysql横向转纵向、纵向转横向排列的方法

初始化数据DROP TABLE IF EXISTS test_01;CREATE TABLE test_01 (id int(0) NOT NULL,user varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 用户,km varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT …

VS2010常用快捷键自定义

VS的快捷键确实很多,不过对我来说实用的几个,要用的时候实在是按得别扭。所以重新设置了某些快捷键。 设置方法如下: 1.进入工具-选项 对话框 2.选择【环境】-【键盘】 3.在 【显示命令包含】 下面的对话框中输入你想重新定义快捷键的中文名&…

matlab光学毕业论文,光学信息处理实验的Matlab仿真.doc

摘要:光学实验系统往往比较精密和复杂,理论课堂教学中加入相关实验的演示往往比较费时,而且也不一定能得到正确的实验结果。随着计算机技术的发展,强大的运算性能和图形处理能力可以很好的解决这个问题,满足课堂教学中…

JavaScript方法——call和apply

1、相同点: a) 产生的效果或作用完全相同; b) 至少有一个参数; c) 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒。 2、不同点: 传递参数的方式。 前提: 1、有两个对象…

阿帕奇跨域_阿帕奇骆驼备忘单

阿帕奇跨域轮询一个空目录(并发送一个空消息,正文为空): from(file://temp?sendEmptyMessageWhenIdletrue)停止路线: .process(new Processor() {public void process(Exchange exchange) throws Exception {getConte…

天空之城 matlab,[转载]matlab演奏《天空之城》代码

%matlab演奏《天空之城》代码l_dao262; %将“l_dao”宏定义为低音“1”的频率262Hzl_re286; %将“l_re”宏定义为低音“2”的频率286Hzl_mi311; %将“l_mi”宏定义为低音“3”的频率311Hzl_fa349; %将“l_fa”宏定义为低音“4”的频率349Hzl_sao392; %将“l_sao”宏定义为低音“…

7.0上的新KIE持久性API

这篇文章介绍了即将到来的Drools和jBPM持久性api。 创建持久性api(不绑定到JPA)的动机是因为Drools和jBPM中的持久性直到7.0.0发行版才允许将替代性持久性机制与JPA完全集成。 尽管JPA是一个出色的api,但它与传统RDBMS模型紧密地结合在一起&a…

从客户的角度看网站涉及的第一要素

最近给某企业做了一个内部网站,界面风格、内容都是按照客户的要求进行了开发,测试阶段客户比较满意。投入试运行后,客户的领导级人物看了一眼首页中图片的大小(600K),马上对我们的软件开发水平进行贬低。因…

linux ssl PHP,Linux环境安装Apache与PHP,支持SSL

1、Apache在如下页面下载apache的for Linux 的源码包http://www.apache.org/dist/httpd/;存至/home/xx目录,xx是自建文件夹,我建了一个wj的文件夹。命令列表:cd /home/wjtar -zxvf httpd-2.0.54.tar.gzmv httpd-2.0.54 apachecd apache./conf…

JBUILDER 2006怎么配置 STRUTS?[

建web工程时引入struts框架,选版本就可以了。jbuilder2006中有一个struts的可视化操作界面天极网有详细的图文资料,搜以下就可以找到关注首先新建项目然后选择Web选项,双击Web Module(WAR)创建一个Module,我感觉这个Web Module就相当于虚拟目录。然后可以…

dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令

实验一(时间:2012.3.6)1实验项目名称:ORACLE 10G的安装、运行与配置2实验内容:a.检查ORACLE 10G安装的软硬件环境,安装服务器端软件和客户端软件;b.查看安装后的结果;c.启动与关闭监听服务、实例服务等&…

jhsdb:JDK 9的新工具

我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd , jps , jstat , jinfo , jhat和jmap , jrunscript , jstack之类的 工具上进行 博客撰…

purfer序列

prufer序列求法 对于一个无根无向图我们可以应用prufer序列操作使它缩成一个序列。 具体操作 一,每次选出来树中编号最小的点且度数为一(即叶子节点) 二,将与被删去的点相连的节点加入prufer序列中 重复一,二&#xff…

oracle11g高可用,oracle11g 搭建DG环境总结

本帖最后由 zhofly 于 2016-6-24 23:19 编辑测试环境为:两台服务器配置一样:Oracle Linux Server release 6.5 X86_64, DB 11.2.0.4.0前提环境:一台已经安装好数据库软件并创建数据库实例的服务器另一台也就是备库,只安装了数据…

树的计数(prufer序列 或 purfer序列)

题解 首先我们要知道一条性质,prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下,其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{…

PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能

网站中发布的文章除了需要按时间、栏目分类、类别调用外,往往需要根据编辑的推荐进行不同的调用,那么CMS自然少不了推荐位功能。一般推荐位的设计都有首页头条、首页幻灯焦点、首页推荐、栏目页推荐、列表页推荐、内容页推荐等,基本可以满足站…

声明对象 创建对象_流利的对象创建

声明对象 创建对象关于此主题的文章很多(绝大多数),但我只是想贡献我的两分钱,并写一篇简短的文章,介绍如何使用Java中的Fluent Object Creation模式或对象构建器实例化Value Objects。 值对象是由其状态(…

shell脚本之shellcode自动提取工具

最近一直在忙着写论文。突然领导又分配任务,帮写个自动提取shellcode的脚本工具。因为之前,我们都是用objdump查看后,把shellcode一个个添加进去,很麻烦,害怕写错。所以说我们写这个工具还是挺有必要的。首先我们要先了…

Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

我于2017年5月开始在Confluent工作,担任技术传播者,专注于围绕开源框架Apache Kafka的主题。 我认为机器学习是当今最热门的流行语之一,因为它可以在任何行业中增加巨大的商业价值。 因此,您还会从我这里收到有关Apache Kafka&…

dmp文件导入11oracle数据库,如何将dmp文件导入到自己的oracle数据库中

1、首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下:create tablespace test(表空间的名字)datafile D:\oracle\product\10.2.0\userdata\test.dbf (这边可以写成oracle的某个路径下)size 50m (初始大小)autoextend on;(自动…