Closed ivanych closed 8 years ago
в силу всего выше сказанного я бы предложил так:
swat [--host host] [ --path path ] [/path/to/root] [host]
--path
задает поддиректорияю внутри root, для запуска только части тестов--host
, либо читается из файла /root/host Что думаешь?
name - это каталоги с тестами внутри проекта. Пусть будет dir, чтобы не путаться. Обрати внимание - не один каталог, а произвольное количество. Именно поэтому name должны идти в конце всей команды и дополняться tab'ом, как во всех командах, работающих с файлами, типа cp.
Можно принять волевое решение и считать, что корень всегда равен текущему каталогу. Гит же именно так делает, чем сват хуже:) Так ли уж необходимо запускать проект, находящийся не в текущем каталоге, а где-то в другом месте файловой системы? Думаю, не так уж необходимо.
Но если необходимо - ок, пусть задается опцией --root.
Тогда:
swat [--host host] [--root root] [dir ...]
Можно принять волевое решение и считать, что корень всегда равен текущему каталогу. Гит же именно так делает, чем сват хуже:)
Михаил, понял тебя. Подумаю над этой идей, тут могут быть плюсы и минусы
Вот мои мысли. 1) форсировать корень проекта к текущей директории удобно для одних случаев, и не удобно для других, поэтому я бы в этом смыле оставил текущее поведение
2) корень проекта хочется всегда передавать как неименнованный параметр
swat /path/to/root
ну или если он не задан, то считем, что root == cwd
Ввводить отдельно опцию --root я бы не стал, зачем? пока не очень понятно, всегда можно указать путь к руту как есть - /path/to/root , не использую для этого специальную опцию --root
3) кейс с избирательным запуском тестов, заданных поддиректорией мне понятен, насколько тебе критично, что бы таких поддеректорий было несколько? Можешь в двух словах пояснить зачем тебе это? Спрашиваю, потому что в текущей архитектуре скрипта это сложно реализуемо. Swat генерит набор тестовых файлов, складывает в отдельную директорию, а потом запускает prove -r передав ему на вход эту директорию, prove умеет выполнять либо все ( всю директорию ), либо отдельный путь - подкаталог или файл из этой директории, но не может оперировать сразу с несколькими путями или файлами , можно конечно запускать prove для каждого пути, директории выборочного , но это будет означать что фактически запускают сразу несколько разный тестовых наборов и для каждого prove будет генерить свой отчет, что наверное не очень хорошо ....
Фиксировать корень к текущему каталогу не-обязательно намертво. Я ж говорю - можно сделать опцией, при необходимости указать корень, отличный от текущего каталога, достаточно будет указать его в опции.
Указывать корень как аргумент, а не как опцию, нельзя, потому что это будет мешать указывать каталоги тестов без указания корня (когда корень равен текущему каталогу).
Указание нескольких каталогов с тестами мне очень нужно. Пример: первый метод создает некую сущность, второй метод читает эту сущность. Нужно проверить оба метода, в связке. Я не могу положить оба теста в один каталог, каждый из них может быть вызван в связке и с другими тестами.
Ну т.е. я могу вызвать оба теста по отдельности, дважды запустив сват, но это неудобно, потому что есть медленные методы, нужно ждать завершения... А так набил tab'ом несколько каталогов - и пошел за кофе:)
Указание нескольких каталогов с тестами мне очень нужно. Пример: первый метод создает некую сущность, второй метод читает эту сущность. Нужно проверить оба метода, в связке.
т.е. предполагается, что второй метод (тест) не отработает , если перед ним не отработает первый метод ( тест ), так или я неправильно понял?
Нет, это я неудачно пример привел. Просто два любых теста, которые нужно проверить. Ну, допустим, модуль я поправил на сервере и это влияет на оба метода.
А понял.
Ок, надо посмотреть, возможно я и ошибаюсь насчет того, что prove не умеет на вход принимать несколько путей, если умеет, то, то, что ты говоришь сделать реально, только я был все равно еще структуру входных параметров утрясти , завтра отпишу думаю
Почитал документацию по prove, оказывается от умеет работать с нескольки путями сразу. То, что ты просил реализова, обновись с гитхаба, см. описание новых натсроек https://github.com/melezhik/swat#swat-client. Тепреь есть -t, или --test что бы задавать тестовые наборы, их может быть несколько, --root решил не вводить, оставил старую схему, мне кажется она более интутивно понятная и подходит под большинство сцерариев использования. Да и настройки для prove теперь передаются явно, через --prove, пришлось пойти на это, что бы отделить их от остальных настроек
Это не то:(
Конечно, возможность задать несколько тестов - это хорошо. Но главная моя идея - тесты должны задаваться в конце, как аргументы, и дополняться tab'ом.
Я, походу, понимаю, почему тебе твой вариант нравится больше. Ты, видимо, используешь сват как сисадмин, для тестирования кучи сервисов, поэтому тебе в конце нужно часто менять хост, а тесты менять надо редко.
А я использую как разработчик, для тестирования одного сервиса, я хост вообще не меняю. А вот тесты я меняю постоянно и пачками. Мне их через опции задавать крайне неудобно.
Может, сделать параллельную утилиту, swat-dev, с "моим" интерфейсом?
Или во, можно так сформулировать: у меня основной единицей использования является отдельный тест, а не проект целиком. Запуск проекта целиком - это у меня целое событие, мне это надо редко. А вот запуск отдельного теста/тестов - это основной сценарий.
Поэтому мне нужно, чтобы интерфейс команды вертелся вокруг тестов с минимальными телодвижениями, а всё остальное можно было задать как-нибудь, через опции.
Михаил, я тебя понимаю, но если честно не вижу в чем сложность задавать набор путей через
-t path1 -t path2 -t pathN
?
здесь точно также работает tab дополение, тебе просто нужно на каждый путь набирать один раз -t , это сложно?
При всем при том, если у тебя настроен host файл и ты находишься внутри корневой директории с тестами,все что тебе нужно это запустить:
swat -t path1 -t path2 -t path3
Ни хоста, ни проекта указывать не требуется
Та схема, которую ты предлагаешь удобная тебе но потребует введние дополнительных параметров, если кто-то захочет "обычного" использования swat:
swat project_root host
Так как в этом случае нужно будет вводить параметры --root и возможно --host, что бы отличать эти аргументы от просто набора путей , задающих группы тестов. Мы приходим к тому, что все становится сложнее, пользователи должны будут вседа по-разному указывать хост и корень взависимости от способа запуска тестов ( все целиком или выборочно ), согласись по сравнению, с тем, что ты просто набираешь на два символа в консоле (-t) - это неоправданное усложнение?
То есть я конечно за гибкость, но не в ущерб простоте. Вот что я пытаюсь сказать.
Но ведь --root и --host, даже если их задавать, нужно написать только один раз. А вот -t придется писать много раз. И стирать тоже много раз.
При этом, я уверен, в большинстве случаев запуск будет делаться из текущего каталога, поэтому --root, скорее всего, писать нужно будет очень редко.
Остается --host. Но даже --host нужно написать только один раз, потому что меняется потом только значение этой опции, а саму опцию писать не надо, она уже есть в хистори.
Поэтому мне кажется, что проще получается именно в случае, когда тесты являются аргументами, а всё остальное - опциями.
Ну и вот ещё такой аргумент:)
Это же классический юникс-стайл, когда аргументами являются файлы. Пример на перле:
perl -e '@file=<>; print @file' test.txt
Перл по умолчанию считает, что аргумент - файл.
Ok, а вариант
swat --test-group path1 path2 path3 ...
как компромиссный ?
Да, это хороший вариант. Теоретически всё-равно неправильно, но практически - полностью решает все мои проблемы:)
А суффикс -group вроде бы и не нужен, пусть просто --test будет.
Я предложил --test-group
, потому что --test
или -t
задают одиночный path, а --test-group
может задавать больше чем один path.
Это особенности реализации, мне так проще будет внедрить эту фичу. А вариант с -t,--test
я бы тоже оставил, он хорошо читается
Теоретически всё-равно неправильно
Почему?
Я предложил --test-group , потому что --test или -t задают одиночный path, а --test-group может задавать больше чем один path.
Можно всегда считать, что в опции указывается список, в том числе список может иметь один элемент. Но если удобнее разделить - ок, не принципиально.
Теоретически всё-равно неправильно Почему?
Потому, что файлы должны быть аргументами:) Юникс-стайл:)
Потому, что файлы должны быть аргументами:) Юникс-стайл:)
Понял :) учту
Михаил, приветствую! Опцию --test-group решил не вводить, интерфейс такой:
-t path1 -t path2 -t path3
# или
-t path1 path2 path3
Ушло в релиз, версия 0.1.79 , или ставь из гита и проверяй, все ли так.
Я что-то потерял нить.. Вроде же были уже -t? Что изменилось?
они и остались, но теперь их можно использовать несколькими способами, swat теперь поддерживает ( в новой версии ) различные нотации:
-t foo
-t foo -t bar
-t foo bar foo/bar/baz
А, оке.
Предлагаю сделать такой интерфейс:
Где:
Такой интерфейс, на мой взгляд, гораздо удобнее текущего, в котором отдельные тесты надо указывать через переменные, да еще и корневой каталог (проект) надо указывать, если запускаешь не из него.
Кроме того, так лучше работает поиск предыдущей команды в истории командной строки.