Behave Python如何创建独立变量文件作为测试输入参数替代命令行定义
解决方案
方案1:使用behave原生配置文件 behave.ini
这是最简便的原生支持方案,你可以把通用固定参数写在配置文件里,差异化参数按需调整:
首先在项目根目录新建behave.ini文件,内容如下:
[behave] define = ip=1.2.3.4 define = user= define = password= define = host=2.3.4.5 define = host_username=root define = host_password=pass1234 define = slot=2
之后运行测试的时候,只需要传差异化的参数和要执行的feature即可:
运行myfeat0.feature的命令:
python -m behave -D endpoint=0x41 -D adapter_fam=adapt1 -i "myfeat0.feature"
运行myfeat1.feature的命令:
python -m behave -D endpoint=0x51 -D adapter_fam=adapt2 -i "myfeat1.feature"
注:命令行传入的-D参数优先级高于配置文件的参数,同名字段会覆盖配置文件的值,适合复用通用参数的场景
方案2:全量参数存自定义变量文件(适合多套环境切换场景)
如果你需要多套参数配置来回切换,可以结合behave的environment.py钩子实现自定义配置文件加载:
- 首先在项目根目录新建配置文件夹
configs/,存放不同的参数配置文件,比如feat0_config.json:
{ "ip": "1.2.3.4", "user": "", "password": "", "endpoint": "0x41", "host": "2.3.4.5", "host_username": "root", "host_password": "pass1234", "slot": 2, "adapter_fam": "adapt1" }
同理新建feat1_config.json存放myfeat1对应的参数。
2. 编辑项目根目录的environment.py(没有就新建),添加启动时加载配置的逻辑:
import json import os def before_all(context): # 读取命令行传入的配置文件路径参数 config_path = context.config.userdata.get("config") if not config_path or not os.path.exists(config_path): raise ValueError("请通过 -D config=xxx.json 指定有效配置文件") # 加载配置文件中的所有参数到context.userdata with open(config_path, encoding="utf-8") as f: config_data = json.load(f) for k, v in config_data.items(): context.config.userdata[k] = v
- 之后运行测试的命令简化为:
运行myfeat0.feature:
python -m behave -D config=configs/feat0_config.json -i "myfeat0.feature"
运行myfeat1.feature:
python -m behave -D config=configs/feat1_config.json -i "myfeat1.feature"
如果你想连feature路径也存在配置里,可以再在钩子逻辑里添加修改include_re的逻辑,实现只传配置文件就自动跑对应feature。
方案3:用shell alias/批处理封装(适合固定运行场景)
如果是本地临时测试不想改代码/配置,也可以直接把命令封装成shell别名或者批处理脚本,比如Linux/macOS下在.bashrc/.zshrc里加:
alias run_feat0='python -m behave -D ip=1.2.3.4 -D user= -D password= -D endpoint=0x41 -D host=2.3.4.5 -D host_username=root -D host_password=pass1234 -D slot=2 -D adapter_fam=adapt1 -i "myfeat0.feature"' alias run_feat1='python -m behave -D ip=1.2.3.4 -D user= -D password= -D endpoint=0x51 -D host=2.3.4.5 -D host_username=root -D host_password=pass1234 -D slot=2 -D adapter_fam=adapt2 -i "myfeat1.feature"'
之后直接终端输入run_feat0就可以执行对应测试。
内容的提问来源于stack exchange,提问作者J T
相关产品推荐
相关产品推荐

