测试数据准备的 2.0 时代
在Java中可以利用Builder Pattern,创建数据时如对其中的某个或某几个参数有特定要求的话,可以通过“.withParameter()”的方式指定,而没有指定的参数将自动采用默认值。
UserBuilder.withCountry(“US”).withBuildStrategy(BuildStrategy.SEARCH_ONLY.build();
UserBuilder.withCountry(“US”).withBuildStrategy(BuildStrategy.CREATE_ONLY).build();
UserBuilder.withCountry(“US”).withBuildStrategy(BuildStrategy.SMART).build();
UserBuilder.withCountry(“US”).withBuildStrategy(BuildStrategy.OUT_OF_BOX).build();
- 当使用 BuildStrategy.SEARCH_ONLY 策略时,Builder Pattern 会在被测系统中搜索符合条件的测试数据,如果找到就返回,否则就失败(这里,失败意味着没能返回需要的测试数据);
- 当使用 BuildStrategy.CREATE_ONLY 策略时,Builder Pattern 会在被测系统中创建符合要求的测试数据,然后返回;
- 当使用 BuildStrategy.SMART 策略时,Builder Pattern 会先在被测系统中搜索符合条件的测试数据,如果找到就返回,如果没找到就创建符合要求的测试数据,然后返回;
- 当使用 BuildStrategy.OUT_OF_BOX 策略时,Builder Pattern 会返回 Out-of-box 中符合要求的数据,如果在 Out-of-box 中没有符合要求的数据,build 函数就会返回失败;
测试数据准备的 3.0 时代
统一测试数据平台
引入了 Core Service 和一个内部数据库。其中,内部数据库用于存放创建的测试数据的元数据;Core Service 在内部数据库的支持下,提供数据质量和数量的管理机制。
当一个测试数据被创建成功后,为了使得下次再要创建同类型的测试数据时可以更高效,Core Service 会自动在后台创建一个 Jenkins Job。这个 Jenkins Job 会再自动创建 100 条同类型的数据,并将创建成功的数据的 ID 保存到内部数据库(存储的是id和其他用于筛选数据的相关字段,实际的数据还是在真正的被测系统的数据库中的),当下次再请求创建同类型数据时,这个统一测试数据平台就可以直接从内部数据库返回已经事先创建的数据。在一定程度上,这就相当于将原本的 On-the-fly 转变成了 Out-of-box,缩短整个测试用例的执行时间。当这个内部数据库中存放的 100 条数据被逐渐被使用,导致总量低于 20 条时,对应的 Jenkins Job 会自动把该类型的数据补足到 100 条。而这些操作对外都是透明的,完全不需要我们进行额外的操作。
统一测试数据平台其实是将所有的数据准备函数在 Spring Boot 的支持下转变为了 Restful API,为跨平台和跨语言的各类测试框架提供了统一的数据准备方案。