Robot Framework脚本执行期动态修改变量不生效问题咨询
问题原因
Robot Framework 会在测试启动的初始化阶段,一次性加载所有在*** Settings ***块中通过Variables引入的变量文件到内存中,测试执行过程中不会自动重新读取磁盘上的变量文件。你在Sleep阶段修改本地OTP.py的操作,只会改动磁盘上的文件,不会同步更新已经加载到测试执行上下文内存里的${otp}值,所以脚本永远会读取到启动时加载的初始值12345。
可行实现方案
方案1:保留你改文件的操作习惯,动态加载变量文件
删掉Settings里提前引入OTP.py的配置,在Sleep等待结束、需要输入OTP的前一步,用内置关键字Import Variables运行时动态读取变量文件,这时候读到的就是你刚修改完的新值。
修改后的test.robot代码如下:
*** Settings *** # 移除原有的 Variables OTP.py 配置,不在启动时加载 *** Test Cases *** Open Application Open Application Enter OTP Sleep 5 # 等待你手动修改完OTP.py后,执行到这步才会读取文件中的最新值 Import Variables OTP.py Input Text textbox ${otp}
这个方案和你原本的操作逻辑完全兼容,只需要调整变量加载的位置即可。
方案2:改用交互输入,省去修改文件的步骤
用Robot Framework自带的Dialogs标准库,执行到OTP步骤时弹出输入框,你手动填入当前收到的OTP值后脚本自动继续执行,不用来回切编辑器改文件。
示例代码:
*** Settings *** Library Dialogs # 引入自带的对话框库,无需额外安装 *** Test Cases *** Open Application Open Application Enter OTP # 弹出输入提示框,输入完成后值存入${otp}变量 ${otp} = Get Value From User 请输入当前收到的6位OTP验证码 Input Text textbox ${otp}
方案3:全自动生成OTP(适合能拿到OTP种子密钥的场景)
如果你手里有OTP校验用的种子密钥,可以直接接入pyotp库在脚本运行时自动生成当前时间窗口有效的OTP值,完全不需要人工操作。
示例代码片段:
*** Settings *** Library pyotp *** Test Cases *** Enter OTP ${totp} = pyotp.TOTP 你的OTP种子密钥 ${current_otp} = ${totp.now()} Input Text textbox ${current_otp}
内容的提问来源于stack exchange,提问作者SuicidalCat
相关产品推荐
相关产品推荐

