В этой статье приводится введение в инфраструктуру автоматизированного тестирования интерфейсов (ITF) систем сервис-ориентированной интеграции (Service Oriented Integration – SOI). Эта проверенная на практике инфраструктура предоставляет возможности для управления наборами тестовых данных при юнит-тестировании интерфейсов, группирования тестов и генерации отчетов о результатах их выполнения. Она может использоваться для тестирования любого промежуточного программного обеспечения и продуктов, созданных на основе архитектуры ESB (Enterprise Service Bus – сервисная шина предприятия).
Под SOI подразумевают интеграцию с приложениями или базами данных, находящимися за пределами промежуточного программного слоя. Программные решения часто создаются при помощи промежуточных продуктов с использованием графических редакторов или фрагментов исходного кода, которые затем преобразуются в исполняемый код. При этом сложно добиться всеобъемлющего тестирования отдельных компонентов программных интерфейсов без использования инфраструктуры автоматизированного выполнения тестов.
Инфраструктура, рассматриваемая в этой статье, представляет собой подход к организации тестирования интерфейсов систем SOI методом "белого ящика" (white box testing). Использование этого метода требует знания внутреннего устройства системы для определения оптимальной стратегии тестирования. Инфраструктура включает мощную среду для юнит-тестирования и компонентного тестирования, в которой каждый компонент может тестироваться как изолированно от других, так и с использованием необходимых заглушек и генераторов данных. Ее можно легко расширить с целью поддержки регрессионного и дымового тестирования (smoke testing) интерфейсов при различных внешних условиях. Инфраструктура предоставляет следующие возможности:
- тестирование на предмет соответствия полученных результатов ожидаемым;
- обмен общей тестовой информацией;
- выполнение выбранных тестов или указанной группы тестов.
Кроме того, инфраструктура может оказаться полезной при формализации требований, прояснении архитектурных аспектов, отладке, интеграции, подготовке к выпуску, а также оптимизации и тестировании кода.
Назначение инфраструктуры тестирования интерфейсов
Написание автоматизированных тестов с использованием данной инфраструктуры часто позволяет выявить недостатки в реализации или архитектуре системы. Юнит-тесты выступают в качестве первых пользователей ESB-системы, тем самым помогая идентифицировать ошибки или нехватку той или иной функциональности. Как правило, разработчикам требуется время на освоение ITF, но в итоге написанные ими тесты начинают играть роль документации ESB-системы. ITF позволяет легко создавать юнит-тесты на основе данных. Каждый такой тест выполняется для каждой записи источника данных и имеет полный доступ к тестовой информации.
Одним из главных достоинств ITF является то, что хорошо написанные наборы тестов позволяют разработчикам передавать свой код другим членам команды, которые будут отвечать за его сопровождение и дальнейшее развитие. Если будущие изменения приведут к ошибке в существующей функциональности, высока вероятность того, что он будет выявлен юнит-тестами, которые также могут быть полезны при диагностике.
ITF является неотъемлемым компонентом системы регрессионного тестирования, которая заключается в повторном тестировании программного обеспечения после добавления новых возможностей, чтобы убедиться, что они не внесли ошибки в существующую функциональность. ITF позволяет существенно сократить временные затраты на регрессионное тестирование.
Ниже перечислены некоторые из ключевых возможностей тестирования, поддерживаемых ITF.
Разработка на основе тестирования
Разработка на основе тестирования (test-driven development – TDD) – это подход к созданию программного обеспечения, при котором юнит-тесты пишутся до тестируемого кода. Разработчикам предлагается создавать тесты на основе спецификации еще до начала проектирования и реализации системы. TDD поддерживает непрерывный цикл разработки программного обеспечения, состоящий из небольших легко управляемых этапов. Благодаря своей поддержке TDD, ITF может играть значительную роль в проектах по созданию корпоративных систем.
Чаще всего признаком успешности выполнения юнит-теста является соответствие полученных данных ожидаемому результату. Проверки (assertions) в ITF позволяют разработчикам задавать ожидаемые результаты, которые будут сравниваться с результатами, полученными в процессе выполнения теста. Ожидаемые результаты могут быть динамическими, т.е. их значения могут частично устанавливаться на этапе выполнения при помощи регулярных выражений. Эта возможность играет очень важную роль в тестах на основе сравнений.
ITF предоставляет полную поддержку проверки степени покрытия кода (code coverage). Эта функция автоматически вставляет трассирующий код, который выполняет мониторинг процессов, вызываемых при выполнении тестов. Наиболее существенным достоинством такого подхода является определение участков кода, не покрытого тестами. Нередко в приложениях встречаются логические ветви или код обработки исключений, которые не выполняются в стандартных ситуациях. Такие участки кода необходимо выявлять. При этом покрытие кода, при всей своей полезности, не может являться единственным индикатором эффективности тестов. Эта функция не может определить, каким именно образом тесты выполняют тот или иной участок кода и могут ли они пропустить ошибки, которые проявятся на других наборах данных. Вследствие этого необходимо создавать наборы тестов с разными входными данными и порядком выполнения – это поможет убедиться в том, что код корректен, функционально полон и отказоустойчив. Тем не менее покрытие кода позволяет выявить части приложения, которые не охвачены тестами.
Надежный код должен обрабатывать любые исключительные ситуации без аварийного завершения. Разработчикам часто требуется проверить корректность выполнения кода в процессе обработки исключений. Этого можно добиться, подавая на вход ошибочные или некорректные данные. Как правило, юнит-тест, при выполнении которого было сгенерировано исключение, считается отрицательным. Подобные тесты поддерживаются ITF. Разработчики могут указывать, является ли данный юнит-тест положительным или отрицательным.
Журналирование и тестирование обработки исключений
Стандарты разработки подразумевают эффективное журналирование (logging) и обработку возникающих исключений. В процессе написания юнит-тестов разработчикам необходимо убедиться, что приложение корректно заносит сообщения в журнал и правильно обрабатывает исключения. Многие корпоративные приложения используют инфраструктуры глобального аудита (Global Audit Logging – GAL) и глобальной обработки исключений (Global Exception Handling – GEH). ITF может успешно интегрироваться с подобными решениями. Она предоставляет средства, при помощи которых разработчик может указать число ожидаемых сообщений разных типов в журнале для каждого юнит-теста. Таким образом, можно проверять, все ли сообщения (в том числе сообщения об обработке исключений) заносятся в журнал тем или иным участком кода.
Целью регрессионного тестирования является проверка корректности устранения ошибки, а также проверка того, что исправление одной проблемы не привело к появлению новых. Регрессия используется для тестирования исправлений путем систематического определения необходимого минимума тестов, покрывающих код, затронутый в процессе устранения ошибок. К распространенным методам регрессии можно отнести повторное выполнение тестов, чтобы убедиться, что не проявляются ранее исправленные ошибки. ITF позволяет легко и быстро запускать тесты на повторное выполнение, что делает ее отличной платформой для регрессионного тестирования.
Тестирование производительности
Тестирование производительности выполняется с целью определения того, насколько быстро отрабатывают те или иные компоненты системы под различной нагрузкой. Кроме того, с его помощью можно проверять другие параметры качества системы, такие как масштабируемость, надежность и ресурсоемкость. Одной из целей тестирования производительности является учет требований к производительности на этапе проектирования системы, т.е. еще до начала написания кода. Тесты ITF могут быть запущены последовательно или параллельно с разных компьютеров. Эти возможности делают ITF подходящей платформой для тестирования производительности приложений.
Ниже перечислены некоторые из важных требований, которым удовлетворяет ITF.
- ITF должна позволять добавлять новые тесты.
- ITF должна предоставлять возможности по группированию тестов в наборы (test suits).
- ITF должна предоставлять возможность выполнения и построения отчетов о выполнении отдельных тестов, групп тестов, а также всех имеющихся тестов.
- ITF должна позволять создавать точки доступа различных типов, которые можно использовать многократно в разных тестах.
- Тесты ITF включают следующие атрибуты:
- уникальное имя;
- описание;
- группу (или группы), к которой принадлежит тест;
- информацию об источнике входных данных;
- информацию о том, куда поступают результаты выполнения теста;
- значение тайм-аута.
- Точки доступа ITF включают следующую информацию:
- тип точки: Web-сервис (WS) или сервис сообщений Java (JMS). На основе этого атрибута определяется тип тестируемого сервиса: JMS-JMS, WS-WS и т.д.;
- тип сообщения: байтовый поток, текст и т.д.;
- тип кодировки. Этот атрибут необходим для байтовых сообщений. Значение по умолчанию – UTF-8;
- флаг сравнения. Этот атрибут говорит о том, что инфраструктура должна сравнить полученный результат выполнения теста с ожидаемым;
- атрибуты заголовка:
- destinationQueue: имя очереди назначения;
- replyToQueue: имя очереди replyTo. Этот атрибут необходим только для точек доступа типа WS. По умолчанию используется временная очередь;
- JMSPriority: приоритет сообщений JMS. Значение по умолчанию – 4;
- JMSDeliveryMode: режим доставки сообщений JMS (PERSISTENT или NON_PERSISTENT). Значение по умолчанию – PERSISTENT;
- JMSCorrelationID;
- requestTimeout: значение тайм-аута при доставке сообщений. Указывается только для точек доступа типа WS.
- Информация о свойствах:
- SOAPAction: требуется только для точек доступа типа WS;
- Body: требуется только для точек доступа типа JMS;
- Request: требуется только для точек доступа типа WS. Этот атрибут должен включать SOAP-конверт Web-сервиса;
- Reply: требуется только для точек доступа типа WS. Этот атрибут должен включать SOAP-конверт Web-сервиса.
- Результаты выполнения тестов ITF должны включать один из следующих признаков:
- Success: тест был выполнен успешно;
- Failure: результаты были получены, но не совпали с ожидаемыми результатами;
- Error: в процессе выполнения теста возникла ошибка, в результате чего данные для сравнения получены не были.
- Тесты ITF должны быть способны выполняться в любой среде, пригодной для развертывания.
- ITF должна предоставлять возможность проверки журнальных сообщений GAL и GEH.
- ITF должна позволять поддерживать разные варианты выполнения тестов.
ITF включает систему запуска тестов, которая позволяет добавлять и модифицировать юнит-тесты, выполнять тесты и генерировать отчеты о результатах выполнения. Тесты ITF могут быть написаны с использованием того же промежуточного программного обеспечения, что и тестируемые интерфейсы. Эта возможность облегчает работу с ITF в интегрированных средах разработки (IDE).
ITF хранит всю информацию, относящуюся к тестам, их выполнению и точкам доступа в специальной базе данных. Благодаря такому подходу разработчики могут иметь доступ к репозиторию тестов с любого компьютера, что позволяет выполнять одни и те же тесты с разных рабочих станций. ITF имеет такой же доступ к всем компонентам ESB, как и тестируемый код, поскольку она использует те же параметры соединения и клиентские библиотеки. При этом конфигурационные параметры могут быть изменены на этапе выполнения, что облегчает тестирование в различных окружениях. Стандартные параметры соединения, поддерживаемые ITF, позволяют обращаться к таким компонентам ESB, как сервисы корпоративных сообщений (Enterprise Messaging Services – EMS), JDBC и точки доступа SOAP.
ITF выполняет запросы к таблицам своей базы данных для генерации отчетов, вид которых может настраиваться пользователем. Эти отчеты могут включать информацию как о самих тестах, так и об их выполнении. Кроме того, ITF позволяет генерировать как сводные, так и детализированные отчеты.
Рисунок 1. Компоненты ITF
ITF использует четыре типа объектов: TestCase, InputEndpoint, OutputEndpoint и Group. Объекты TestCase, атрибуты которых приведены в таблице 1, представляют собой тесты. В таблице 2 показаны атрибуты объектов InputEndpoint, которые определяют тип взаимодействия между ITF и тестируемым кодом, генерирующим входные данные. Взаимодействие между ITF и тестируемым кодом на выходе описывается объектами типа OutputEndpoint (атрибуты приведены в таблице 3). Объекты типа Group (таблица 4) описывают группирование тестов в наборы.
Таблица 1. Атрибуты TestCase
| Имя атрибута | Тип | Обязательный атрибут? | Описание |
|---|---|---|---|
| Name | string | Y | Название теста |
| Description | string | Y | Описание теста |
| Outcome | string | Y | Признак результата выполнения теста: Success или Failure |
| InputEndpoint | Object | Y | Входная точка доступа (см. таблицу 2) |
| OutputEndpoint | Object | Y | Выходная точка доступа (см. таблицу 3) |
| Timeout | Integer | Y | Значение тайм-аута теста |
| ExpectedGALCount | Integer | Y | Ожидаемое число записей GAL |
| ExpectedGEHCount | Integer | Y | Ожидаемое число записей GEH |
| Group | Object | Y | Группа, к которой принадлежит тест (см. таблицу 4) |
Таблица 2. Атрибуты InputEndpoint
| Имя атрибута | Тип | Обязательный атрибут? | Описание |
|---|---|---|---|
| Name | string | Y | Название точки доступа |
| JMSPriority | Integer | Y | JMS-приоритет запроса |
| Request | string | Y | Сообщение в запросе к тесту |
| Reply | Object | Y | Отклик для теста |
Таблица 3. Атрибуты OutputEndpoint
| Имя атрибута | Тип | Обязательный атрибут? | Описание |
|---|---|---|---|
| Name | string | Y | Название точки доступа |
| Body | string | Y | Тело сообщения, отправляемого в точку доступа |
Таблица 4. Атрибуты Group
| Имя атрибута | Тип | Обязательный атрибут? | Описание |
|---|---|---|---|
| Name | string | Y | Имя группы тестов |
На рисунках 2, 3 и 4 показаны шаги, выполняемые ITF в процессе создания тестов, групп и точек доступа, запуска тестов и их групп, а также генерации отчетов о выполнении тестов.
Рисунок 2. Создание теста, группы тестов и точек доступа
Входные данные
- Имя теста.
- Описание теста.
- Список групп, к которым принадлежит данный тест.
- Входные и выходные сообщения. Они состоят из следующих атрибутов:
- ссылка на точку доступа;
- сообщения Request и Reply для точек доступа типа WS;
- тело сообщения (Body) для точек доступа типа JMS;
- атрибуты, заменяющие соответствующие поля точки доступа.
- Ожидаемое число записей GAL/GEH.
- Ожидаемый результат выполнения теста: Success, Failure или Error.
- Тайм-аут – время ожидания отклика в выходной точке доступа после отправки сообщения во входную точку доступа.
Пример входных данных
<?xml version = "1.0" encoding = "UTF-8"?>
<Input xmlns:def = "http://www.ibm.com/ams/common/unittestframework/definition">
<TestCase>
<def:Name>Sample</def:Name>
<def:Description>Sample TestCase for illustration</def:Description>
<def:Outcome>S</def:Outcome>
<def:InputEndpoint>
<def:Name>SampleWSEndpoint</def:Name>
<def:JMSPriority>7</def:JMSPriority>
<def:Request><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=
"http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body></SOAP-ENV:Body></SOAP-ENV:Envelope>]]>
</def:Request>
<def:Reply>Some reply with UNIQUE_TRANSACTIONID_REPLACEMENT
</def:Reply>
</def:InputEndpoint>
<def:OutputEndpoint>
<def:Name>SampleJMSEndpoint</def:Name>
<def:Body>Some body with UNIQUE_TRANSACTIONID_REPLACEMENT
</def:Body>
</def:OutputEndpoint>
<def:Timeout>10</def:Timeout>
<def:ExpectedGALCount>1</def:ExpectedGALCount>
<def:ExpectedGEHCount>0</def:ExpectedGEHCount>
<def:Group>
<def:Name>Sample</def:Name>
</def:Group>
</TestCase>
</Input>
|
Выполняемые действия
- Получение входных данных.
- Проверка существования подходящих описаний в базе данных.
- Создание точек доступа (при необходимости).
- Создание групп (при необходимости).
- Создание тестов.
- Определение отношений между тестами и группами тестов.
- Генерация и выдача сводного отчета с указанием положительных и отрицательных тестов, их групп тестов и точек доступа.
Результат: созданные тесты, группа тестов и точки доступа.
Рисунок 3. Выполнение тестов и групп тестов
Входные данные
- Имя теста.
- Имя группы тестов.
Пример входных данных
<?xml version = "1.0" encoding = "UTF-8"?>
<Input>
<TestCases>
<TestCase xmlns = "http://www.ibm.com/ams/common/unittestframework/execution">
<Name xmlns = "http://www.ibm.com/ams/common/unittestframework/definition">
testcase1</Name>
</TestCase>
</TestCases>
</Input>
|
Основные шаги
- Получение входных данных.
- Выборка всех подходящих тестов из базы данных на основе полученной на вход информации.
- Запуск отдельного процесса для каждого теста.
- Сбор результатов выполнения каждого теста.
- Обновление сводной информации в базе данных.
- Выдача сводной и детализированной информации пользователю.
Вспомогательные шаги
- Проверка типов сообщений точек доступа.
- Запуск объекта-слушателя выходной точки доступа.
- Отправка сообщений через входную точку доступа.
- Ожидание отклика в случае, если тип входной точки доступа – WS.
- Отправка отклика на полученное сообщение в случае, если тип выходной точки доступа – WS.
- Сравнение сообщения, полученного через выходную точку доступа, с ожидаемым сообщением, если установлен флаг сравнения. Подробная информация об операции сравнения в ITF приведена в описании компонента валидации ниже.
- Проверка отклика на входящее сообщение (в определенных случаях и при установленном флаге сравнения).
- Подсчет числа журнальных записей GAL и GEH и сравнение с ожидаемым числом записей.
- Выдача результатов.
Результат: результаты выполнения теста или группы тестов, сохраненные в базе данных.
Компонент валидации
Ожидаемые результаты могут содержать динамические поля, например временные метки, ID корреляции и т.д. В таких случаях они должны быть заменены по шаблону исключения (exclusion pattern), который заставляет ITF выполнять сравнение полученных результатов с ожидаемыми на основе регулярных выражений. При отсутствии этой функции сравнение всегда было бы отрицательным. Если ожидаемые результаты не содержат динамических полей, ITF выполняет обыкновенное строковое сравнение.
Рисунок 4. Генерация отчета о выполнении тестов
Входные данные
- Имя теста.
- Имя группы тестов.
- Номер версии.
Пример входных данных
<?xml version = "1.0" encoding = "UTF-8"?>
<Input>
<Report>
<TestCase xmlns =
"http://www.ibm.com/ams/common/unittestframework/report">
<Name xmlns =
"http://www.ibm.com/ams/common/unittestframework/definition">testcase1</Name>
<Version xmlns =
"http://www.ibm.com/ams/common/unittestframework/definition">testcase1</Version>
</TestCase>
</Report>
</Input>
|
Шаги
- Получение тестов или групп тестов и версии.
- Запрос к базе данных ITF для получения результатов выполнения.
- Генерация файла с суммарной информацией о выполнении.
Результат: сформированный сводный отчет о выполнении тестов.
Цикл тестирования ITF показан на рисунке 5. Разработчик или специалист по тестированию указывает тесты, группы тестов и точки доступа, описывая их при помощи шаблонов входных данных, предоставляемых ITF. Инфраструктура самостоятельно создает экземпляры TestCase, Group и Endpoint, сохраняя их в базе данных. В процессе выполнения тестов тестируемый код (code being tested – CBT) получает входные данные от ITF через одну из описанных точек доступа. После выполнения CBT отправляет отклик обратно в ITF через одну из выходных точек доступа. При необходимости CBT может отправлять отклики через входные точки, а также может получать отклики от ITF через выходные точки доступа (рисунок 6).
Рисунок 5. Цикл тестирования в ITF
Рисунок 6. Взаимодействие CBT и ITF
Далее мы рассмотрим четыре типа взаимодействия CBT и ITF, которые могут применяться в зависимости от типа SOI-интеграции.
- JMS-JMS.
- Web-сервис-Web-сервис.
- JMS-Web-сервис.
- Web-сервис-JMS.
В этом случае входными и выходными точками доступа CBT являются очереди JMS, а следовательно, нет необходимости в откликах. ITF посылает сообщения в входную очередь CBT и получает сообщения через выходную очередь. Инфраструктура сравнивает выходное сообщение с ожидаемым сообщением, указанным для данного теста. Результат этого сравнения определяет общий результат выполнения теста (рисунок 7).
Рисунок 7. Взаимодействие типа "JMS–JMS"
Взаимодействие типа "Web-сервис–Web-сервис"
В этом случае входными и выходными точками доступа CBT являются Web-сервисы. Вследствие этого оба отклика являются обязательными. Входящее сообщение отправляется во входную очередь CBT, после чего ITF ждет отклика, который должен поступить в очередь, указанную в поле replyTo запроса. После получения выходных данных от CBT ITF сравнивает его с ожидаемым ответом. Инфраструктура эмулирует Web-сервис, вызываемый тестируемым кодом, отправляя заранее подготовленный ответ в выходную очередь, имя которой CBT указывает в поле replyTo. В результате CBT отправляет ответ во входную очередь, указанную в поле replyTo, и он также попадает в ITF. После этого инфраструктура сравнивает ответ, полученный через входную точку доступа, с ожидаемым ответом и на основании этого определяет признак успешности теста (рисунок 8).
Рисунок 8. Взаимодействие типа "Web-сервис–Web-сервис"
Взаимодействие типа "JMS–Web-сервис"
В этом случае CBT не генерирует отклик на входящий запрос, но ожидает отклик на собственный ответ. Вначале ITF отправляет сообщение во входную очередь. CBT обрабатывает поступившие данные и отправляет ответ в выходную очередь. Этот ответ попадает в ITF и сравнивает с ожидаемым ответом для данного теста. При этом инфраструктура имитирует вызываемый Web-сервис, отправляя заранее подготовленный отклик в выходную очередь, указанную CBT в поле replyTo (рисунок 9).
Рисунок 9. Взаимодействие типа "JMS–Web-сервис"
Взаимодействие типа "Web-сервис–JMS"
При этом типе взаимодействия CBT откликается на входящий запрос, но не ожидает отклика на сообщение, которое было отправлено в выходную очередь. Вначале ITF отправляет сообщение во входную очередь. Получив на вход запрос, CBT обрабатывает его и отправляет ответ в выходную очередь, который затем попадает в ITF и сравнивается с ожидаемым результатом. Кроме того, ITF ожидает, что CBT отправит отклик в очередь, указанную в поле replyTo. Этот отклик также проверяется на соответствие ожидаемому результату. В свою очередь CBT не ожидает ответа на сообщение, которое он отправляет в выходную очередь (рисунок 10).
Рисунок 10. Взаимодействие типа "Web-сервис–JMS"
- ITF использует шесть таблиц для хранения всей необходимой информации (см. таблицы 5–10).
- Таблица UT_DEF_TEST_CASE содержит все данные, относящиеся к тестам.
- Таблица UT_DEF_GROUP содержит все данные, относящиеся к группам тестов.
- Таблица UT_DEF_ENDPOINT coдержит все атрибуты точек доступа.
- Таблица UT_DEF_CASE_GROUP_REL содержит данные, связывающие тесты и группы тестов.
- Таблица UT_EXE_SUMMARY содержит сводную информацию о результатах выполнения тестов.
- Таблица UT_EXE_DETAILS содержит детализированную информацию о результатах выполнения тестов.
Рисунок 11. ER-модель базы данных
Таблица 5. Таблица UT_DEF_TEST_CASE
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | GUID | Первичный ключ (PK) |
| name | varchar2 | 1024 | Уникальное имя каждого теста | Уникальный атрибут |
| description | varchar2 | 4000 | Описание теста | - |
| created_by | varchar2 | 1024 | Имя пользователя, создавшего тест | - |
| create_date | timestamp | - | Время создания теста | Системное время |
| expected_outcome | char | 1 | Флаг, задающий ожидаемый результат теста. S означает Success, F – Failure, E – Error. Success говорит о том, что все проверки прошли успешно, в том числе проверки количества записей GAL и GEH. Failure означает, что тест был выполнен, но полученный результат не совпал с ожидаемым. Error означает, что тест был либо завершен по тайм-ауту, либо произошла ошибка. Если в данной колонке указано F, инфраструктура не будет сравнивать полученный результат с ожидаемым. Если задано значение "E", инфраструктура будет ожидать тайм-аута. При этом инфраструктура всегда будет проверять число записей GAL/GEH в журнале. | - |
| input_message | clob | - | Сообщение, поступающее во входную очередь. В нем можно указывать строку "UNIQUE_TRANSACTIONID_REPLACEMENT", которая должна быть заменена на идентификатор транзакции. | - |
| output_message | clob | - | Ожидаемое выходное сообщение, которое будет сравниваться с сообщением, полученным от CBT. В нем можно указывать строку "UNIQUE_TRANSACTIONID_REPLACEMENT", которая должна быть заменена на идентификатор транзакции. | - |
| input_endpoint | varchar2 | 256 | ID, соответствующий значению в таблице ut_def_endpoint. | Внешний ключ (FK) |
| output_endpoint | varchar2 | 256 | ID, соответствующий значению в таблице ut_def_endpoint. | Внешний ключ (FK) |
| timeout_interval | number | - | Интервал в миллисекундах. Если в течение этого интервала ITF не получает выходного сообщения, она помечает тест как отрицательный (failure). | - |
| expected_gal_count | number | - | Ожидаемое число записей GAL, содержащих указанный идентификатор транзакции. | - |
| expected_geh_count | number | - | Ожидаемое число записей GEH, содержащих указанный идентификатор транзакции. | - |
Таблица 6. Таблица UT_DEF_GROUP
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | GUID | Первичный ключ (PK) |
| name | varchar2 | 1024 | Уникальное имя группы | Уникальный атрибут |
| description | varchar2 | 4000 | Описание группы | - |
| created_by | varchar2 | 1024 | Имя пользователя, создавшего группу | - |
| create_date | timestamp | - | Время создания группы | системное время |
Таблица 7. Таблица UT_DEF_ENDPOINT
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | GUID | Первичный ключ (PK) |
| name | varchar2 | 1024 | Уникальное имя точки доступа | Уникальный атрибут |
| description | varchar2 | 4000 | Описание точки доступа | - |
| created_by | varchar2 | 1024 | Имя пользователя, создавшего точку доступа | - |
| create_date | timestamp | - | Время создания | Системное время |
| type | varchar2 | 256 | JMS или WS | - |
| message_type | varchar2 | 256 | Байты или текст | - |
| encoding | varchar2 | 256 | Кодировка байтовых сообщений | По умолчанию UTF8 |
| compare | char | 1 | Y или N | - |
| destination_queue | varchar2 | 1024 | Очередь назначения для запросов | - |
| reply_to_queue | varchar2 | 1024 | Очередь, в которую должны поступать отклики | - |
| priority | number | - | Приоритет запросов | - |
| delivery_mode | varchar2 | 1024 | Режим доставки сообщений | - |
| correlation_id | varchar2 | 1024 | ID корреляции сообщений | - |
| timeout | number | - | Значение тайм-аута | - |
| soap_action | varchar2 | 1024 | Действие SOAP (Action) для Web-сервиса | - |
Таблица 8. Таблица UT_DEF_CASE_GROUP_REL
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | Уникальный идентификатор. ITF использует GUID. | PK |
| created_by | varchar2 | 1024 | Имя пользователя, создавшего отношение | - |
| create_date | timestamp | - | Время создания | Системное время |
| def_group_id | varchar2 | 256 | ID для связи с таблицей ut_def_group | FK |
| def_test_case_id | varchar2 | 256 | ID для связи с таблицей ut_def_test_case | FK |
Таблица 9. Таблица UT_EXE_SUMMARY
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | GUID | PK |
| user_name | varchar2 | 1024 | Имя пользователя, выполнившего тест | - |
| description | varchar2 | 4000 | Описание выполненных тестов | - |
| external_reference | varchar2 | 1024 | Может содержать информацию о количестве ошибок и т.д. | - |
| test_request | clob | - | Полная версия запроса для тестирования | - |
| start_time | timestamp | - | Время начала выполнения теста | - |
| end_time | timestamp | - | Время завершения теста | - |
| success_count | number | - | Число тестов с результатом Success | - |
| failure_count | number | - | Число тестов с результатом Failure | - |
| error_count | number | - | Число тестов с результатом Error | - |
| total_count | number | - | Общее число выполненных тестов | - |
Таблица 10. Таблица UT_EXE_DETAILS
| Столбец | Тип | Размер | Описание | Информация для администратора |
|---|---|---|---|---|
| id | varchar2 | 256 | GUID | PK |
| exe_summary_id | varchar2 | 256 | ID для связи с таблицей ut_exe_summary | FK |
| def_test_case_id | varchar2 | 256 | ID для связи с таблицей ut_def_test_case | FK |
| actual_outcome | char | 1 | Результат теста (S, F или E). Расшифровка приведена в поле ut_def_test_case.outcome. | - |
| test_outcome | char | 1 | Окончательный признак успешности теста после сравнения с ожидаемым результатом (S, F или E). Расшифровка приведена в поле ut_def_test_case.outcome. | - |
| test_input | clob | - | Входные данные | - |
| test_output | clob | - | Выходные данные | - |
| start_time | timestamp | - | Время начала выполнения теста | - |
| end_time | timestamp | - | Время завершения теста | - |
| gal_count | number | - | Полученное число записей GAL | - |
| geh_count | number | - | Полученное число записей GEH | - |
| error | varchar2 | 4000 | Сообщения об ошибках, их описания, стек вызовов при исключениях и т.д. | - |
ITF представляет собой эффективное средство выполнения различных критически важных задач при тестировании систем SOI. Тесты ITF могут быть легко созданы и интегрированы в существующую инфраструктуру промежуточного слоя. Применение ITF группами разработчиков и специалистов по тестированию приводит к масштабным положительным эффектам. В частности, программное обеспечение, созданное группами разработчиков, использующих ITF, как правило, содержит меньшее число дефектов по сравнению с тем, которое было создано без применения этой инфраструктуры.
- Оригинал статьи: Automated Interface Test Framework (Сравана Кришна и Саран Санкар, developerWorks, апрель 2010 г.). (EN)
- В магазине технической литературы содержатся книги на эту и другие темы. (EN)
- Загрузите ознакомительные версии продуктов IBM, а также опробуйте средства разработки приложений и промежуточное программное обеспечение IBM, в частности DB2®, Lotus®, Rational®, Tivoli® и WebSphere® на сайте online-тестирования IBM SOA Sandbox. (EN)