Главная » XSLT » Генерация Web-клиента для тестирования ввода данных

0

Задача

Требуется автономно протестировать процесс путем ввода данных в форму с последующим преобразованием их в сообщение, которое посылается процессу.

Решение

В этом примере мы сгенерируем инструмент для ввода данных на стороне клиента. Это будет HTML-форма, в которой можно заполнить поля, составляю­щие сообщение. В форме указано, что данные должны обрабатываться CGI-сце- нарием, который мы сгенерируем в рецепте 12.7.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" />

<xsl:param name="message"/>

<!– Ключ для поиска типов данных по имени –> <xsl:key name="dataTypes" match="Structure" use="Name" /> <xsl:key name="dataTypes" match="Primitive" use="Name" />

<xsl:key name="dataTypes" match="Array" use="Name" /> <xsl:key name="dataTypes" match="Enumeration" use="Name" />

<xsl:template match="/"> <html>

<head>

<title><xsl:value-of select="$message"/>Ввод данных</title> </head>

<body bgcolor="#FFFFFF" text="#000000">

<h1><xsl:value-of select="$message"/>Ввод данных</h1> <form name="{concat($message,’Form’)}" method="post" action="{concat(‘/cgi-bin/’,$message,’Process.pl’)}">

<xsl:apply-templates select="*/Messages/Message[Name=$message]"/> <br/><center><input type="submit" name="Submit" value="Submit"/>

</center> </form> </body> </html> </xsl:template>

<xsl:template match="Message">

<xsl:apply-templates select="key(‘dataTypes’,DataTypeName)">

<xsl:with-param name="field" select="Name"/> </xsl:apply-templates> </xsl:template>

<xsl:template match="Structure"> <xsl:param name="field"/>

<table width="100%" border="0" cellspacing="1" cellpadding="1"> <tbody>

<xsl:for-each select="Members/Member"> <tr>

<td valign="top"><xsl:value-of select="Name"/></td> <td>

<xsl:apply-templates select="key(‘dataTypes’,DataTypeName)"> <xsl:with-param name="field"

select="concat($field,’_’,Name)"/> </xsl:apply-templates> </td> </tr> </xsl:for-each> </tbody> </table> </xsl:template>

<xsl:template match="*"> <xsl:param name="field"/>

<input type="text" name="{$field}" size="30"/>

</xsl:template>

</xsl:stylesheet>

Обсуждение

Генерация пользовательского HTML-интерфейса – один из самых простых способов автоматически сгенерировать клиента для подачи тестовых данных. Но есть и другие. Например, можно было сгенерировать клиента, который выводит имя поля на stdout и читает его значение из stdin. Если вы чувствуете в себе силы, можете сгенерировать и клиента с графическим интерфейсом. К достоин­ствам решений, отличных от HTML, следует отнести тот факт, что функциональ­ность этого рецепта и рецепта 12.7 можно было бы объединить в одном приложе­нии. Но не удивляйтесь, если такой генератор окажется сложнее приводимых ниже; ведь подход на базе связки HTML-CGI опирается на уже готовую инфра­структуру: браузер и Web-сервер.

Существенным дополнением к этому рецепту стала бы генерация кода конт­роля данных на JavaScript или VBScript. Качество такого кода зависит от того, какие метаданные хранятся в репозитории. Можно было включить в него мини­мальные и максимальные допустимые значения или регулярные выражения для контроля данных.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии