天行有常,不为尧存,不为桀亡。——荀子《天论》
新版测试框架位于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请求格式)。