跳至主要內容

🐼 基础组件

失败女神大约 9 分钟用例编写

rule 用例

rule 代表用例流程一个用例文件中 rule 必须为根标签,并且一个用例文件只能存在一个 rule 组件

参数

参数名称唯一必填可选值说明
code用例编码如果编码不唯一
会出现启动失败,切记
name用例名称建议唯一
model用例模式flow目前用例仅支持 flow 流模式
<?xml version="1.0" encoding="UTF-8"?>
<rule code = "DEMO_HTTP" name = "HTTP测试" model="flow"></rule>

这个配置我们可以解释为:定义了一个 HTTP 测试的用例 编码是 DEMO_HTTP,采用 flow 模式运行

子组件

子组件就是 rule组件中内部还可以有哪些组件标签
组件名称必选
params用例级参数
metaClasses用例级元对象
actions用例级行为
flows用例流程列表
<rule code = "xlr" name = "xlr测试" model="flow">
    <params></params>
    <metaClasses></metaClasses>
    <actions></actions>
    <flows></flows>
</rule>

param 参数声明

参数名称唯一是否必填可选值说明
code型参编码编码需要在参数组内唯一
name型参名称建议唯一
dataType数据类型metaClasses
complex列表维度metaClasses
necessary是否必传true
false 默认
data默认值formula 表达式

参数组

参数组就是这样的一个结构,他的作用时声明变量充当型参

<params>
    <param code="a" name = "变量a" dataType="NUMBER" complex="0" necessary="true"/>
    <param code="b" name = "变量b" dataType="NUMBER" complex="0" necessary="true"/>
</params>

型参

型实参是个开发用语,以下边的例子:add 方法声明中的 a 和 b 就叫做型参,在第 4 行调用的时候 1 和 2 就是实参

public int add(int a,int b){
    return a+b;
}
add(1,2);

flow 流程

flow 是流程组件,表示在一个用例中 若干个流程,不同流程会顺序执行,不同流程中参数是隔离的。

参数名称唯一必填可选值说明
code流程编码流程组内必须唯一
name流程名称流程组内建议唯一

流程组

流程组就是这样的一个结构

<flows>
    <flow code = "RU001G1" name="流程1"></flow >
</flows>

子组件

组件名称必选
executes执行步骤

action 行为

参数名称唯一必填可选值说明
code行为编码组必须唯一
name行为名称组内建议唯一
type能力类型能力标识
dataType返回值数据类型数据类型基础阶段建议 只使用 STRING 字符串、NUMBER 数值
complex返回值列表维度数据类型很重要注意 🔔 🔔 🔔 🔔 🔔 🔔

🔔 🔔 🔔 🔔 🔔 🔔

action 组件中的 complex 很重要,你要很清楚的明确当前 action 的响应值是不是列表,列表设置 complex = 1

子组件

组件名称必选说明
params行为级参数
mappings映射器
bound动态字符串SQL,APP,HTTP 必选

流程组

流程组就是这样的一个结构

<actions>
    <action></action >
</actions>

action 的全局配置移步全局配置

execute 执行步骤

基础参数

所有的execute均可以配置
参数名称唯一必填可选值说明
code步骤编码组件内必须唯一
name步骤名称组件内建议唯一
init是否接受返回值true 默认
false
如果关闭接收则没有办法在后续获取执行行为的返回值了
actionCode调用行为编码actionCode 必填且必须存在 判定存在规则
block异常阻断true
false 默认
配置如果发生技术异常 或不满足组件规则时,该行为的后续行为还要不要执行,例如下单都发生异常了也就没必要检查订单信息是否正确了

SQL ,SQL_BEGIN ,SQL_COMMIT 扩展参数

当被执行的行为属于 SQL,SQL_Begin,SQL_commit 能力类型的 可以在基础参数之上扩展一下参数

参数名称默认值说明
conKey事务标识如果没有指定,默认为步骤编码因为完整 DMI 操作只设计到一个事务所以需要指定同一个 conKey,要是多个事务指定多个就好了

sleep 扩展参数

当被执行的行为属于 sleep 能力类型的 可以在基础参数之上扩展一下参数

参数名称默认值说明
sleepTime停顿时间如果没有指定,默认 1000时间单位为毫秒

步骤组是不存在的

步骤组就是flow 组件

子组件

组件名称必选说明
injects实参传递action声明参数必传时必选
checkItem检查项CHECK 必选参考如何测试下单接口 。 的 stp5 校验信息你可以声明多个

injects 实参传递

如何测试下单接口 中 stp2 下单返回的合同号要被传递到 stp4 下单后-查询订单信息调用 作为查询 test_order 的合同号时我们就已经在用参数传递了

