Определение веб-интерфейса для сервера TFS? - PullRequest
3 голосов
/ 03 февраля 2012

Я работаю с сервером TFS2010 в проекте C #.Чтобы взаимодействовать с ним, я использую нативный код C # примерно так:

    WorkItemStore WiStore = 
        TfsTeamProjectCollectionFactory.
        GetTeamProjectCollection(new Uri("http://mgtfsweb01:8080/tfs")).
        GetService<WorkItemStore>();    
    String queryStr = "Select * from Issue where (ID = " + issue + ")";
    WorkItemCollection witCollection = WiStore.Query(queryStr);

Это прекрасно работаетТем не менее, я хотел бы проверить эту функцию.Для этого я не хочу указывать это на наш производственный сервер.Вместо этого я бы хотел, чтобы временный фальшивый сервер предоставил ответы на вызов WiStore.Query().Для этого я хотел бы узнать, каково определение HTTP-интерфейса для TFS2010.Кто-нибудь знает, публикуется ли эта информация где-либо?

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Чтобы ответить на ваш вопрос напрямую, да, вы можете получить WSDL для различных веб-сервисов (указания в конце). Однако, однажды имело удовольствие реверсировать веб-сервисы TFS (для коммерческого продукта, а не дляточечные тесты в) Я должен был бы предложить, чтобы вы этого не делали.

Как заявил Крис Лайвли, на несколько порядков проще будет запустить тестовый TFS-сервер с поддельными данными.Вот как Microsoft тестирует своих клиентов - мы никогда не мечтали бы насмехаться над веб-сервисами, особенно 1004 *, особенно над 1004 * веб-сервисом отслеживания рабочих элементов из-за его сложности.Почему?

Первым шагом в общении с веб-сервисом отслеживания рабочих элементов является обмен метаданными отслеживания рабочих элементов.Он содержит шаблоны процессов - то есть информацию обо всех типах рабочих элементов (ошибка, тестовый случай, задача и т. Д.), Включая все поля, способ их отображения на экране для различных клиентов TFS, триггеры, которыепроисходит обновление одного поля на основе содержимого другого поля и возможного содержимого полей (список областей, итераций, пользователей, которые могут быть допустимыми значениями в поле «Назначено» и т. д.). Схема для этогоне является общедоступным, и его нелегко перепроектировать, и без этого клиент отслеживания рабочих элементов не сможет функционировать.(Первый шаг в любой транзакции отслеживания рабочего элемента - убедиться, что таблица метаданных клиента соответствует серверу.)

Было бы очень сложно использовать это.Было бы еще сложнее его создать.(Я полагаю, что вы можете использовать существующую таблицу метаданных с вашего производственного сервера.)

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

Теоретически вы сможете создавать поддельные рабочие элементы в ответ на запрос.Однако клиент поддерживает «механизм правил», чтобы гарантировать, что рабочий элемент находится в допустимом состоянии.(То есть ошибка не может иметь состояние «Активен» и причина «исправлена».) Поэтому вы должны убедиться, что вы создавали фиктивные рабочие элементы, которые соответствовали правилам рабочего элемента в шаблоне процесса.

Но в какой-то момент, что ваши тесты на самом деле тестируют?Они тестируют код клиента, который вы пишете, или тестовый сервер TFS, который вы создали?

Наконец, Microsoft не предоставляет поддержку для общения напрямую с веб-сервисами.Эти интерфейсы могут существенно измениться в будущем, и, если у вас возникнут вопросы, ответ от сторонней стороны будет, скорее всего, «мы не поддерживаем это».(Возможно, я уже сказал слишком много!)

Также см .: « Есть ли документация по веб-сервисам TFS? », которая действительно касается создания нового клиента, а не насмешек над сервером.

Если вы еще не уверены в этом, вы можете получить WSDL для различных веб-служб, взглянув на конфигурацию IIS.Вы должны увидеть, например, WorkItemClient.aspx.Если вы добавите строку запроса ?wsdl в конце этого, вы сможете получить WSDL для клиента отслеживания рабочих элементов.Скрипач и Wireshark станут вашими очень хорошими друзьями.

3 голосов
/ 03 февраля 2012

Самый быстрый и надежный способ тестирования вашего кода - это установка сервера TFS.

Просто настройте виртуальную машину и установите ее в конфигурации с одним сервером.TFS 2010 довольно легко запустить и запустить.

Насмешка над интерфейсом, безусловно, имеет некоторую привлекательность, но вы неизбежно попадете в кроличью нору из-за различных зависимостей.

...