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


Практическое руководство. Создание пользовательского редактора текста HTTP для редактора веб-тестов производительности

Можно создать пользовательский редактор содержимого, который позволяет изменить содержимое тела строки или бинарное содержимое запроса веб-службы, например, протокол SOAP, REST, ASMX, WCF RIA и других типов тела запроса веб-службы.

2 Типа редакторов, которые можно реализовать:

  • Редактор строк содержимого это реализуется с помощью интерфейса IStringHttpBodyEditorPlugin.

  • Редактор бинарный содержимого это реализуется с помощью интерфейса IBinaryHttpBodyEditorPlugin.

Эти интерфейсы содержатся в пространстве имен Microsoft.VisualStudio.TestTools.WebTesting.

Требования

  • Visual Studio Ultimate

Создание проекта библиотеки элементов управления Windows

Создание пользовательского элемента управления с использованием проекта библиотеки элементов управления Windows

  1. В Visual Studio Ultimate в меню Файл выберите пункт Создать и затем выберите Проект.

    Откроется диалоговое окно Новый проект.

  2. В области Установленные шаблоны разверните узел Visual Basic или Visual C# в зависимости от используемого языка программирования и щелкните узел Windows.

    ПримечаниеПримечание

    В этом примере используется Visual C#.

  3. В списке шаблонов выберите пункт Библиотека элементов управления Windows Forms.

  4. В текстовом поле " имя " введите имя, например Имя MessageEditors и выберите команду ОК.

    ПримечаниеПримечание

    В этом примере используется имя MessageEditors.

    Проект добавляется в новое решение, и в конструкторе отображается объект UserControl с именем UserControl1.cs.

  5. Перетащите объект RichTextBox из категории Стандартные элементы управленияпанели элементов в область элемента управления UserControl1.

  6. Выберите глиф тегов действий (Глиф смарт-тэга) в правом верхнем углу элемента управления RichTextBox, а затем и выберите Закрепить в родительском контейнере.

  7. В обозревателе решений щелкните правой кнопкой мыши проект библиотеки Windows Forms и выберите пункт Свойства.

  8. В окне "Свойства" перейдите на вкладку Приложение.

  9. В раскрывающемся списке Требуемая версия .NET Framework выберите значение .NET Framework 4.

  10. Откроется диалоговое окно "Изменение целевой рабочей среды".

  11. Выберите Да.

  12. В обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите команду Добавить ссылку.

  13. Появится диалоговое окно Добавление ссылки.

  14. Выберите. прокрутка вниз на вкладку сеть, и выберите Microsoft.VisualStudio.QualityTools.WebTestFramework, а затем выберите ОК.

  15. Если конструктор представлений еще не открыт, в обозревателе решений щелкните правой кнопкой мыши узел UserControl1.cs и выберите команду Открыть в конструкторе.

  16. Щелкните правой кнопкой мыши в любом месте рабочей области конструирования и выберите команду Перейти к коду.

  17. (Необязательно) Присвойте классу и конструктору из элемента управления UserControl1 значащее имя, например MessageEditorControl:

    ПримечаниеПримечание

    В этом примере используется имя MessageEditorControl.

    namespace MessageEditors
    {
        public partial class MessageEditorControl : UserControl
        {
            public MessageEditorControl()
            {
                InitializeComponent();
            }
        }
    }
    
  18. Добавьте следующие свойства для поддержки получения и задания текста в элементе управления RichTextBox1.Интерфейсом IStringHttpBodyEditorPlugin используется свойство EditString, а интерфейсом IBinaryHttpBodyEditorPlugin — свойство EditByteArray:

            public String EditString
            {
                get
                {
                    return this.richTextBox1.Text;
                }
                set
                {
                    this.richTextBox1.Text = value;
                }
            }
    
    public byte[] EditByteArray
            {
                get
                {
                    return System.Convert.FromBase64String(richTextBox1.Text);
                }
                set
                {
                    richTextBox1.Text = System.Convert.ToBase64String(value, 0, value.Length);
                }
            }
    

Добавление класса для проекта библиотеки элементов управления Windows

Добавьте в проект класс.Этот класс будет использоваться для реализации интерфейсов IStringHttpBodyEditorPlugin и IBinaryHttpBodyEditorPlugin.

Обзор кода данной процедуры

Для объекта UserControl с именем MessageEditorControl, который был создан в предыдущей процедуре, создается экземпляр с именем messageEditorControl:

private MessageEditorControl messageEditorControl

