Тестирование веб-служб
Обновлен: Ноябрь 2007
Тестирование веб-служб можно осуществить путем вызова веб-методов из модульных тестов. Тестирование веб-служб во многом аналогично тестированию других видов кода с помощью модульных тестов. Также существует возможность использования операторов Assert, а набор результатов, получающийся при выполнении тестов, одинаков. Однако пространство имен Microsoft.VisualStudio.TestTools.UnitTesting.WebVisual Studio Team System Test Edition предоставляет атрибуты и методы, предназначенные специально для тестирования веб-служб. Они описаны в подразделе Локальное тестирование веб-служб.
Ниже приведено описание двух способов тестирования веб-служб с помощью модульных тестов.
Веб-служба выполняется на активном веб-сервере. При тестировании веб-служб, выполняемых на локальном или удаленном веб-сервере, таком как IIS, не предъявляется особых требований. Для выполнения подобного тестирования необходимо добавить веб-ссылку, после чего вызвать веб-методы веб-службы из модульных тестов аналогично вызову методов программы, не являющейся веб-службой. Сведения о способе добавления веб-ссылки см. в разделе Диалоговое окно "Добавление веб-ссылки". Сведения о создании модульных тестов см. в разделах Практическое руководство. Создание модульного теста и Практическое руководство. Создание модульного теста. Сведения об использовании веб-теста для тестирования веб-службы см. в разделе Практическое руководство. Создание теста веб-службы.
Веб-служба не размещена на активном веб-сервере. Как описано в разделе Локальное тестирование веб-службы, существует возможность тестирования веб-службы, выполняемой на локальном компьютере, а не на веб-сервере, таком как IIS. Для этого используется атрибут, предоставляемый Team System (средства тестирования), с помощью которого запускается сервер ASP.NET Development Server. Таким образом на узле localhost временно создается сервер, на котором размещается тестируемая веб-служба. Дополнительные сведения о сервере ASP.NET Development Server см. в разделе Веб-серверы в Visual Web Developer.
Локальное тестирование веб-службы
Этот процесс заключается в тестировании веб-службы, выполняемой на локальном компьютере, а не на сервере IIS.
Создайте веб-службу в локальной файловой системе. Дополнительные сведения см. в разделе Пошаговое руководство. Создание веб-службы с помощью Visual Basic или Visual C#.
Создайте модульные тесты для проверки веб-службы, воспользовавшись стандартным способом создания тестов модулей. Дополнительные сведения см. в разделе Практическое руководство. Создание модульного теста.
Добавьте в модульный тест атрибут AspNetDevelopmentServerAttribute. Аргументы данного класса атрибута указывают на узел веб-службы и имя сервера. Дополнительные сведения см. в подразделе Обеспечение доступа к ASP.NET Development Server.
В модульном тесте добавьте вызов метода TryUrlRedirection, чтобы указать объекту веб-службы необходимый сервер. Убедитесь, что метод возвращает значение True, а в случае, если перенаправление произвести не удается, воспользуйтесь оператором Assert, чтобы тест завершился ошибкой. Дополнительные сведения см. в подразделе Использование метода TryUrlRedirection.
Произведите вызов веб-службы или испытайте ее работу любыми иными необходимыми способами. Пример тестирования см. в подразделе Пример метода тестирования веб-службы.
Обеспечение доступа к ASP.NET Development Server
Если узел размещения веб-службы находится в локальной файловой системе, он использует сервер ASP.NET Development Server и не является узлом IIS. В этом случае процесс создания модульных тестов начинается с запуска ASP.NET Development Server для веб-службы, после чего добавляется веб-ссылка на тестовый проект.
Сервер ASP.NET Development Server является временным, и после его остановки веб-ссылку разрешить не удастся. В Team System (средства тестирования) эта проблема решается с помощью атрибута AspNetDevelopmentServer. Этот класс атрибута имеет два конструктора:
AspNetDevelopmentServerAttribute(string name, string pathToWebApp)
AspNetDevelopmentServerAttribute(string name, string pathToWebApp, string webAppRoot)
С этим атрибутом используются следующие параметры:
name — определяемое пользователем имя, связанное с сервером.
pathToWebApp — путь на диске к тестируемому веб-узлу.
webAppRoot — виртуальный путь, на котором веб-узел размещен на сервере. Например, если webAppRoot равен /WebSite1, то путь к узлу — https://localhost:<порт>/WebSite1. Для первого конструктора по умолчанию используется https://localhost:<port>/.
Примечание. |
---|
Параметры pathToWebApp и webAppRoot используются с AspNetDevelopmentServerAttribute точно так же, как и с атрибутом AspNetDevelopmentServerHost, который используется для модульных тестов ASP.NET. |
Если тест помечен атрибутом AspNetDevelopmentServerAttribute, при запуске теста запускается ASP.NET Development Server. Запись, содержащая URL-адрес тестируемого узла, добавляется в TestContext.Properties тестового класса. Ключ этой записи — AspNetDevelopmentServer.<имя>, где
<имя> — значение аргумента name атрибута. Таким образом веб-служба всегда доступна на сервере ASP.NET Development Server при запуске теста и известен URL-адрес.
Чтобы протестировать веб-службу таким образом, можно либо создать модульные тесты автоматически, либо написать модульный тест вручную и пометить его этим атрибутом. При создании теста вручную требуется веб-ссылка, чтобы можно было сослаться на тип веб-службы в коде модульного теста. Перед добавлением веб-ссылки нужно запустить сервер ASP.NET Development Server. Для этого щелкните правой кнопкой мыши проект веб-службы и выберите Просмотр в обозревателе.
Использование метода TryUrlRedirection
При наличии веб-ссылки можно создать экземпляр объекта веб-службы в коде теста, но при выполнении возможен сбой, поскольку ссылка указывает на URL-адрес экземпляра ASP.NET Development Server, который может уже не работать. Чтобы решить эту проблему, используйте метод TryUrlRedirection для изменения объекта веб-службы таким образом, чтобы он указывал на тот экземпляр ASP.NET Development Server, который был создан именно для запуска модульного теста.
TryUrlRedirection — статический метод класса WebServiceHelper, возвращающий логическое значение, указывающее успех перенаправления.
bool TryUrlRedirection(System.Web.Protocols.WebClientProtocol client, TestContext context, string identifier)
TryUrlRedirection принимает три аргумента:
client — объект веб-службы для перенаправления.
context объект TestContext для класса.
identifier — определяемое пользователем имя сервера, на который перенаправляется объект веб-службы.
После вызова этого метода, в случае успеха, можно вызвать веб-методы для объекта веб-службы. Доступ к веб-службе осуществляется посредством сервера ASP.NET Development Server, запущенного при запуске модульного теста. Для запуска нескольких серверов в одном модульном тесте можно использовать несколько атрибутов AspNetDevelopmentServer; при этом нужно использовать разные имена.
При автоматическом создании модульных тестов атрибут AspNetDevelopmentServer и вызов метода TryUrlRedirection не добавляются автоматически. Их нужно добавить вручную. И атрибут, и метод, находятся в Microsoft.VisualStudio.TestTools.UnitTesting.Web. Поэтому может потребоваться оператор using или Imports, как показано в следующем примере.
Пример тестового метода веб-службы
Это простой тестовый метод, тестирующий веб-метод HelloWorld() веб-службы:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using TestProject1.localhost;
[TestMethod]
[AspNetDevelopmentServer("HelloWorldServer", @"C:\Documents and Settings\user\My Documents\Visual Studio 2005\WebSites\WebSite1")]
public void HelloWorldTest()
{
HelloWorldService target = new HelloWorldService();
Assert.IsTrue( WebServiceHelper.TryUrlRedirection
(
target,
testContextInstance,
"HelloWorldServer"
),
"Web service redirection failed."
);
string expected = "Hello World";
string actual;
actual = target.HelloWorld();
Assert.AreEqual(
expected,
actual,
"TestProject1.localhost.HelloWorldService.HelloWorld did not return the expected value."
);
}
См. также
Задачи
Практическое руководство. Создание модульного теста
Практическое руководство. Параметризация веб-сервера
Основные понятия
Веб-серверы в Visual Web Developer
Ссылки
Microsoft.VisualStudio.TestTools.UnitTesting.Web
AspNetDevelopmentServerAttribute