Дополнительные возможности
Запуск автотестов при помощи SQL-сценария не позволяет удобным образом организовать автоматизированный механизм запуска тестов каждую ночь и доставки почтового уведомления на соответствующий список рассылки. Конечно, можно использовать инструментарий Oracle: Jobs (задания), собственные пакеты по рассылке почтовых уведомлений. Однако, для быстрого старта предлагаю использовать возможности скриптовых компонентов и, например, страниц ASP.
Для организации доступа к механизму автотестирования нам потребуется скриптовый компонент, который позволит: получить список тестов в XML-формате, запустить тест и получить протокол его выполнения.
Скриптовый компонент для запуска автотеста
Ниже приведен программный интерфейс скриптового компонента plsqlUnitScript, позволяющего запускать автотесты, например с ASP-страницы.
ProgId: Autotest.PLSQLUnit
setDb - задание имени базы данных с автотестами
getTests - возвращает список доступных автотестов в XML-виде
executeTest - запускает тест на выполнение и возвращает объект автотеста. У объекта автотеста используется метод GetLog() для получения протокола о ходе выполнения теста
Запуск автотеста с внутреннего Web-сайта
Очень удобно было бы организовать запуск автотестов с внутреннего Web-сайта, таким образом, любой разработчик сможет запустить тест, не вникая в детали работы инфраструктуры. Ниже приводится пример ASP-страницы plsqlunit.asp, на которой реализован запуск автотеста посредством скриптового компонента Autotest.PLSQLUnit.
<% Language=VBScript %>
<%
Response.AddHeader "Content-Type", "text/html; charset=windows-1251"
' создаем объект автотестирования
Set t = CreateObject("Autotest.PLSQLUnit")
' укажем базу данных, на которой выполняются автотесты
t.setDB "CORP9"
' отображаем список тестов на странице
Set xml = CreateObject("Msxml2.DOMDocument")
xml.loadXML( t.getTests("AUTOTEST") )
Set tests = xml.selectNodes("tests/test")
for i = 0 to tests.length - 1
Set package = tests.item(i).selectSingleNode("header/class")
response.write "<a href='plsqlunit.asp?test="& package.text &"'>"& package.text &"</a>"
next
If Request("test") <> "" Then
Response.Write "<div> </div><div>Результат выполнения автотеста "& Request("test") &": </div><hr>"
Set test = t.executeTest( Request("test") )
xml.loadXML( test.GetLog() )
Set lines = xml.selectNodes("log/line")
for i = 0 to lines.length - 1
Response.Write "<div>"& lines.item(i).text & "</div>"
next
' отображаем время выполнения теста
Set executiontime = xml.selectSingleNode("log/executiontime")
If IsObject(executiontime) Then
Response.Write "<div>Время выполнения: "& executiontime.text &" с.</div>"
End If
' отображаем результат
Set result = xml.selectSingleNode("log/result")
If IsObject(result) Then
If result.text = "1" Then
resultText = "тест выполнен успешно"
Else
resultText = "тест не сработал"
End If
Response.Write "<hr><div>Результат: "& resultText &"</div>"
End If
End If
%>
Результат запуска теста с ASP-страницы
AUTOTEST.EXAMPLE
Результат выполнения автотеста AUTOTEST.EXAMPLE:
Ok:Проверка умножения
Проверяем реакцию функции Ln на недопустимый параметр:null
Ok:Сгенерировано ожидаемое исключение: ORA-01403: no data found
Время выполнения: .01 с.
Результат: тест выполнен успешно