Экземпляр messageEditorControl размещается в диалоговом окне подключаемого модуля, которое создается методом CreateEditor.Кроме того, элемент управления RichTextBox экземпляра messageEditorControl заполняется содержимым в интерфейсе IHttpBody.Однако создание подключаемого модуля возможно, только если метод SupportsContentType возвращает значение true.В случае данного редактора метод SupportsContentType возвращает значение true, если свойство ContentType интерфейса IHttpBody содержит значение "xml".

После того как пользователь завершит изменение основного текста строки и нажмет кнопку ОК в диалоговом окне подключаемого модуля, вызывается метод GetNewValue для получения измененного текста в виде строки и обновления текста строки запроса в редакторе веб-тестов производительности.

Создание класса и реализация кода интерфейса IStringHttpBodyEditorPlugin

  1. В обозревателе решений щелкните правой кнопкой мыши проект библиотеки элементов управления Windows Forms и выберите команду Добавить новый элемент.

  2. Откроется диалоговое окно Добавление нового элемента.

  3. Щелкните Класс.

  4. В текстовом поле Имя введите значащее имя класса, например MessageEditorPlugins.

  5. Выберите Добавить.

    В проект добавляется класс Class1, который отображается в редакторе кода.

  6. В редакторе кода добавьте следующий оператор using:

    using Microsoft.VisualStudio.TestTools.WebTesting;
    
  7. Напишите или скопируйте следующий код, чтобы создать экземпляр класса XmlMessageEditor из интерфейса IStringHttpBodyEditorPlugin и реализовать требуемые методы:

        /// <summary>
        /// Editor for generic text based hierarchical messages such as XML and JSON.
        /// </summary>
        public class XmlMessageEditor : IStringHttpBodyEditorPlugin
        {
            public XmlMessageEditor()
            {
            }
    
            /// <summary>
            /// Determine if this plugin supports the content type.
            /// </summary>
            /// <param name="contentType">The content type to test.</param>
            /// <returns>Returns true if the plugin supports the specified content type.</returns>
            public bool SupportsContentType(string contentType)
            {
                return contentType.ToLower().Contains("xml");
            }
    
            /// <summary>
            /// Create a UserControl to edit the specified bytes.  
            /// This control will be hosted in the
            /// plugin dialog which provides OK and Cancel buttons.
            /// </summary>
            /// <param name="contentType">The content type of the BinaryHttpBody.</param>
            /// <param name="initialValue">The bytes to edit.  The bytes are the payload of a BinaryHttpBody.</param>
            /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns>
            public object CreateEditor(string contentType, string initialValue)
            {
                messageEditorControl = new MessageEditorControl();
                messageEditorControl.EditString = initialValue;
                return this.messageEditorControl;
            }
    
            /// <summary>
            /// Gets the edited bytes after the OK button is clicked on the plugin dialog.
            /// </summary>
            public string GetNewValue()
            {
                return messageEditorControl.EditString;
            }
    
            private MessageEditorControl messageEditorControl;
        }
    

Добавление интерфейса IBinaryHttpBodyEditorPlugin в класс

Реализовать интерфейс IBinaryHttpBodyEditorPlugin.

Обзор кода данной процедуры

Реализация кода интерфейса IBinaryHttpBodyEditorPlugin аналогична реализации интерфейса IStringHttpBodyEditorPlugin, рассмотренной в предыдущей процедуре.Однако в двоичной версии используется массив байтов для обработки двоичных данных, а не строки.

Для объекта UserControl с именем MessageEditorControl, который был создан в первой процедуре, создается экземпляр с именем messageEditorControl:

private MessageEditorControl messageEditorControl

Экземпляр messageEditorControl размещается в диалоговом окне подключаемого модуля, которое создается методом CreateEditor.Кроме того, элемент управления RichTextBox экземпляра messageEditorControl заполняется содержимым в интерфейсе IHttpBody.Однако создание подключаемого модуля возможно, только если метод SupportsContentType возвращает значение true.В случае данного редактора метод SupportsContentType возвращает значение true, если свойство ContentType интерфейса IHttpBody содержит значение "msbin1".

После того как пользователь завершит изменение основного текста строки и нажмет кнопку ОК в диалоговом окне подключаемого модуля, вызывается метод GetNewValue для получения измененного текста в виде строки и обновления свойства BinaryHttpBody.Data запроса в редакторе веб-тестов производительности.

Добавление интерфейса IBinaryHttpBodyEditorPlugin в класс

  • Напишите или скопируйте следующий код внутри класса XmlMessageEditor, добавленного в предыдущей процедуре, чтобы создать экземпляр класса Msbin1MessageEditor из интерфейса IBinaryHttpBodyEditorPlugin и реализовать требуемые методы:

    /// <summary>
        /// Editor for MSBin1 content type (WCF messages)
        /// </summary>
        public class Msbin1MessageEditor : IBinaryHttpBodyEditorPlugin
        {
            /// <summary>
            /// 
            /// </summary>
            public Msbin1MessageEditor()
            {
            }
    
            /// <summary>
            /// Determine if this plugin supports a content type.
            /// </summary>
            /// <param name="contentType">The content type to test.</param>
            /// <returns>Returns true if the plugin supports the specified content type.</returns>
            public bool SupportsContentType(string contentType)
            {
                return contentType.ToLower().Contains("msbin1");
            }
    
            /// <summary>
            /// Create a UserControl to edit the specified bytes.  This control will be hosted in the
            /// plugin dialog which provides OK and Cancel buttons.
            /// </summary>
            /// <param name="contentType">The content type of the BinaryHttpBody.</param>
            /// <param name="initialValue">The bytes to edit.  The bytes are the payload of a BinaryHttpBody.</param>
            /// <returns>A UserControl capable of displaying and editing the byte array value of the specified content type.</returns>
            public object CreateEditor(string contentType, byte[] initialValue)
            {
                messageEditorControl = new MessageEditorControl();
                messageEditorControl.EditByteArray = initialValue;
                return messageEditorControl;
            }
    
            /// <summary>
            /// Gets the edited bytes after the OK button is clicked on the plugin dialog.
            /// </summary>
            public byte[] GetNewValue()
            {
                return messageEditorControl.EditByteArray;
            }
    
            private MessageEditorControl messageEditorControl;
            private object originalMessage;
        }
    

Построение и развертывание подключаемых модулей

Построение и развертывание результирующей библиотеки DLL для интерфейсов IStringHttpBodyEditorPlugin и IBinaryHttpBodyEditorPlugin

  1. В меню выберите конструкцию <Windows Form Control Library project name>.

  2. Выйдите из Visual Studio Ultimate.

    ПримечаниеПримечание

    Необходимо закрыть все экземпляры Visual Studio Ultimate, чтобы снять блокировку DLL-файла перед его копированием.

  3. Копирование итогового dll-файла из проекта bin \ debug (например, MessageEditors.dll) в папке %ProgramFiles% \ Microsoft Visual Studio 11,0 \ Common7 \ IDE \ PrivateAssemblies среда разработки \ WebTestPlugins.

  4. Откройте Visual Studio Ultimate.

    DLL-файл должен быть зарегистрирован в Visual Studio Ultimate.

Проверка подключаемых модулей с помощью веб-теста производительности

Тестирование подключаемых модулей

  1. Создайте тестовый проект.

  2. Создайте веб-тест производительности и введите в браузере URL-адрес веб-службы, например http://dev.virtualearth.net/webservices/v1/metadata/searchservice/dev.virtualearth.net.webservices.v1.search.wsdl.

  3. После завершения записи в редакторе веб-тестов производительности разверните запрос веб-службы и выберите узел Текст строки или Двоичный основной текст.

  4. В окне свойств или выделите текст строки или тело бинарный и нажмите кнопку с многоточием (…).

    Откроется диалоговое окно Изменение данных основного текста HTTP.

  5. Теперь можно правка данные и нажмите кнопку " ОК ", чтобы.При этом вызывается метод GetNewValue для обновления содержимого в интерфейсе IHttpBody.

Компиляция кода

  • Убедитесь, что платформа, используемая для проекта библиотеки элементов управления Windows .NET Framework 4,5.По умолчанию целевой объект проекта библиотеки элементов управления Windows клиента платформа .NET Framework 4,5, которая не допускает добавление ссылки Microsoft.VisualStudio.QualityTools.WebTestFramework.

    Дополнительные сведения см. в разделе Страница "Приложение" в конструкторе проектов (C#).

См. также

Задачи

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

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

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

Практическое руководство. Создание подключаемого модуля нагрузочных тестов

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

Практическое руководство. Создание надстройки Visual Studio для средства просмотра результатов веб-тестов производительности

Ссылки

IStringHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IBinaryHttpBodyEditorPlugin

CreateEditor

SupportsContentType

GetNewValue

IHttpBody

ContentType

UserControl

RichTextBox

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

Создание и применение пользовательских подключаемых модулей для нагрузочных тестов и веб-тестов производительности