2015-06-16 3 views
1

жаль, если это дубликат, я понятия не имел, что искать ...как шпионить Линукс бинарных файлов для тестирования скриптов оболочки

мой случай использования является более сложным, но может быть сужен до следующая проблема:

Я хочу запустить скрипт bash, который вызывает всевозможные двоичные файлы, например: grep. Я хочу утверждать, что двоичные файлы были вызваны с правильными аргументами. эти утверждения должны быть частью автоматизированного тестирования, я не хочу вручную проверять вещи. это должно идти в ци.

Есть ли какой-то стандартный способ сделать это?

Если нет, я думал о перемещении всех двоичных файлов, которые я хочу утверждать, заменить их шпионом, который сначала регистрирует аргументы, а затем вызывает исходный двоичный файл и, наконец, удаляет себя и возвращает исходный двоичный файл.

это возможно? есть ли лучший подход к проблеме?

+0

Не было бы 'set -x' будет достаточно? – Biffen

+0

Если вы не хотите изменять сценарии, запустите их так, как этот 'bash -x./Scriptname' –

+0

. Я не могу изменить способ выполнения сценариев и запускать их -x покажет мне, что двоичные файлы должны иметь (но, может быть, они не были на пути, или что-то?), и мне пришлось бы разбирать его с консоли. Это не то, что это невозможно, но это менее удобно, ИМО. Я хочу начать автоматизированный тест, загрузить систему, запустить все, что она запускает, а затем проверить, что все, что я ожидал, произошло. –

ответ

0

Просто идея, я не видел это где-нибудь, но:

Если вы не используете полные пути для вызова этих бинарных файлов, вы можете создать издевается эти библиотеки, например, в проектах 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" 

Макет шаблона (в бен/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 "[email protected]" 
+1

Это то, о чем я говорю точно, и очень похоже на то, как я думал о его реализации. Я все еще блуждаю, если, может быть, есть утилита «spy» cmdline, которая делает все это автоматически Я, вероятно, напишу, если этого не произойдет, потому что я бы не хотел делать это вручную каждый раз. , –

+0

Конечно, вы не должны делать это вручную каждый раз. Вышеупомянутое решение отлично подходит для сценариев. – PSkocik

Смежные вопросы