Поделиться через


Тестирование веб-служб

Обновлен: Ноябрь 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.

  1. Создайте веб-службу в локальной файловой системе. Дополнительные сведения см. в разделе Пошаговое руководство. Создание веб-службы с помощью Visual Basic или Visual C#.

  2. Создайте модульные тесты для проверки веб-службы, воспользовавшись стандартным способом создания тестов модулей. Дополнительные сведения см. в разделе Практическое руководство. Создание модульного теста.

  3. Добавьте в модульный тест атрибут AspNetDevelopmentServerAttribute. Аргументы данного класса атрибута указывают на узел веб-службы и имя сервера. Дополнительные сведения см. в подразделе Обеспечение доступа к ASP.NET Development Server.

  4. В модульном тесте добавьте вызов метода TryUrlRedirection, чтобы указать объекту веб-службы необходимый сервер. Убедитесь, что метод возвращает значение True, а в случае, если перенаправление произвести не удается, воспользуйтесь оператором Assert, чтобы тест завершился ошибкой. Дополнительные сведения см. в подразделе Использование метода TryUrlRedirection.

  5. Произведите вызов веб-службы или испытайте ее работу любыми иными необходимыми способами. Пример тестирования см. в подразделе Пример метода тестирования веб-службы.

Обеспечение доступа к 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>/.

ms243399.alert_note(ru-ru,VS.90).gifПримечание.

Параметры 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

TryUrlRedirection

Другие ресурсы

Практическое руководство. Создание модульного теста