天行有常,不为尧存,不为桀亡。——荀子《天论》
新版测试框架位于zero-vie的脚手架项目中,原始项目祛除了底层ox-platform项目,将通用型不带业务的内容全部移动到了zero-vie中,整个测试框架教程如下:
包名:
cn.originx.quiz
根据测试目的的不同,整个环境中包含如下测试基类(包cn.originx.quiz)。
| 类名 | 用途 |
|---|---|
| AbstractPlatform | 顶层测试基类,底层数据访问测试以及标准模块测试专用。 |
| AbstractCommand | Shell命令工具测试专用。 |
| AbstractMigration | 升级工具测试专用,测试Migrate和MigrateStep。 |
| AbstractChannel | 通道测试专用基类,测试API和Job。 |
io.vertx.up.eon.em.Environment常量,表格中o表示支持,*表示默认值
各类环境以及基类支持表格如下:
| Development | Production | Mockito | |
|---|---|---|---|
| Platform | o | o | o * |
| Channel | o | o | o * |
| Command | o * | o | |
| Migration | o | o | o * |
如果子类在测试过程中想要切换环境可书写如下:
// 该类为测试类
public class DemoMigrateTc extends AbstractMigration {
public DemoMigrateTc() {
super(Environment.Development); // 提供环境信息
}
@Test
public void tcX(){
// 测试类
}
}
cn.originx.quiz.atom.QModel该结构对应的Json数据格式如:
{
"identifier": "模型统一标识符",
"key": "数据记录主键",
"data": {
}
}
data为模型中的数据部分。
cn.originx.quiz.atom.QRequest该结构对应的Json数据格式如:
{
"request": "POST /api/xxx",
"data": {}
"headers": {
}
}
data为请求中的数据部分,如果是JsonObject则使用{},如果是JsonArray则使用[]。
环境模型使用了新的甲方乙方模型,甲方就是我们面对的直接甲方,乙方就是第三方,如DDI、堡垒机等集成方,模型结构如下:

基本测试规范整体如下:
Tc结尾,全称为TestCase(不如此做无法运行概不负责)。tc为前缀,如tcEnvironment,tcExtension等。src/test/resources/test/目录中,您的测试类的包是什么,那么就在该目录中创建对应的子目录。qz-atlantic项目。获取对象的API分两类:
不解释测试参数,基类方法子类可调用
| 方法名 | 类 | 含义 |
|---|---|---|
| tcDao | AbstractPlatform | 测试AoDao执行动态建模数据库访问。 |
| tcRun | AbstractCommand | 执行Shell中的子系统命令。 |
| tcApi | AbstractChannel | API接口组件专用测试。 |
| tcJob | – | JOB任务组件专用测试。 |
| tcStep | AbstractMigration | 升级步骤专用测试。 |
| tcAop | – | 升级过程中的AOP组件专用测试。 |
| tcBackup | – | 备份测试。 |
| tcRestore | – | 还原测试。 |
甲乙方配置自己参考对应的代码,都是获取数据专用。
| 方法名 | 类 | 含义 |
|---|---|---|
| app() | AbstractPlatform | 读取JtApp应用配置。 |
| database() | – | 读取数据库配置。 |
| atom(String) | – | 根据传入identifier构造DataAtom模型定义。 |
| dbBuilder() | – | 「数据库」元数据构造器。 |
| dbConnection() | – | 「数据库」原生数据连接。 |
| dbDao(String) | – | 「数据库」根据identifier构造数据访问器。 |
| es() | – | 「Es」构造Es原生访问器。 |
| es(ChangeFlag,String) | – | 「Es」构造EsIndex引用。 |
| neo4j() | – | 「Neo4j」构造Neo4j原生访问器。 |
| neo4P() | – | 「Neo4j」构造Neo4j绘图仪。 |
| ioOut(String,JsonObject) | – | 输出数据写文件专用。 |
| inData | – | 读取数据文件构造QModal。 |
| inWeb | – | 读取数据文件构造QRequest。 |
下边的方法不属于测试框架,是Zero Framework原生的。
| 方法名 | 含义 | 文件格式 |
|---|---|---|
| tcAsync | 异步测试。 | x |
| logger | 记录日志专用,打印输出也用该方法。 | x |
| ioJArray | 读取数据文件,转换成JsonArray。 | JsonArray |
| ioString | 读取数据文件,转换成String。 | 任意 |
| ioBuffer | 读取数据文件,转换成Buffer。 | 二进制 |
| ioJObject | 读取数据文件,转换成JsonObject。 | JsonObject |
| ioCriteria | 读取数据文件,转换成Criteria。 | JsonObject |
| ioDatabase | 读取数据文件,转换成Database。 | JsonObject |
| ioIntegration | 读取数据文件,转换成Integration. | JsonObject |
package cn.originx.cmdb.component.dao;
import cn.originx.quiz.AbstractPlatform;
import io.vertx.ext.unit.TestContext;
import org.junit.Test;
public class DaoTc extends AbstractPlatform {
@Test
public void tcDao(final TestContext context) {
this.tcDao(context,
(model, dao) -> dao.fetchOneAsync(model.dataJ()), // 执行代码
actual -> {
// 测试结果回调
System.out.println(actual.toJson());
// test/cn.originx.cmdb.component.dao/data.json
}).accept("data.json");
}
}
package cn.originx.cmdb.migrate;
import cn.originx.migration.backup.EnvPath;
import cn.originx.quiz.AbstractMigration;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.unit.TestContext;
import io.vertx.up.eon.em.Environment;
import org.junit.Test;
public class DemoMigrateTc extends AbstractMigration {
public DemoMigrateTc() {
super(Environment.Development); // 必须提供环境信息
}
@Test
public void tcPath(final TestContext context) {
// 执行 MigrateStep ( EnvPath )
final JsonObject params = this.ioJObject("input.json");
this.tcAsync(context, this.tcStep(EnvPath.class, params), actual -> {
System.out.println("Environment!");
});
}
}
package cn.originx.cmdb.shell;
import cn.originx.quiz.AbstractCommand;
import io.vertx.ext.unit.TestContext;
import org.junit.Test;
public class DemoCommandTc extends AbstractCommand {
@Test
public void tcCommand(final TestContext context) {
this.tcRun(context, "d,p");
}
}
参数语法:
<subsystem>,<command>
<subsystem>为子系统名
<command>为命令名
package cn.originx.ddi;
import cn.originx.quiz.AbstractChannel;
import io.vertx.ext.unit.TestContext;
import org.junit.Test;
public class JobTc extends AbstractChannel {
@Test
public void testTc(final TestContext context) {
this.tcAsync(context, this.tcJob("ddi-sync.rng.once"), actual -> {
System.out.println(actual);
});
}
}
参数语法:
code。method + uri(近似于HTTP请求格式)。