【问题标题】:how to spy on linux binaries for testing of shell scripts如何监视 linux 二进制文件以测试 shell 脚本
【发布时间】:2015-06-16 19:06:59
【问题描述】:

对不起,如果这是重复的,我不知道要搜索什么...

我的用例比较复杂,但可以归结为以下问题:

我想运行一个 bash 脚本,它调用各种二进制文件,例如:grep。 我想断言二进制文件是用正确的参数调用的。 这些断言应该是自动化测试的一部分,我不想手动开始检查。 这应该进入 ci 循环。

有一些标准的方法吗?

如果没有,我想移动我想要断言的所有二进制文件,用间谍替换它们,该间谍首先记录参数,然后调用原始二进制文件,最后删除自身并返回原始二进制文件。

这可行吗?有没有更好的方法来解决这个问题?

【问题讨论】:

  • set -x 不够吗?
  • 如果您不想更改脚本,请像这样运行它们bash -x ./scriptname
  • 我无法更改脚本的执行方式,运行它们 -x 会告诉我应该调用二进制文件(但也许它们不在路径上,或者其他什么?)我必须从控制台解析它。并不是说这是不可能的,而是不太方便,IMO。我想开始自动化测试,让系统启动,运行它运行的任何东西,然后让测试断言我期望发生的事情发生了。
  • 我称之为wrapper。这很 hack,但你可以这样做...stackoverflow.com/a/24202568/2836621
  • @markSetchell 这正是我正在寻找的东西,我什至写了它作为解决问题的一种可能方法,我只是想知道是否有准备好的替代方案。很高兴您将此引用为可行的实现。谢谢你。如果您愿意,可以将其写为答案,我会接受。我不认为这是重复的,我认为这是具有相同解决方案的另一个用例。

标签: linux bash shell testing spy


【解决方案1】:

只是一个想法,我没有在任何地方看到这个,但是:

除非您使用完整路径来调用这些二进制文件,否则您可以创建这些库的模拟,例如,在您的项目 bin/ 目录中,并使该目录成为您的 $PATH 中的第一个目录。

export PATH="$PWD/bin:$PATH"

例如,要模拟 grep,您可以这样做:

增加计数的辅助可执行文件:

#!/bin/bash
#Usage: increment FILE_WITH_A_NUMBER
touch "$1" #To create it if it doesn't exist
NTIMES=$(( $(cat "$1") + 1 ))
echo "$NTIMES" > "$1"

模拟模板(在 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 "$@"

【讨论】:

  • 这正是我所说的,与我想实现它的方式非常相似。如果可能有一个“间谍”命令行实用程序可以自动完成所有这些,我仍然在徘徊,如果没有,我可能会写一个,因为我不想每次都手动执行此操作......
  • 当然你不应该每次都手动操作。上述解决方案完全可以编写脚本。
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2011-04-26
  • 2013-08-18
  • 2017-09-02
  • 2014-08-15
相关资源
最近更新 更多