上海软件测试培训
达内上海市场营销中心

15026646813

热门课程

利用Docker和Junit进行集成测试

  • 时间:2017-11-01 14:04
  • 发布:上海软件测试培训
  • 来源:企业笔试题

一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。这时候就需要集成测试(也叫组装测试或联合测试)。集成测试在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,对系统的接口进行正确性检验测试。

随着云端服务的普及,微服务架构开始应用于越来越多的项目上,比如项目中的一些服务会“外包”出去,如PostgreSQL, Apache Kafka, etcd等。这就需要本地服务与外部组件进行交互,如果用传统的方法进行集成测试,在各种不同服务配置下很难快速跑完全部用例,这就需要一种方法能够将各类服务快速集成、执行、并输出结果。

<a style='color:blue' href='http://sh.qa.tedu.cn/news/'>上海软件测试培训</a>班

上海软件测试培训班-达内小编将分享一种利用Docker Compose和JUnit的方法来搭建微服务的集成测试环境。我们利用Docker Compose启动依赖项,JUnit和Gradle来执行测试,以及docker-compose-rule将他们粘在一起。

配置步骤

1 前提条件

你的测试机需要预安装Docker和Docker Compose,没了,就这么简单。

Docker:https://www.docker.com/docker-centos-distribution

Docker Compose: https://docs.docker.com/compose/install/

2 Step 1: 配置build.gradle

配置环境的第一步是配置build.gradle,在测试时我们使用docker-compose-rule来协调系统与Docker Compose的交互。为此我们需要将它们的bintray repository添加至我们的’repositories’配置中,并在’com.palantir.docker.compose:docker-compose-rule-junit4:0.31.1’上定义一个testCompile依赖关系。

另外,上海软件测试培训班小编提醒大家注意,还需要将单元测试与集成测试分开,以便可以独立运行Gradle任务测试和集成测试。因此我们可以创建一个称为integration Test的测试任务来完成此任务,其中我们将包括一个category(稍后会介绍)。

配好的build.gradle大致为:

3 Step 2: 配置docker-compose文件

第二步是为与系统需要进行交互的外部组件配置docker-compose文件。在本文中,我们使用docker 镜像persperhour / dynamodb。

完整的配置如下:

这里有个坑,要确保不要暴露任何端口,避免发生冲突。

为了使docker-compose-dynamodb.yml可用于我们的测试,需要将这个文件放入src/test/resources文件夹中。然后,通过使用docker-compose -f docker-compose-dynamodb.yml启动容器来测试我们的配置,最后用docker-compose -f docker-compose-dynamodb-yml将其卸下。

4 Step 3: 执行前配置

现在开始可以配置我们需要的测试了,首先,测试之前需要创建上文提到的category接口。

public interface IntegrationTest {

}

然后,我们可以使用这个类对集成测试进行注释:

@Category(IntegrationTest.class)

public class UserRepositoryIntegrationTest {

接下来配置docker-compose-rule,使用@ClassRule:

@ClassRule

public static DockerComposeRule docker = DockerComposeRule.builder()

.file("src/test/resources/docker-compose-dynamodb.yml")

.waitingForService(DYNAMODB, HealthChecks.toHaveAllPortsOpen())

.build();

此配置可保证在docker-compose文件中指定的服务会在测试之前启动,在测试完成停止并拆除。

现在,我们可以在@BeforeClass中使用DockerComposeRule docker来获取从Docker分配的外部端口来配置DynamoDB连接:

private static UserRepository repository;

@BeforeClass

public static void initialize() {

DockerPort dynamodb = docker.containers()

.container(DYNAMODB)

.port(DATABASE_PORT);

String dynamoEndpoint = String.format("http://%s:%s", dynamodb.getIp(), dynamodb.getExternalPort());

repository = new UserRepository(dynamoEndpoint,

"KEY",

"SECRET_KEY",

"AP-SOUTHEAST-1");

}

至此配置已经完成,就可以按照测试需求部署服务与业务逻辑。

学习使我们处于不败之地,IT学习更能让我们适应互联网+大数据时代的高速发展,上海达内带你一同走进魔都的高薪阶层,做更有价值的事。【上海软件测试培训】达内

扫码获取免费学习机会

上海软件测试培训班
上一篇:安全性测试认识及重点分享:SQL注入
下一篇:你手机通过测试了没(送给买全面屏机的你)

软件测试面试题,不是经典但命中率极高

QA在软件测试中扮演什么角色?如何保障软件质量

软件测试工程师专用工具:Burpsuite测试移动应用程序

春运急?教你用Python自动刷新抢12306火车票

选择城市和中心
贵州省

广西省

海南省