跳至主要內容

全局配置

失败女神大约 6 分钟使用指南

🤔 为什么会有全局配置,全局配置又是什么❓
在测试用例在执行过程中的,会用到参数、行为等组件,针对这些组件的覆盖策略TestHub内置了六种级别:系统级、项目级、环境级、用例(规则级)、流程级、行为级。
全局配置,特指:系统、项目、环境 三个级别,均在组件库的使用 中设置

//见类定义
org.dromara.testhub.server.core.rule.Constant.OwnerType

1、系统级 整个系统都生效
2、项目级 项目中生效,一个系统中支持配置多个项目
3、环境级 一个项目下支持配置多个环境
4、用例级 一个项目下支持配置多个测试用例
5、流程级 一个用例中配置配置多个流程

参数声明

支持 :环境级、用例(规则级)、行为级

环境级

🤔 为什么要有环境级的参数声明?

例如在测试过程中我们经常需要在开发环境测试、然后再到发布测试环境测试,两者采用同样的测试用例只不过 两次被测试的服务地址不同那我们就可以使用环境级别的参数声明

用例级

🤔 为什么要有用例级的参数声明?

例如执行一个测试用例,我们每次执行可能采用不同的初始值
我们已经在基础 DEMO 中用到了

例如 CHECK-断言校验 中我们在用例子的 < rule >根标签下直接声明了变量 a、变量 b、变量 c

<?xml version="1.0" encoding="UTF-8"?>
<rule code="DEMO_Check" name="测试Check校验数据" model="flow">
    <params>
        <param code="a" name="变量a" dataType="NUMBER" data="1002"/>
        <param code="b" name="变量b" dataType="NUMBER" data="1002"/>
        <param code="c" name="变量c" dataType="NUMBER" data="100"/>
    </params>

</rule>

行为级

🤔 为什么要有行为级的参数声明可以做什么?
例如SQL-执行查询类 如果我们使用用例级参数声明、那么在一次测试用例的运行中就只能链接一个数据库。

如果我们要在一个测试用例中同时链接多个数据库怎么办?这时就用到行为级参数声明了!!!其中necessary和data参考
<a href="#param声明规则">param声明规则</a>
<?xml version="1.0" encoding="UTF-8"?>
<rule code = "DEMO_SQL2" name = "行为级参数声明" model="flow">
    <params>
        <param code="acctid" name = "资金账号" dataType="STRING" data="001304736720"/>
        <param code="exchid" name = "市场ID" dataType="STRING" data="1" />
    </params>

    <actions>
        <action code ="loadMysql" name = "查询资金账号" type = "SQL" dataType="MAP">
            <params>
                <param code="url" name = "数据库地址" dataType="STRING" complex="0" data="jdbc:mysql://127.0.0.1:3306/spring-boot-demo"/>
                <param code="driver" name = "驱动" dataType="STRING" complex="0" data="com.mysql.cj.jdbc.Driver"/>
                <param code="username" name = "用户" dataType="STRING" complex="0" data="root"/>
                <param code="password" name = "密码" dataType="STRING" complex="0" data="root"/>
            </params>
            <bound>
                select * from account where acctid = '${acctid}' and exchid = '${exchid}'
            </bound>
        </action>
         <action code ="loadOracle" name = "查询资金账号" type = "SQL" dataType="MAP">
            <params>
                <param code="url" name = "数据库地址" dataType="STRING" complex="0" data="jdbc:oracle:thin:@172.20.0.7:1521/ctsdb"/>
                <param code="driver" name = "驱动" dataType="STRING" complex="0" data="oracle.jdbc.driver.OracleDriver"/>
                <param code="username" name = "用户" dataType="STRING" complex="0" data="********"/>
                <param code="password" name = "密码" dataType="STRING" complex="0" data="********"/>
            </params>
            <bound>
                select * from account where acctid = '${acctid}' and exchid = '${exchid}'
            </bound>
        </action>
    </actions>
    <flows>
        <flow code = "RU001G1" >
            <execute code="stp1" name="查询Mysql资金账户" actionCode="loadMysql"/>
            <execute code="stp2" name="查询Oracle资金账号" actionCode="loadOracle"/>
        </flow>
    </flows>
</rule>

参数传递

执行到行为的传参学习完行为级参数声明观察 在不同数据库执行相同的 sql 语句我们需要声明两个行为,这是勉强可以接受的,但是面对一下场景就实在难以接受了:
例如在如何测试下单接口 我们需要第二步需要下单、第四步要根据 下单的单号进行查询数据库里的订单信息

在 loadOrder 行为中 声明编码 orderCode

<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>

在 stp4 查询 test_order 信息 获取 第二步 的合同号 传递到 loadOrder 行为的 orderCode 参数声明中

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

行为声明

支持 :系统级、项目级、用例级

用例级

在用例文件 rule->actions 中声明的 就是用例级行为
例如loadMysql查询资金账号、loadOracle查询资金账号

<?xml version="1.0" encoding="UTF-8"?>
<rule code = "DEMO_SQL2" name = "行为级参数声明" model="flow">
    <actions>
        <action code ="loadMysql" name = "查询资金账号" type = "SQL" dataType="MAP">
            <params>
                <param code="url" name = "数据库地址" dataType="STRING" complex="0" data="jdbc:mysql://127.0.0.1:3306/spring-boot-demo"/>
                <param code="driver" name = "驱动" dataType="STRING" complex="0" data="com.mysql.cj.jdbc.Driver"/>
                <param code="username" name = "用户" dataType="STRING" complex="0" data="root"/>
                <param code="password" name = "密码" dataType="STRING" complex="0" data="root"/>
            </params>
            <bound>
                select * from account where acctid = '${acctid}' and exchid = '${exchid}'
            </bound>
        </action>
         <action code ="loadOracle" name = "查询资金账号" type = "SQL" dataType="MAP">
            <params>
                <param code="url" name = "数据库地址" dataType="STRING" complex="0" data="jdbc:oracle:thin:@172.20.0.7:1521/ctsdb"/>
                <param code="driver" name = "驱动" dataType="STRING" complex="0" data="oracle.jdbc.driver.OracleDriver"/>
                <param code="username" name = "用户" dataType="STRING" complex="0" data="********"/>
                <param code="password" name = "密码" dataType="STRING" complex="0" data="********"/>
            </params>
            <bound>
                select * from account where acctid = '${acctid}' and exchid = '${exchid}'
            </bound>
        </action>
    </actions>
</rule>

系统级

🤔理论上我们每步 execute 执行的 actionCode 的编码都是要在用例文件 rule->actions 中声明的 但是sleep 暂停休息 中的 sleep 为什么不需要声明呢?
这是因为我们为您已经为您配置了系统级行为sleep
目前系统级行为只能通过系统管理员在数据库中以脚本的方式添加

<?xml version="1.0" encoding="UTF-8"?>
<rule code="DEMO_Sleep" name="sleep休息X秒" model="flow">
    <flows>
        <flow code="RU001G1" name="sleep休息1秒">
            <execute code="stp6" name="休息1秒" actionCode="sleep" sleepTime="1000"/>
        </flow>
    </flows>
</rule>


默认系统级行为

编码名称
sleep休眠
check校验
checkObj校验对象

项目级

如果您也有需要配置项目级别全局的 action 你可以创建组件库的使用 ,那么你在当前项目中任何一个测试用例中都可以用到了

内置的默认项目配置了默认级行为

编码名称
begin事务开启
commit事务提交
上次编辑于:
贡献者: 崔胜利