Тестирование веб сервисов или как пользоваться SoapUI

Автор: Alex. Опубликовано в Программирование . просмотров: 67440

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Допустим, вы интегрируете системы, используя веб-сервисы, или ваши клиентские приложения взаимодействуют с сервером посредством веб-сервисов, в этом случае вам просто необходимо использовать инструмент SoapUI для тестирования веб-сервисов и клиентов. Работа с программой SoapUI очень проста и позволяет воочию увидеть передаваемые и получаемые данные. Кроме того вы сможете провести нагрузочное тестирование вашего веб-сервиса и симулировать работу веб-сервиса.

О SoapUI

Итак, что же такое SoapUI? Это кроссплатформенное клиентское оконное приложение, написанное на языке Java. Использовать основной функционал приложения можно бесплатно. В платной версии программы, которая называется SoapUI Pro, вы сможете делать чуть больше, например, устанавливать плагины с помощью менеджера плагинов, проводить тесты драйверов данных, перехватывать трафик, оценивать покрытие ваших веб-сервисов тестами и создавать отчёты. Официальная страничка проекта находится здесь, скачать дистрибутив бесплатной версии программы можно здесь. Если бесплатной версии вам не хватает, вы можете скачать пробную версию SoapUI Pro здесь.

Если для разработки вы используете IDE IntelliJ, NetBeans или Eclipse, то вы можете интегрировать SoapUI прямо в IDE используя плагины. Как это сделать написано здесь. Я не буду останавливаться на этом варианте. Здесь я опишу лишь вариант использования SoapUI, как самостоятельного приложения. Установка на компьютер под управлением Windows проходит быстро и не вызывает вопросов, поэтому на этом этапе я тоже не буду заострять внимание.

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

Прежде чем продолжить изучать программу SoapUI сделаем тестовый веб-сервис. Я сделаю это в Visual Studio, у моего сервиса будет только две функции GetSum1 и GetSum2, которые работают одинаково, но принимают и отдают результат по-разному.

using System;
using System.Collections.Generic;
using System.Data;
using System.Threading;
using System.Web;
using System.Web.Services;
 