在这里行为中我们声明型参 orderNo 单号

<action code="loadOrder" name="查询订单信息" type="SQL" dataType="MAP">
    <params>
        <param code="orderCode" name="订单单号" dataType="STRING"/>
    </params>
    <bound>
        SELECT * FROM test_order where code = '${orderCode}'
    </bound>
</action>

那么我们需要在调用这个行为的时候传递 orderCode 的值为 ${stp2.data.data.code} 代表 第二步调用 HTTP 下单返回的合同号。为什么如此表示

<execute code="stp4" name="下单后-查询订单信息" actionCode="loadOrder">
    <injects>
        <inject code="orderCode" data="${stp2.data.data.code}"/>
    </injects>
</execute>

expression 运算表达式

expression 就是操作符,目前阶段只需要掌握简单的用法,有两种模式

逻辑运算

我们常说的 与、或的就属于逻辑运算

参数名称必填可选值说明
expressionType类型logic
operationCode逻辑运算and
or

逻辑运算-组件

组件名称必选
subExpressions子运算符
<expression expressionType ="logic" operationCode="and" >
    <subExpressions>
        ....
    </subExpressions>
</expression>

关系运算

我们常说的 大于、小于、等于之类的就属于关系运算符

关系运算我们可以抽象为 A opention B 的形式。参考数学中 被除数 / 除数 的形式我们称 A 为被比较的阈值,B 为阈值。

参数名称必填可选值说明
expressionType类型relation=
operationCode关系运算符关系运算符
cover被比较的阀值formula 表达式
coverComplex被比较的阀值列表维度默认 0
threshold阀值formula 表达式
thresholdComplex阀值列表维度默认 0
dataType数据类型数据类型基础阶段建议 只使用 STRING 字符串、NUMBER 数值

mapping 映射器

如果你是一名 JAVA 开发并且学习过 mybatis,那你一定对这个概念不陌生。mapping 映射器的功能也类似,主要解决参数映射的问题。我们调用能力的返回值与我们要用到变量名称的不同则可以通过 mapping 映射器组件解决

参数名称唯一必填说明
code源编码
result目标编码

例如 源数据

{
  "buy_frozen_amt": 1000,
  "sell_frozen_amt": 2000,
  "usable_amt": 3000
}

配置映射器

<mappings>
    <mapping code="buy_frozen_amt" result="buyFrozenAmt"/>
    <mapping code="sell_frozen_amt" result="sellFrozenAmt"/>
    <mapping code="usable_amt" result="usableAmt"/>
</mappings>

通过转译后

{
  "buyFrozenAmt": 1000,
  "sellFrozenAmt": 2000,
  "usableAmt": 3000
}

formula 操作数基础

  • TestHub 中内置了 3 种基础操作数
    • DataNode 表示固定值,是有配置人员手动指定的, 例如:xxxx
    • PathNode 表示变量值,可以基于 jsonPath 的写法从决策上下文中获取指定的变量值,标识为$
    • FuncNode 表示方法型函数的调用,标识为%{方法名(形参 1:操作数,......)

基础阶段我们掌握 DataNode 和 PathNode 就可以了,深度学习移步操作数

data="root"中的 我们写死的 root 其实就是 DataNode 类型的操作数

<param code="password" name = "密码" dataType="STRING" data="root"/>

bound 动态字符串基础

bound 的作用就是构建字符串,比如用于SQL 生成 sql 语句、

bound 的底层采用 Freemarker 模板引擎支持所有 Freemarkeropen in new window 的语法规则

目前阶段我们需要掌握最简单的用法就可以了

例入:acctId = 960307

需要组装一个 sql 字符串 acctId 占位符会替换是取的由执行用例时传入的 acctId 参数的真实值

<bound >
     SELECT * FROM test_account where id = '${acctId}'
</bound>

生成的 sql

<bound >
     SELECT * FROM test_account where id = '960307'
</bound>

生成的字符串中包含占位符的,组装一个 sql 字符串 ,需要组装的 sql 如下

    SELECT * FROM test_account where id = '${acctId}'

则需要 通过 CDATA 转译

<bound >
    <![CDATA[
            SELECT * FROM test_account where id = '${acctId}'
        ]]>
</bound>

生成的字符串中包含存在 xml 或者 Freemarker 语法标签的 比如用于HTTP 中也需要通过 CDATA 转译

<bound>
    <![CDATA[<acctId>960703</acctId>
            <orderPrice>1.8</orderPrice>
            <orderQty>100</orderQty>
    ]]>
</bound>
上次编辑于:
贡献者: 崔胜利