gpt4 book ai didi

自动测试程序输出的 Bash 脚本 - C

转载 作者:行者123 更新时间:2023-11-29 08:59:34 26 4
gpt4 key购买 nike

我是编写脚本的新手,我无法弄清楚如何开始使用 bash 脚本,该脚本将根据预期输出自动测试程序的输出。

我想编写一个 bash 脚本,它将在一组测试输入(比如 in1 in2 等)上针对相应的预期输出 out1、out2 等运行指定的可执行文件,并检查它们是否匹配。要测试的文件从 stdin 读取其输入并将其输出写入 stdout。因此在输入文件上执行测试程序将涉及 I/O 重定向。

脚本将使用一个参数调用,该参数将是要测试的可执行文件的名称。

我在进行此操作时遇到了麻烦,因此非常感谢任何帮助(指向进一步解释我如何执行此操作的任何资源的链接)。我显然已经尝试过自己搜索,但并不是很成功。

谢谢!

最佳答案

如果我得到你想要的;这可能会让你开始:

bash 与 diff 等外部工具的组合。

#!/bin/bash

# If number of arguments less then 1; print usage and exit
if [ $# -lt 1 ]; then
printf "Usage: %s <application>\n" "$0" >&2
exit 1
fi

bin="$1" # The application (from command arg)
diff="diff -iad" # Diff command, or what ever

# An array, do not have to declare it, but is supposedly faster
declare -a file_base=("file1" "file2" "file3")

# Loop the array
for file in "${file_base[@]}"; do
# Padd file_base with suffixes
file_in="$file.in" # The in file
file_out_val="$file.out" # The out file to check against
file_out_tst="$file.out.tst" # The outfile from test application

# Validate infile exists (do the same for out validate file)
if [ ! -f "$file_in" ]; then
printf "In file %s is missing\n" "$file_in"
continue;
fi
if [ ! -f "$file_out_val" ]; then
printf "Validation file %s is missing\n" "$file_out_val"
continue;
fi

printf "Testing against %s\n" "$file_in"

# Run application, redirect in file to app, and output to out file
"./$bin" < "$file_in" > "$file_out_tst"

# Execute diff
$diff "$file_out_tst" "$file_out_val"


# Check exit code from previous command (ie diff)
# We need to add this to a variable else we can't print it
# as it will be changed by the if [
# Iff not 0 then the files differ (at least with diff)
e_code=$?
if [ $e_code != 0 ]; then
printf "TEST FAIL : %d\n" "$e_code"
else
printf "TEST OK!\n"
fi

# Pause by prompt
read -p "Enter a to abort, anything else to continue: " input_data
# Iff input is "a" then abort
[ "$input_data" == "a" ] && break

done

# Clean exit with status 0
exit 0

编辑。

添加了退出代码检查;走一小段路:

这将简而言之:

  1. 检查是否给出参数(bin/application)
  2. 使用一组“基本名称”,将其循环并生成真实的文件名。
    • 即:有数组 ("file1" "file2")你得到
      • 在文件中:file1.in
      • 要验证的输出文件:file1.out
      • 输出文件:file1.out.tst
      • 在文件中:file2.in
      • ...
  3. 执行应用程序并将文件重定向到stdin<申请, 并重定向 stdout从应用程序到输出文件测试 > .
  4. 使用工具,例如 diff测试它们是否相同。
  5. 检查工具的退出/返回代码并打印消息(FAIL/OK)
  6. 提示继续。

任何和所有偏离路线的都可以修改、删除等。


一些链接:

关于自动测试程序输出的 Bash 脚本 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com