Я пытаюсь автоматически собирать данные о производительности (время загрузки и рендеринга экрана) из приложения для Android. Я использую test-runner.py
(внутренний инструмент) для создания приложения и запуска тестов перед использованием команды adb
для получения данных о производительности. Мой Баш скрипт выглядит следующим образом:tee не будет записываться в файл до тех пор, пока скрипт не завершит выполнение?
BASE_DIR=../Application/app/src/custom-feeds
CTF_DIR=../../../../ComponentTestFramework
OUTPUT_FILE=out.txt
if test -e $OUTPUT_FILE
then
rm $OUTPUT_FILE
fi
teardown()
{
cd $BASE_DIR
adb logcat -d PerformanceTest:D *:S | grep 'Loading' | tee -a $OUTPUT_FILE
adb logcat -d ActivityManager:I *:S | grep 'ContentBrowseActivity:\s+\+' | tee -a $OUTPUT_FILE
./restore.sh
}
# small sample feed
echo Testing sample feed with 10 initial items
echo size = 10 > $OUTPUT_FILE
cd $CTF_DIR
python3 test_runner.py -f $BASE_DIR/config-B-10.json
teardown
# medium sample feed
echo Testing sample feed with 100 initial items
echo size = 100 > $OUTPUT_FILE
cd $CTF_DIR
python3 test_runner.py -f $BASE_DIR/config-B-100.json
teardown
# large sample feed
echo Testing sample feed with 500 initial items
echo size = 500 > $OUTPUT_FILE
cd $CTF_DIR
python3 test_runner.py -f $BASE_DIR/config-B-500.json
teardown
# super large sample feed
echo Testing sample feed with 5000 initial items
echo size = 5000 > $OUTPUT_FILE
cd $CTF_DIR
python3 test_runner.py -f $BASE_DIR/config-B-5000.json
teardown
Когда скрипт первый запуск, данные получает записывается в выходной файл, как и ожидалось:
size = 100
Однако, ничего не будет записано, пока сценарий не закончит выполнение , Выходной файл теперь выглядит следующим образом:
size = 5000
D/PerformanceTest(1458): Loading time: 332874 ms
I/ActivityManager(1843): Displayed com.amazon.android.calypso/com.amazon.android.tv.tenfoot.ui.activities.ContentBrowseActivity: +563ms
Есть два вопроса:
- Исходные данные ("размер = 100") было написано. Этого не должно произойти из-за переключателя
-a
вtee
. - Промежуточные результаты не записываются в файл, даже если команда работает, когда я выполняю ее вне сценария.
Что я делаю неправильно?
Это не редкость для 'tee' или многих других для буферизации их вывода, поэтому он не будет писать до тех пор, пока не будет достигнуто определенное количество данных в очереди или не будет достигнут конец потока. Я не удивлюсь, если это будет происходить здесь. [См. Здесь] (http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe) для некоторых вариантов справиться с этим, если это то, что происходит здесь –
«размер = 100» не собирается через тройник. 'size = 100' перенаправляется, и перенаправление обрезает файл, отбрасывающий результаты предыдущего прогона. –
А, я вижу проблему сейчас. Спасибо за ответы. Я хотел добавить в файл, используя '>>', но написал '>' вместо этого. \ * Facepalm \ *. –