namespace SoapUITester
{
   /// <summary>
   /// Веб-сервис для тестирования программы SoapUI.
   /// </summary>
   [WebService(Namespace = "http://www.proghouse.ru/SoapUITester")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [System.ComponentModel.ToolboxItem(false)]
   public class Service1 : System.Web.Services.WebService
   {
 
      [WebMethod]
      public int GetSum1(int a, int b, int? c)
      {
         //Сделаем задержку для отрицательных чисел
         if (a < 0 || b < 0 || (c.HasValue &amp;&amp; c.Value < 0))
            Thread.Sleep(100);
         //Искуственно заложим здесь ошибку при вычислениях
         if (a == 5)
            return -1;
         return a + b + (c.HasValue ? c.Value : 0);
      }
 
      [WebMethod(EnableSession = true)]
      [System.Web.Services.Protocols.SoapDocumentMethodAttribute(ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare)]
      public ContrAgInvoiceResponse GetSum2(ContrAgInvoiceRequest request)
      {
         //Сделаем задержку для всей функции
         Thread.Sleep(200);
         ContrAgInvoiceResponse response = new ContrAgInvoiceResponse();
         response.sessionID = Session.SessionID;
         response.sum = request.a + request.b + (request.c.HasValue ? request.c.Value : 0);
         return response;
      }
 
   }
 
   public class ContrAgInvoiceRequest
   {
      public int a;
      public int b;
      public int? c;
   }
 
   public class ContrAgInvoiceResponse
   {
      public string sessionID;
      public int sum;
   }
}

Теперь запустите программу SoapUI и создайте новый проект. Для этого в меню выберите пункт «File -> New SOAP Project». В появившемся окне задайте имя проекту и путь к WSDL. При включенной галочке «Create Requests» при создании проекта автоматически создадутся шаблоны для запросов к веб-сервису, эту галку мы оставим. Если установлена галка «Create TestSuite», то при создании проекта создадутся тесты. Нажмите кнопку «OK».

Создание проекта в SoapUI

После этого мы увидим, что для нашего тестового веб-сервиса создались запросы, причём для версий протокола SOAP 1.1 и 1.2. Дважды щёлкните на запрос «Request 1» и справа откроется дочернее окошко «Request 1», в котором вы увидите сформированный запрос.

Автоматически сформированный запрос для веб-сервиса в SoapUI

Чтобы теперь проверить, как работает наш тестовый веб-сервис, замените вопросительные знаки значениями и нажмите на зелёный треугольник (сверху слева в этом же дочернем окне), чтобы отправить запрос. Когда запрос выполнится, в правой части отобразится ответ сервера (на картинке веб-служба вернула число 7), а снизу слева время выполнения (на картинке 3 миллисекунды) и количество полученных байт (на картинке 358 байт).

Ответ от веб-сервиса, полученный в SoapUI

Теперь вычислим сумму с отрицательным числом. Как видно на картинки, функция GetSum1 с отрицательными числами работает дольше. Это ожидаемый результат, т.к. в функции GetSum1 специально стоит задержка 100мс, если хотя бы одно из полученных чисел отрицательное.

Отображение результата работы веб-сервиса в SoapUI

Если вместо числа передать строку, то вы увидите ошибку.

Отображение ошибки полученной от веб-сервиса программой SoapUI

Третий параметр у нас необязательный. Проверим, что будет, если мы его уберём из запроса. После выполнения мы увидим, что сумма посчиталась, ошибок нет.

Получение ответа от веб-сервиса в программе SoapUI

Как видите, проверить работу веб-сервиса можно очень просто и быстро.

Тесты

Теперь попробуем создать тесты для сервиса. Сначала добавьте в проект набор тестов (TestSuite).

Добавление набора тестов в SoapUI

Затем в набор тестов добавьте тестовый случай (TestCase).

Добавление тестового случая (TestCase) в SoapUI

Теперь в новый тестовый случай можно добавить шаги для теста. Добавим тестовый запрос «Test Request».

Добавление тестового запроса в SoapUI

В диалоге «New TestRequest» выбираем тестируемую функцию «GetSum1».

Выбор тестируемой функции в SoapUI

На следующем диалоге можно выбрать дополнительные утверждения, которые будут проверяться при проведении тестов: Add SOAP Response Assertion (добавляет утверждение, что ответ является SOAP-сообщением), Add Schema Assertion (добавляет утверждение, что ответ соответствует схеме), Add NOT SOAP Fault Assertion (добавляет утверждение, что ответ не является SOAP-ошибкой). Также здесь можно указать, нужно ли создать шаблон для необязательных элементов в запросе. Поставьте первую и третью галочку.

Выбор параметров тестового запроса в SoapUI

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

Выполнение тестового запроса в SoapUI

Как видите после тестирования слева от названия шага «Test Request» отобразилась зелёная картинка-статус, сигнализирующая, что тест выполнен успешно. Теперь в первом параметре передайте строку и запустите тест. После тестирования вы можете увидеть, что картинка-статус поменяла цвет на красный, а на нижней левой панели отображается, что пошло не так. В нашем примере – это SOAP-ошибка «Not SOAP Fault - FAILED». Там же на закладке «Request Log» вы можете посмотреть, когда выполнялся тест, сколько по времени и сколько байт было возвращено.

Выполнение тестового запроса с ошибкой в SoapUI

Теперь сделаем тестирование диапазона значений. Будем подставлять в параметр «a» значения от 1 до 5 и проверять сумму. Для этого сначала нужно добавить свойство, которое будет хранить текущее значение параметра «a», например, в тестовый случай «TestCase 1». Для этого дважды щёлкните по нему на панели «Navigator». Затем в открывшемся дочернем окне «TestCase 1» откройте вкладку «Properties», щёлкните на кнопку с плюсом и задайте новому свойству имя «aValue» и значение 1.

Добавление свойства в SoapUI

Теперь переключитесь в тестовый запрос «Test Request» (дважды щёлкнув по нему на панели «Navigator») сотрите значение в параметре «a» и щёлкните по тому месту, где нужно будет вставить значение свойства, правой клавишей мышки и в меню выберите только что добавленный параметр «Get Data... -> TestCase: [TestCase 1] -> Property [aValue]».

Вставка значения свойства в параметр в SoapUI

После этого вместо статического значения параметра вы увидите текст ${#TestCase#aValue}. Можете теперь запустить тест и удостовериться, что при тестировании будет подставлена единица вместо строки ${#TestCase#aValue} и сумма получится равная 7.

Проверка результата работы веб-сервиса в SoapUI

После выполнения запроса вы можно посмотреть, что было передано веб-сервису, в частности, какое значение параметра «a» было передано на сервер, на закладке «Raw» (сырые данные). Здесь вы увидите HTTP-запрос полностью вместе с заголовочной частью. Аналогично можно посмотреть HTTP-ответ от веб-сервиса.

Просмотр сырых данных в программе SoapUI

Кстати, для более удобного доступа к свойствам вы можете включить режим отображения свойств на панели навигатора (маленькая кнопка слева сверху на панели). Тогда свойства можно просматривать прямо на панели «Navigator». После этого дважды щёлкнув на свойство в навигаторе, вы можете поменять его значение.

Просмотр свойств в навигаторе SoapUI

Как видите из картинки, свойства могут быть заданы для проекта в целом, для отдельного набора тестов (TestSuite) или для отдельной тестовой ситуации (TestCase).

Теперь сделаем установку свойству «aValue» значения 1 в начале тестирования. Для этого откройте тестовый случай «TestCase 1», откройте вкладку «Setup Script» (скрипт инициализации вызывается перед выполнением тестового случая) и добавьте сюда следующий код:

log.info "Инициализация свойства aValue"
testRunner.testCase.setPropertyValue("aValue", "1")

Здесь же сразу можно проверить, как выполняется скрипт. Для этого нажмите на зелёный треугольник. Если при выполнении возникнут ошибки, то появится диалоговое окно с их описанием. В нашем случае всё отработало нормально. Откройте вкладку «script log», чтобы увидеть наше сообщение.

Результат выполнения скрипта Groovy в SoapUI

Здесь нужно сразу заметить, что все скрипты в SoapUI по умолчанию пишутся на языке Groovy, и в статье я буду использовать этот скрипт. Справку по языку можно получить здесь. По желанию вы можете использовать JavaScript для написания скриптов, тогда для правильной интерпретации ваших скриптов нужно установить в свойстве проекта «Script Language» значение «Javascript». В этом случае для интерпретации скриптов будет использоваться движок Rhino.

Также обратите внимание, что над каждым окошком для написания скрипта перечислены доступные глобальные переменные. На картинке сверху – это переменные log, testCase, context и testRunner.

Теперь после каждого шага «Test Request» нам нужно увеличивать значение свойства «aValue» на единицу. Чтобы это сделать, добавьте в тестовую ситуацию (TestCase) шаг «Groovy Script» - пункт контекстного меню «Add Step -> Groovy Script».

Добавление шага Groovy Script в программе SoapUI

После добавления шага напишите следующий скрипт для изменения значения свойства:

Integer curValue = new Integer(testRunner.testCase.getPropertyValue( "aValue" ))
log.info "Текущее значение: " + curValue
curValue += 1
testRunner.testCase.setPropertyValue("aValue", curValue.toString())
log.info "Значение после изменения: " + curValue

Здесь вы сразу можете выполнить скрипт и увидеть на панели навигатора изменённое значение свойства «aValue», а на вкладке «Log Output» увидите наш лог.

Выполнение шага Groovy Script в SoapUI

Теперь попробуем циклично выполнять шаги «Test Requset» и «Groovy Script». Для того чтобы это сделать добавьте к скрипту следующие строчки:

if (curValue < 10)
   testRunner.gotoStepByName( "Test Request")

Как видите, цикл будет выполняться пока значение свойства «aValue» меньше 10. Теперь откройте тестовый случай «TestCase 1» и выполните его. Как видите на вкладке «TestCase Log», всего выполнилось 18 шагов (9 «Test Request» и 9 «Groovy Script»).

Результат выполнения тестового случая (TestCase) в SoapUI

Теперь нужно отловить ошибку в вычислениях, которую мы специально заложили в веб-сервисе. Сервис должен вернуть -1, если первый параметр функции «GetSum1» равен 5. Для этого будем проверять результат работы функции. Чтобы добавить утверждение, которое будет проверять SoapUI, щёлкните по кнопке «Add an assertion to this item» (см. картинку), и в диалоге выбора утверждения выберите «Script Assertion».

Добавление утверждения Script Assertion в программе SoapUI

И в диалоге «Script Assertion» пропишите скрипт проверки результата.

import com.eviware.soapui.support.XmlHolder
//Парсим запрос и ответ
def resp = new XmlHolder( messageExchange.responseContentAsXml )
def req = new XmlHolder( messageExchange.requestContentAsXml )
//Прописываем пространства имён
resp.namespaces["xmlns"] = "http://www.proghouse.ru/SoapUITester"
req.namespaces["soap1"] = "http://www.proghouse.ru/SoapUITester"
//Считываем результат из ответа
Integer result = new Integer(resp.getNodeValue('//xmlns:GetSum1Result'))
//Считываем параметры из запроса
Integer a = new Integer(req.getNodeValue('//soap1:a'))
Integer b = new Integer(req.getNodeValue('//soap1:b'))
Integer c = new Integer(req.getDomNode('//soap1:c') == null ? 0 : req.getNodeValue('//soap1:c'))
//Проверяем утверждение
assert result == a + b + c

Здесь же сразу можно проверить результат, выполнив скрипт. На картинке видно, что скрипт выполнился успешно – утверждение истинно.

Выполняем утверждение Script Assertion в SoapUI

Теперь поменяем в качестве эксперимента параметр «aValue» – установим значение 5 и выполним тест «Test Request». После выполнения вы увидите, что тест провален (красная иконка в навигаторе) и увидите, какое утверждение не выполнено. В нашем случае – это утверждение «Script Assertion».

Проверка результата выполнения теста в SoapUI

Теперь выполним всю ситуацию «TestCase 1». После выполнения на вкладке «TestCase Log» мы видим, что тестирование прошло с ошибкой. Выполнение было прервано на шаге 9. Предыдущие шаги были выполнены без ошибок. Дважды щёлкнув на шаг 9 в логе, мы можем узнать, какой запрос был передан веб-сервису и что было возвращено (в нашем случае сумма посчиталась неправильно).

Проверка результата выполнения тестового случая в SoapUI

Аналогичным образом вы можете добавлять любое количество тестов любой сложности. А затем при каждом обновлении вашего сервиса выполнять все тесты сразу, чтобы проверять его работоспособность.

Нагрузочное тестирование

Чтобы проверить, выдерживает ли сервер требуемую нагрузку, или понять, какие функции выполняются медленно, мы можем провести нагрузочное тестирование. В нашем примере умышленно сделана большая задержка в функции «GetSum2». Давайте обнаружим эту задержку с помощью нагрузочного тестирования.

Сначала сделайте новую тестовую ситуацию «TestCase 2», добавьте в неё тестовый запрос «Test Request 1» для функции веб-сервиса «GetSum1» и тестовый запрос «Test Request 2» для функции «GetSum2». Вместо статических значений параметров поставьте следующий скрипт: ${=(int)(Math.random() * 100) - 50}. Так в качестве значений параметров будут устанавливаться отрицательные и положительные числа подобранные случайным образом. У вас должны получиться следующие SOAP-запросы:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://www.proghouse.ru/SoapUITester">
   <soap:Header/>
   <soap:Body>
      <soap1:GetSum1>
         <soap1:a>${=(int)(Math.random() * 100) - 50}</soap1:a>
         <soap1:b>${=(int)(Math.random() * 100) - 50}</soap1:b>
         <soap1:c>${=(int)(Math.random() * 100) - 50}</soap1:c>
      </soap1:GetSum1>
   </soap:Body>
</soap:Envelope>

для функции «GetSum1» и для функции «GetSum2»:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="http://www.proghouse.ru/SoapUITester">
   <soap:Header/>
   <soap:Body>
      <soap1:request>
         <soap1:a>${=(int)(Math.random() * 100) - 50}</soap1:a>
         <soap1:b>${=(int)(Math.random() * 100) - 50}</soap1:b>
         <soap1:c>${=(int)(Math.random() * 100) - 50}</soap1:c>
      </soap1:request>
   </soap:Body>
</soap:Envelope>

Теперь добавьте нагрузочный тест (пункт контекстного меню «New LoadTest»).

Добавление нагрузочного теста в SoapUI

После добавления нагрузочного теста сразу всё готово к его запуску. Здесь вы можете задать количество потоков, стратегию выполнения и параметры для каждой стратегии (вы можете параллельно выполнять несколько тестов, используя разную стратегию). Выполните тест.

Результат выполнения нагрузочного теста в SoapUI

После выполнения в таблице вы увидите минимальное и максимальное время выполнения теста, среднее значение, количество ошибок и пр. На вкладке «LoadTest Log» будет указано время начала и окончания теста. Также вы можете посмотреть статистику и историю на графиках.

По таблице вы можете заметить, что тест «Test Request 2» выполняется дольше. В среднем 203,55 мс, а тест «Test Request 1» выполняется быстрее примерно в 2 раза. Вот мы и обнаружили, что в функции «GetSum2» есть задержка при выполнении.

Тестирование клиента

Теперь давайте попробуем создать имитацию веб-сервиса с помощью программы SoapUI. Это может пригодиться для тестирования клиента веб-сервиса. Ведь с помощью такого имитатора веб-сервиса вы сможете протестировать все возможные ситуации на клиенте.

Чтобы создать веб-сервис, щёлкните по SOAP-интерфейсу и в контекстном меню выберите пункт «Generate SOAP Mock Service».

Добавление имитации веб-сервиса в SoapUI

В поднявшемся диалоге вы можете выбрать функции, для которых нужно создать операции сервиса, путь к сервису и порт. Нажмите «OK».

Проставление параметров веб-сервиса в SoapUI

После того как сервис создан, дважды щёлкните по запросу, который хотите поправить, например, по «Response 1» и задайте параметр, который должна вернуть функция GetSum1. Вы можете здесь задать статическое значение, которое будет получать клиент или вычислять его в зависимости от входных параметров. Также здесь вы можете задать ответ-ошибку и протестировать, как клиент будет обрабатывать сообщение с ошибкой.

Мы здесь сделаем расчёт суммы и возврат результата с помощью скрипта. Откройте вкладку «Script» и напишите следующий код:

import com.eviware.soapui.support.XmlHolder
//Парсим запрос и ответ
def req = new XmlHolder( mockRequest.getContentElement() )
//Прописываем пространства имён
req.namespaces["soap1"] = "http://www.proghouse.ru/SoapUITester"
//Считываем параметры из запроса
Integer a = new Integer(req.getNodeValue('//soap1:a'))
Integer b = new Integer(req.getNodeValue('//soap1:b'))
Integer c = new Integer(req.getDomNode('//soap1:c') == null ? 0 : req.getNodeValue('//soap1:c'))
//Сохраняем значение в свойстве "result"
context.setProperty("result", a + b + c)

После этого в SOAP-ответе вместо вопроса можно подставить следующую строку: ${=result}. У вас должен получиться такой ответ:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://www.proghouse.ru/SoapUITester">
   <soapenv:Header/>
   <soapenv:Body>
      <soap:GetSum1Response>
         <soap:GetSum1Result>${=result}</soap:GetSum1Result>
      </soap:GetSum1Response>
   </soapenv:Body>
</soapenv:Envelope>

Вот так это выглядит в программе:

Имитация веб-сервиса в SoapUI

Теперь, можете запустить сервис. Для этого переключитесь в навигаторе на сервис, у меня это «Service1Soap MockService» и щёлкните по зелёному треугольнику. После запуска сверху будет двигаться бегунок показывающий, что сервис работает.

Запуск имитации веб-сервиса в SoapUI

Теперь можно тестировать клиента. Я для примера сделал консольное приложение в Visual Studio, добавил в проект ссылку, указав ссылку на WSDL (WSDL можно получить, щёлкнув по кнопке с изображением зелёной фигуры, на картинке сверху она обведена зелёным кружком). Далее можно вызывать функцию сервиса «GetSum1». Вот код консольного приложения:

using SoapUITesterClient.localhost;
using System;
using System.Collections.Generic;
using System.Text; 
 
namespace SoapUITesterClient
{
   class Program
   {
      static void Main(string[] args)
      {
         Service1 service = new Service1();
         Console.WriteLine(service.GetSum1(1, 2, 4));
      }
   }
}

После выполнения приведённого кода программы в консоль будет выведен результат 7.

Также при создании сервиса вы можете тестировать его здесь же прямо из программы SoapUI.

Заключение

SoapUI – это мощный инструмент, который постоянно развивается, и при разработке веб-сервисов – это незаменимый инструмент для тестирования. Полное описание программы сделать в одной статье невозможно, да и не имеет смысла, ведь у каждого разные задачи. Но на сайте разработчика есть хорошее описание программы с примерами и справка по всем классам, которые можно использовать в скриптах.

 

Tags: Groovy Тестирование веб-сервисов Visual Studio SoapUI Windows Учебники по программированию Учебники по использованию программ

Комментарии   

well
0 #11 well 17.12.2015 10:20
Доброго времени.
Подскажите, есть ли возможность добавить значение в свойство скриптом на шаге? Вот так: testRunner.testCase.setPropertyValue("nameProp", "Value") нет доступа к testRunner.
В общем, задача состоит в том, чтобы использовать значение, полученное из ответа на следующих шагах.
Цитировать
well
0 #12 well 21.12.2015 10:31
Цитирую well:
Доброго времени.
Подскажите, есть ли возможность добавить значение в свойство скриптом на шаге? Вот так: testRunner.testCase.setPropertyValue("nameProp", "Value") нет доступа к testRunner.
В общем, задача состоит в том, чтобы использовать значение, полученное из ответа на следующих шагах.


Собственно, и ответ:
Доступ к свойствам может получить через messageExchange.
Например, так:
messageExchange.modelItem.testCase.setPropertyValue("myProperty", "myValue")
Примеры можно найти здесь и здесь.
Цитировать
sejal
-1 #13 sejal 22.07.2016 10:29
hi,we provide online training & video tutorial for soapui
for free videos refer
soapui-tutorial.com/.../...
Цитировать
Victor_25
0 #14 Victor_25 29.07.2016 11:04
Подскажите как сделать настройку, чтобы созданные мной тест сьюты для автотестов запускались один за другим. т.е. чтобы не приходилось открывать каждый сьют и запускать его , а просто выбрать набор сьютов и запускать их одним нажатием кнопки?
Цитировать
Alex
0 #15 Alex 29.07.2016 12:48
Цитирую Victor_25:
Подскажите как сделать настройку, чтобы созданные мной тест сьюты для автотестов запускались один за другим. т.е. чтобы не приходилось открывать каждый сьют и запускать его , а просто выбрать набор сьютов и запускать их одним нажатием кнопки?

Щёлкните по проекту правой кнопкой, выберите "Launch TestRunner". В поднявшемся диалоге в поле "TestSuite" выберите "<all>" и нажмите "Launch". Там же в окне вы увидите, какой bat-файл нужно запускать и с какими параметрами.
Цитировать
Omi
0 #16 Omi 29.12.2016 11:38
Доброго дня. У меня вопрос, связанный с получением значений переменных из excel файла. Есть несколько наборов значений переменных. Необходимо по очереди считывать эти наборы и загонять из файла в переменные SoapUI, и с полученными значениями выполнять тест. Есть такая возможность?
Если excel сложно считать, могу все в xml перегнать, особой разницы откуда читать данные в тест для меня нет. В крайнем случае могу иx вручную в Groovy Script прописывать. В этом случае вопрос в том, как из того же Groovy запускать одиночный тесткейс?
Цитировать
Alex
0 #17 Alex 11.01.2017 13:01
Цитирую Omi:
Доброго дня. У меня вопрос, связанный с получением значений переменных из excel файла. Есть несколько наборов значений переменных. Необходимо по очереди считывать эти наборы и загонять из файла в переменные SoapUI, и с полученными значениями выполнять тест. Есть такая возможность?
Если excel сложно считать, могу все в xml перегнать, особой разницы откуда читать данные в тест для меня нет. В крайнем случае могу иx вручную в Groovy Script прописывать. В этом случае вопрос в том, как из того же Groovy запускать одиночный тесткейс?

Допустим нам нужно потестить функцию GetSum1 из статьи. Она принимает три числа на вход. Чтобы сделать тестирование как вы пишите, я сделал следующий XML и сохранил его в файл C:\Test\test1.xml

<tst>
  <value a="10" b="1" c="2"/>
  <value a="2" b="2" c="4"/>
  <value a="4" b="4" c="12"/>
  <value a="6" b="6" c="6"/>
  <value a="50" b="11" c="8"/>
  <value a="7" b="61" c="3"/>
  <value a="9" b="91" c="0"/>
</tst>

Затем в тесткейс я добавил 4 свойства: aValue, bValue, cValue и valueIndex и следующий скрипт инициализации:

testRunner.testCase.setPropertyValue("valueIndex", "0")

Затем я добавил 3 тестовых шага:

Первый шаг - Groovy Script со следующим скриптом:

import javax.xml.parsers.*
import org.w3c.dom.*

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document xml = db.parse("c:\\Test\\test1.xml");
NodeList nodes = xml.getDocumentElement().getElementsByTagName("value");
int valueCount = nodes.getLength();
int valueIndex = Integer.parseInt(testRunner.testCase.getPropertyVa lue( "valueIndex" ));
if (valueIndex < valueCount) {
  testRunner.testCase.setPropertyValue(" aValue", nodes.item(valueIndex).getAttribute("a"));
  testRunner.testCase.setPropertyValue(" bValue", nodes.item(valueIndex).getAttribute("b"));
  testRunner.testCase.setPropertyValue(" cValue", nodes.item(valueIndex).getAttribute("c"));
  testRunner.testCase.setPropertyValue(" valueIndex", new Integer(valueIndex + 1).toString());
} else
  testRunner.cancel("Конец XML");

Второй шаг – Test Request:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelop e" xmlns:soap1="http://www.proghouse.ru/SoapUITester">
  <soap:Header/>
  <soap:Body>
     <soap1:GetSum1>
        <soap1:a>${#TestCase#aValue}</soap1:a>
        <soap1:b>${#TestCase#bValue}</soap1:b>
        <soap1:c>${#TestCase#cValue}</soap1:c>
     </soap1:GetSum1>
     </soap:Body>
</soap:Envelope>

Третий шаг – Conditional Goto у которого условие 1=1 и переход на первый шаг.

Работает это так: в свойстве valueIndex хранится индекс текущего тэга value в моём XML-файле, из него на первом шаге я считываю атрибуты a, b и c и записываю их значения в свойства aValue, bValue и cValue. После этого я увеличиваю значение свойства valueIndex на 1. Если значение свойства valueIndex больше или равно количеству тэгов value в моём XML-файле, то я останавливаю тест. На втором шаге тестируется сервис со значениями из этих свойств. Третий шаг запускает выполнение первого шага, создавая цикл.

Аналогично можете сделать и с Excel, только тогда меняется Groovy Script в первом шаге. Допустим, у вас будет простая таблица, как на картинке, сохранённая в файл c:\Test\test1.xls.



Тогда скрипт будет таким:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;

InputStream inputStream = new FileInputStream("c:\\Test\\test1.xls");
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
int valueIndex = Integer.parseInt(testRunner.testCase.getPropertyVa lue( "valueIndex" ));
Row row = sheet.getRow(valueIndex);
if (row != null) {
        testRunner.testCase.setPropertyValue(" aValue", ((int)row.getCell(0).getNumericCellValue()).toString());
        testRunner.testCase.setPropertyValue(" bValue", ((int)row.getCell(1).getNumericCellValue()).toString());
        testRunner.testCase.setPropertyValue(" cValue", ((int)row.getCell(2).getNumericCellValue()).toString());
        testRunner.testCase.setPropertyValue(" valueIndex", new Integer(valueIndex + 1).toString());
} else
        testRunner.cancel("Конец документа");

Здесь я использовал библиотеку Apache POI. Чтобы код выше работал, нужно скачать библиотеку Apache POI с бинарником отсюда, из скачанного архива достать бинарник (у меня это файл poi-3.16-beta1.jar) и положить его в папку \bin\ext, внутри папки с SoapUI (у меня это папка C:\Program Files (x86)\SmartBear\SoapUI-5.0.0\bin\ext) и перезапустить SoapUI.
Цитировать

Добавить комментарий


Защитный код
Обновить