如何用Shell/Python批量生成多模式测试用例文件?
批量生成测试用例文件的简便实现方案
Shell 替代实现方式
1. printf + 循环快速生成
适合内容结构简单、需要快速输出的场景,printf的格式化输出能高效处理变量替换:
#!/bin/bash MODES=("mode1" "mode2" "mode3") for mode in "${MODES[@]}"; do for ((y=1; y<=45; y++)); do filename="${mode}_test${y}.txt" printf '%s\n' \ "# 测试用例: ${mode}_test${y}" \ "# 生成时间: $(date +%Y-%m-%d)" \ '$init' \ "source ./common/${mode}_common.sh" \ "read_test_data" \ "write_test_result" \ "source ./expected/${mode}_expected${y}.txt" > "$filename" done done
2. Here-Doc 循环生成
Here-Doc语法更直观,适合内容包含多行注释或复杂指令的场景,无需拼接字符串:
#!/bin/bash MODES=("mode1" "mode2" "mode3") for mode in "${MODES[@]}"; do for y in {1..45}; do file="${mode}_test${y}.txt" cat > "$file" <<EOF # 测试用例: ${mode}_test${y} # 功能验证: ${mode}模式下的读写操作 \$init source ./common/${mode}_common.sh # 固定测试指令序列 execute_read_op execute_write_op verify_result source ./expected/${mode}_expected${y}.txt EOF done done
Python 实现方式
1. 基础文件操作实现
Python的字符串格式化和文件操作语法简洁,适合跨平台场景,无需依赖额外工具:
#!/usr/bin/env python3 from datetime import datetime modes = ["mode1", "mode2", "mode3"] current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") for mode in modes: for y in range(1, 46): filename = f"{mode}_test{y}.txt" content = f"""# 测试用例: {mode}_test{y} # 生成时间: {current_time} $init source ./common/{mode}_common.sh # 固定读写测试指令 read_test_payload write_test_payload validate_output source ./expected/{mode}_expected{y}.txt """ with open(filename, "w") as f: f.write(content)
2. Jinja2 模板驱动生成
如果测试用例内容结构复杂、后续需要频繁调整模板,用Jinja2的模板渲染会更易维护:
首先安装依赖:pip install jinja2
#!/usr/bin/env python3 from jinja2 import Template # 定义可复用的测试用例模板 template_content = """# 测试用例: {{ mode }}_test{{ y }} # 模式类型: {{ mode }} $init source ./common/{{ mode }}_common.sh # 标准测试流程 init_test_env run_read_test run_write_test source ./expected/{{ mode }}_expected{{ y }}.txt """ template = Template(template_content) modes = ["mode1", "mode2", "mode3"] for mode in modes: for y in range(1, 46): filename = f"{mode}_test{y}.txt" rendered_content = template.render(mode=mode, y=y) with open(filename, "w") as f: f.write(rendered_content)
内容的提问来源于stack exchange,提问作者user3285014
相关产品推荐
相关产品推荐

