Udostępnij za pośrednictwem


Porady: tworzenie wtyczki rejestratora

WebTestRecorderPlugin umożliwia modyfikowanie nagranych testów wydajności sieci Web.Modyfikacja występuje po wybraniu Stop w pasku narzędzi rejestratora wydajności sieci Web, ale przed testem zapisywanym i przedstawianym w edytorze Testu wydajności sieci Web.

Podstawowym problemem, jaki wtyczka rejestrator pomaga rozwiązać jest wykonywanie własnej niestandardowej korelacji na parametrach dynamicznych.Dzięki wbudowanym funkcjom korelacji testy wydajności sieci Web wykrywają parametry dynamiczne w nagraniach sieci Web po zakończeniu lub po użyciu Przekształć dynamiczne parametry na parametry testu sieci Web na pasku narzędzi Edytora testów wydajności sieci Web.Aby uzyskać więcej informacji, zobacz [wycofane] Porady: rozwiązywanie problemów z odtwarzaniem testów wydajności sieci Web spowodowanych przez parametry dynamiczne.Jednakże wbudowany funkcjonalność wykrywania nie zawsze znajdzie wszystkie parametry dynamiczne.Na przykład nie odnajdzie identyfikatora sesji, który zwykle zmienia swoją wartość co 5–30 minut.W związku z tym musisz ręcznie przeprowadzić proces korelacji.Aby uzyskać więcej informacji, zobacz [wycofane] Porady: dodawanie parametrów dynamicznych do parametrów testów wydajności sieci Web.

WebTestRecorderPlugin umożliwia pisanie kodu dla własnego niestandardowego dodatku typu plug-in.Ta wtyczka (plug-in) może wykonywać korelację lub modyfikować test wydajności sieci Web na wiele sposobów przed jego zapisaniem i przedstawieniem w Edytorze test wydajności sieci Web.W związku z tym, jeśli uznasz, że określona zmienna dynamiczna musi zostać skorelowana dla wielu nagrań, możesz zautomatyzować proces.

Jest kilka innych sposobów na korzystanie z dodatku rejestratora do dodawania ekstrakcji i reguł sprawdzania poprawności, dodawania parametrów kontekstu lub konwertowania komentarzy do transakcji w teście wydajność sieci Web.

W poniższych procedurach opisano sposób tworzenia kodu szczątkowego dla wtyczki rejestratora, wdrażania dodatek typu plug-in i wykonać dodatku typu plug-in.Przykładowy kod, zgodnie z procedurami pokazuje, jak używać języka Visual C# do tworzenia niestandardowej wtyczki typu plug-in rejestratora korelacji parametrów dynamicznych.

Wymagania

  • Visual Studio Ultimate

Tworzenie wtyczki rejestratora

