如何监视 linux 二进制文件以测试 shell 脚本
how to spy on linux binaries for testing of shell scripts
抱歉,如果这是重复的,我不知道要搜索什么...
我的用例比较复杂,但可以缩小为以下问题:
我想 运行 一个 bash 脚本,它调用各种二进制文件,例如:grep。
我想断言二进制文件是用正确的参数调用的。
这些断言应该是自动化测试的一部分,我不想手动开始检查。
这应该进入 ci 循环。
是否有一些标准的方法可以做到这一点?
如果没有,我想移动所有我想断言的二进制文件,用一个间谍替换它们,这个间谍首先记录参数,然后调用原始二进制文件,最后删除自身和 return 原始二进制文件。
这可行吗?有没有更好的方法来解决这个问题?
只是一个想法,我在任何地方都没有看到这个但是:
除非您使用完整路径来调用这些二进制文件,否则您可以创建这些库的模拟,例如,在您的项目 bin/
目录中,并使该目录成为您 $PATH
中的第一个目录.
export PATH="$PWD/bin:$PATH"
例如,要模拟 grep
,您可以这样做:
增加计数的辅助可执行文件:
#!/bin/bash
#Usage: increment FILE_WITH_A_NUMBER
touch "" #To create it if it doesn't exist
NTIMES=$(( $(cat "") + 1 ))
echo "$NTIMES" > ""
模拟模板(在 bin/grep 中):
#!/bin/bash
increment ${BASH_SOURCE[0]}.log #=> bin/grep.log
#Possibly do some other stuff, such as log parameters
#Return a mocked result
echo "fake match"
#Or delegate to the real thing:
exec /usr/bin/grep "$@"
抱歉,如果这是重复的,我不知道要搜索什么...
我的用例比较复杂,但可以缩小为以下问题:
我想 运行 一个 bash 脚本,它调用各种二进制文件,例如:grep。 我想断言二进制文件是用正确的参数调用的。 这些断言应该是自动化测试的一部分,我不想手动开始检查。 这应该进入 ci 循环。
是否有一些标准的方法可以做到这一点?
如果没有,我想移动所有我想断言的二进制文件,用一个间谍替换它们,这个间谍首先记录参数,然后调用原始二进制文件,最后删除自身和 return 原始二进制文件。
这可行吗?有没有更好的方法来解决这个问题?
只是一个想法,我在任何地方都没有看到这个但是:
除非您使用完整路径来调用这些二进制文件,否则您可以创建这些库的模拟,例如,在您的项目 bin/
目录中,并使该目录成为您 $PATH
中的第一个目录.
export PATH="$PWD/bin:$PATH"
例如,要模拟 grep
,您可以这样做:
增加计数的辅助可执行文件:
#!/bin/bash
#Usage: increment FILE_WITH_A_NUMBER
touch "" #To create it if it doesn't exist
NTIMES=$(( $(cat "") + 1 ))
echo "$NTIMES" > ""
模拟模板(在 bin/grep 中):
#!/bin/bash
increment ${BASH_SOURCE[0]}.log #=> bin/grep.log
#Possibly do some other stuff, such as log parameters
#Return a mocked result
echo "fake match"
#Or delegate to the real thing:
exec /usr/bin/grep "$@"