You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:15:28