122. 精读《robot 源码 - 有限状态机》


1 概述

本期精读的是有限状态机管理工具 robot 源码。

有限状态机是指有限个数的状态之间相互切换的数学模型,在业务与游戏开发中有限状态都很常见,包括发请求也是一种有限状态机的模型。

笔者将在简介中介绍这个库的使用方式,在精读中介绍实现原理,最后总结在业务中使用的价值。

2 简介

这个库的核心就是利用 createMachine 创建一个有限状态机:

import { createMachine, state, transition } from 'robot3';

const machine = createMachine({
inactive: state(
transition('toggle', 'active')
),
active: state(
transition('toggle', 'inactive')
)
});

export default machine;

如上图所示,我们创建了一个有限状态机 machine,包含了两种状态:inactive 与 active,并且可以通过 toggle 动作在两种状态间做切换。

与 React 结合则有 react-robot:

import { useMachine } from 'react-robot';
import React from 'react';
import machine from './machine'

function App() {
const [current, send] = useMachine(machine);

return (
<button type="button" onClick={ () => send('toggle')}>
State: { current.name}
</button>
)
}

通过 useMachine 拿到的 current.name 表示当前状态值,send 用来发送改变状态的指令。

至于为什么要用有限状态机管理工具,官方文档举了个例子 - 点击编辑后进入编辑态,点击保存后返回原始状态的例子:

640?wx_fmt=png

点击 Edit 按钮后,将进入下图的状态,点击 Save 后如果输入的内容校验通过保存后再回到初始状态:

640?wx_fmt=png

如果不用有限状态机,我们首先会创建两个变量存储是否处于编辑态,以及当前输入文本是什么:

let editMode = false;
let title = '';

如果再考虑和后端的交互,就会增加三个状态 - 保存中、校验、保存是否成功:

let editMode = false;
let title =
根据你提供的批处理文件内容以及错误信息,问题出在合并测试报告时,原因是合并的输出包含不同的根测试套件。 在你的批处理文件中,你分别执行了三个测试套件,并将它们的输出分别保存为`output1.xml`、`output2.xml`和`output3.xml`。然后你使用`rebot`命令合并这些输出文件生成最终的测试报告。 然而,错误信息提示无法合并包含不同根测试套件的输出。具体来说,原始测试套件是'Goodlistsuite',而被合并的是'Singalgoodcombi'。 要解决这个问题,你需要确保合并的输出文件具有相同的根测试套件。可以通过以下方式进行修改: 1. 检查测试套件文件中的根测试套件名称,确保它们的名称相同。 2. 确保`Goodlistsuite.robot`、`Singalgoodcombi.robot`和`Goodgroupsuite.robot`文件中的根测试套件名称相同。 3. 在执行`robot`命令时,使用`--name`选项为每个测试套件指定一个相同的根测试套件名称。 例如: ```bat @echo off set ROBOT_REPORT_DIR=reports robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output1.xml "Goodmanage\Goodlistsuite.robot" robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output2.xml "Goodmanage\Singalgoodcombi.robot" robot --outputdir %ROBOT_REPORT_DIR% --variablefile "variables.py" --name "MyRootSuite" --test test_* --output output3.xml "Goodmanage\Goodgroupsuite.robot" rebot --outputdir %ROBOT_REPORT_DIR% --output final_report.html --merge %ROBOT_REPORT_DIR%\output1.xml %ROBOT_REPORT_DIR%\output2.xml %ROBOT_REPORT_DIR%\output3.xml ``` 请确保在执行`robot`命令时,将`--name`选项的值设置为相同的根测试套件名称。然后使用`rebot`命令合并输出文件生成最终的测试报告。这样应该可以解决合并输出文件时出现不同根测试套件的问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值