Aby utworzyć wtyczkę rejestratora

  1. Otwórz rozwiązanie, które zawiera projekt testu wydajności sieci Web i obciążenia z testem wydajności sieci Web, dla której chcesz utworzyć nagraną wtyczkę.

  2. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy rozwiązanie, wybierz polecenie Dodaj, a następnie wybierz polecenie Nowy projekt.

    Wyświetlane jest okno dialogowe Dodaj nowy projekt.

  3. W obszarze Zainstalowane szablony zaznacz Visual C#.

  4. Z listy szablonów wybierz opcję Biblioteka klas.

  5. W polu tekstowym Nazwa wprowadź nazwę dla zarejestrowanego dodatku.

    Biblioteka klas jest dodawana do Eksploratora rozwiązań i nowa klasa jest otwierana w edytorze kodu.

  6. W Eksploratorze rozwiązań w folderze nowego projektu biblioteki klas kliknij prawym przyciskiem myszy folder Odwołania i wybierz polecenie Dodaj odwołanie.

    PoradaPorada

    Na przykład nowy folder projektu biblioteki klas RecorderPlugins.

    Wyświetlane jest okno dialogowe Dodaj odwołanie.

  7. Wybierz kartę .NET.

  8. Przewiń w dół i wybierz Microsoft.VisualStudio.QualityTools.WebTestFramework a następnie wybierz OK.

    Microsoft.VisualStudio.QualityTools.WebTestFramework jest dodawane w folderze Odwołania w Eksploratorze rozwiązań.

  9. Zapisz kod dla dodatku rejestratora.Najpierw należy utworzyć nową klasę publiczną, która jest pochodną klasy WebTestRecorderPlugin.

  10. Zastąpienie metody PostWebTestRecording.

    public class Class1 : WebTestRecorderPlugin
        {
            public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
            {
                base.PostWebTestRecording(sender, e);
            }
        }
    

    Argumenty zdarzeń dawać będą dwa obiekty przeznaczone do pracy z nimi: wynik nagrany i nagrany test wydajności sieci Web.Pozwoli to na iterację przez przeglądanie wyników w poszukiwaniu konkretnych wartości i następnie przeskakiwanie do tego samego żądania w teście wydajności sieci Web, w celu dokonania modyfikacji.Możesz również zmodyfikować test wydajności sieci Web, jeżeli chcesz dodać parametr kontekstu lub zdefiniować parametry części adresu URL.

    [!UWAGA]

    Jeśli modyfikujesz test wydajności sieci Web, również należy ustawić właściwość RecordedWebTestModified na wartość true: e.RecordedWebTestModified = true;

  11. Dodaj więcej kodu według tego, co dodatek typu plug-in rejestratora ma wykonać po rejestrowaniu w sieci Web.Na przykład można dodać kod do obsługi niestandardowej korelacji, jak pokazano w poniższym przykładzie.Możesz również utworzyć dodatek rejestratora, do konwertowania komentarzy do transakcji lub dodawania reguł sprawdzania poprawności do testu wydajności sieci Web.

  12. W menu Kompilacja wybierz polecenie Kompiluj <nazwa projektu biblioteki klas>.

  13. Następnie należy wdrożyć zarejestrowany dodatek w celu zarejestrowania go w programie Visual Studio Ultimate.

Wdróż wtyczkę Rejestrator

Po skompilowaniu dodatku plug-in rejestratora, trzeba będzie umieścić wynikowy DLL w jednym z dwóch miejsc:

  • %ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\My Documents\Visual Studio 2013\WebTestPlugins

Informacje dotyczące przestrogiPrzestroga

Po skopiowaniu dodatku typu plug-in rejestratora do jednej z dwóch lokalizacji, należy ponownie uruchomić Visual Studio Ultimate dla dodatku plug-in, aby umożliwić zarejestrowanie.

Uruchom wtyczkę Rejestrator

Podczas tworzenia nowego testu wydajności sieci Web zobaczysz okno dialogowe Włącz WebTestRecordPlugins.Okno dialogowe Włącz WebTestRecordPlugins wyświetla wszystkie dostępne dodatki plug-in, które mogą być wykonywane.

Aby wykonać wtyczkę rejestratora

  1. Utwórz nowy test wydajności sieci Web.Aby uzyskać więcej informacji, zobacz Rejestrowanie i uruchamianie testów wydajności sieci Web [przekierowanie].

    Wyświetlone zostaje okno dialogowe Włącz WebTestRecordPlugins.

  2. Zaznacz pole wyboru dla dodatku plug-in Rejestratora i wybierz OK.

    Po zakończeniu testu wydajności sieci Web zostanie wykonany nowy dodatek plug-in rejestratora.

    Informacje dotyczące przestrogiPrzestroga

    Możesz otrzymać błąd podobny do następującego po uruchomieniu testu wydajności sieci Web lub testu obciążenia, który korzysta z Twojej wtyczki:

    Request failed: Exception in <plug-in> event: Could not load file or assembly '<"Plug-in name".dll file>, Version=<n.n.n.n>, Culture=neutral, PublicKeyToken=null' or one of its dependencies.The system cannot find the file specified.

    Dzieje się tak jeśli wprowadzasz zmiany kodu w dowolnych wtyczkach i tworzysz nową wersję biblioteki DLL (Version=0.0.0.0), ale wtyczka nadal odwołuje się do oryginalnej wersji wtyczki.Aby rozwiązać ten problem, wykonaj następujące kroki:

    1. W projekcie testu wydajności sieci Web i testu obciążenia pojawi się ostrzeżenie w odwołaniach.Usuń i ponownie dodaj odwołanie do biblioteki DLL dodatku plug-in.

    2. Usuń dodatek plug-in z testu lub odpowiedniej lokalizacji, a następnie dodaj go ponownie.

Przykład

Ten przykład przedstawia sposób tworzenia dostosowanej wtyczki Rejestratora testów wydajności sieci Web w celu wykonywania niestandardowych korelacji parametrów dynamicznych.

[!UWAGA]

Pełna lista kodów przykładowych znajduje się w dolnej części tego tematu.

Recenzowanie przykładowego kodu

Wykonuj iteracje przez wyniki w celu znalezienia pierwszej strony z obiektem ReportSession

Ta część próbki kodu iteruje przez każdy nagrany obiekt i wyszukuje treść odpowiedzi dla ReportSession.

           foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage; 
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {

Dodaj regułę ekstrakcji

Teraz gdy odpowiedź została znaleziona, należy dodać regułę wyodrębniania.Ta część przykładowego kod tworzy regułę ekstrakcji przy użyciu klasy ExtractionRuleReference, a następnie znajduje poprawne żądanie w teście wydajności sieci Web, aby dodać do niego regułę ekstrakcji.Każdy obiekt wynikowy ma dodaną nową właściwość o nazwie DeclarativeWebTestItemId, która ma być używana w kodzie w celu uzyskania poprawnego żądania z testu wydajności sieci Web.

ExtractionRuleReference ruleReference = new ExtractionRuleReference();
           ruleReference.Type = typeof(ExtractText);
           ruleReference.ContextParameterName = "SessionId";
           ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
           ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
           ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
               e.RecordedWebTestModified = true;
           }

Zamień parametry ciągu zapytania

Teraz kod znajduje wszystkie parametry ciągu zapytania, które mają wartość ReportSession jako nazwę, i zmienia wartość na {{IdentyfikatorSesji}}, jak pokazano w tej części przykładowego kodu:

           WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
           if (requestInWebTest != null)
           {
               foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
               {
                    if (param.Name.Equals("ReportSession"))
                    {
                        param.Value = "{{SessionId}}";
                    }
                }
            }
using System.ComponentModel;
using Microsoft.VisualStudio.TestTools.WebTesting;
using Microsoft.VisualStudio.TestTools.WebTesting.Rules;

namespace RecorderPlugin
{
    [DisplayName("Correlate ReportSession")]
    [Description("Adds extraction rule for Report Session and binds this to querystring parameters that use ReportSession")]
    public class CorrelateSessionId : WebTestRecorderPlugin
    {
        public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e)
        {
            //first find the session id
            bool foundId = false;
            foreach (WebTestResultUnit unit in e.RecordedWebTestResult.Children)
            {
                WebTestResultPage page = unit as WebTestResultPage;
                if (page != null)
                {
                    if (!foundId)
                    {
                        int indexOfReportSession = page.RequestResult.Response.BodyString.IndexOf("ReportSession");
                        if (indexOfReportSession > -1)
                        {
                            //add an extraction rule to this request
                            // Get the corresponding request in the Declarative Web performance test
                            ExtractionRuleReference ruleReference = new ExtractionRuleReference();

                            ruleReference.Type = typeof(ExtractText);
                            ruleReference.ContextParameterName = "SessionId";
                            ruleReference.Properties.Add(new PluginOrRuleProperty("EndsWith", "&ControlID="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("HtmlDecode", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("IgnoreCase", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Index", "0"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("Required", "True"));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("StartsWith", "ReportSession="));
                            ruleReference.Properties.Add(new PluginOrRuleProperty("UseRegularExpression", "False"));

                            WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                            if (requestInWebTest != null)
                            {
                                requestInWebTest.ExtractionRuleReferences.Add(ruleReference);
                                e.RecordedWebTestModified = true;
                            }
                            foundId = true;

                        }
                    }
                    else
                    {
                        //now update query string parameters
                        WebTestRequest requestInWebTest = e.RecordedWebTest.GetItem(page.DeclarativeWebTestItemId) as WebTestRequest;
                        if (requestInWebTest != null)
                        {
                            foreach (QueryStringParameter param in requestInWebTest.QueryStringParameters)
                            {
                                if (param.Name.Equals("ReportSession"))
                                {
                                    param.Value = "{{SessionId}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Zobacz też

Zadania

[wycofane] Porady: tworzenie kodowanego testu wydajności sieci Web

Informacje

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Inne zasoby

Tworzenie niestandardowych kodów i wtyczek dla testów obciążeń

Porady: edytowanie istniejącego testu wydajności sieci Web za pomocą edytora testu wydajności sieci Web