Condividi tramite


Procedura: creare un plug-in di registrazione

Le informazioni contenute in questo argomento sono valide per:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

Argomento applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Il plug-in WebTestRecorderPlugin consente di modificare un test delle prestazioni Web registrato. La modifica avviene dopo avere fatto clic su Interrompi nella barra degli strumenti della Registrazione test prestazioni Web ma prima che il test sia stato salvato e presentato nell'Editor test prestazioni Web.

La problematica principale che un plug-in di registrazione consente di affrontare è l'esecuzione della propria correlazione personalizzata dei parametri dinamici. Grazie alla funzionalità di correlazione incorporata, i test delle prestazioni Web sono in grado di rilevare i parametri dinamici presenti nella registrazione Web dopo il completamento, oppure quando si utilizza l'opzione Promuovi parametri dinamici a parametri di test Web presente nella barra degli strumenti dell'Editor test prestazioni Web. Per ulteriori informazioni, vedere Procedura: risolvere i problemi relativi alla riproduzione dei test delle prestazioni Web causati da parametri dinamici. La funzionalità di rilevamento incorporata non è tuttavia sempre in grado di trovare tutti i parametri dinamici. Non troverebbe ad esempio un ID sessione, il cui valore viene in genere modificato ogni 5 - 30 minuti. Il processo di correlazione andrà pertanto eseguito manualmente. Per ulteriori informazioni, vedere Procedura: alzare di livello i parametri dinamici a parametri dei test delle prestazioni Web.

Il plug-in WebTestRecorderPlugin consente di scrivere il codice per realizzare un plug-in personalizzato, che potrà eseguire la correlazione o modificare il test delle prestazioni Web in vari modi prima del salvataggio e della presentazione nell'Editor test prestazioni Web. Se pertanto si determina che una variabile dinamica specifica deve essere correlata per molte registrazioni, il processo potrà essere automatizzato.

Alcuni altri scopi per i quali è possibile utilizzare un plug-in di registrazione sono l'aggiunta di regole di estrazione e convalida, l'aggiunta di parametri di contesto o la conversione di commenti in transazioni in un test delle prestazioni Web.

Nelle procedure seguenti viene illustrata la creazione di codice rudimentale per la realizzazione, la distribuzione e l'esecuzione di un plug-in di registrazione. Nel codice di esempio che segue le procedure viene dimostrato l'utilizzo di Visual C# per creare un plug-in di registrazione personalizzato per la correlazione di parametri dinamici.

Creazione di un plug-in di registrazione

Per creare un plug-in di registrazione

  1. Aprire una soluzione che contenga il progetto di test con il test delle prestazioni Web per il quale si desidera creare un plug-in di registrazione.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione, selezionare Aggiungi, quindi scegliere Nuovo progetto.

    Viene visualizzata la finestra di dialogo Aggiungi nuovo progetto.

  3. In Modelli installati selezionare Visual C#.

  4. Nell'elenco dei modelli selezionare Libreria di classi.

  5. Nella casella di testo Nome digitare un nome per il plug-in di registrazione.

    La libreria di classi viene aggiunta a Esplora soluzioni e la nuova classe viene aperta nell'Editor di codice.

  6. In Esplora soluzioni, nella nuova cartella di progetto Libreria di classi, fare clic con il pulsante destro del mouse sulla cartella Riferimenti e selezionare Aggiungi riferimento.

    SuggerimentoSuggerimento

    Un esempio di una nuova cartella di progetto Libreria di classi è RecorderPlugins.

    Verrà visualizzata la finestra di dialogo Aggiungi riferimento.

  7. Selezionare la scheda .NET.

  8. Scorrere verso il basso e selezionare Microsoft.VisualStudio.QualityTools.WebTestFramework quindi fare clic su OK.

    L'elemento Microsoft.VisualStudio.QualityTools.WebTestFramework viene aggiunto nella cartella Riferimenti in Esplora soluzioni.

  9. Scrivere il codice per il plug-in di registrazione. Creare innanzitutto una nuova classe pubblica derivata dalla classe WebTestRecorderPlugin.

  10. Eseguire l'override del metodo PostWebTestRecording.

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

    Gli argomenti dell'evento forniranno due oggetti da utilizzare: il risultato registrato e il test delle prestazioni Web registrato. Questo consentirà di scorrere il risultato in cerca valori determinati e passare quindi alla stessa richiesta nel test delle prestazioni Web per apportare le modifiche. È inoltre possibile modificare solo il test delle prestazioni Web per aggiungere un parametro di contesto o per applicare parametri a delle parti dell'URL.

    Nota

    Se si modifica il test delle prestazioni Web, sarà anche necessario impostare la proprietà RecordedWebTestModified su true: e.RecordedWebTestModified = true;

  11. Aggiungere codice in base a ciò che si desidera che il plug-in di registrazione esegua dopo la registrazione Web. È ad esempio possibile aggiungere codice per gestire la correlazione personalizzata, come mostrato nell'esempio sotto. È inoltre possibile creare un plug-in di registrazione, ad esempio, per la conversione di commenti in transazioni o per l'aggiunta di regole di convalida al test delle prestazioni Web.

  12. Dal menu Compila, scegliere Compila <progetto Libreria di classi>.

  13. A questo punto è necessario distribuire il plug-in di registrazione per effettuarne la registrazione in Visual Studio 2010 Ultimate.

Distribuire il plug-in di registrazione

Dopo avere compilato il plug-in di registrazione, sarà necessario posizionare il file dll risultante in uno dei due percorsi seguenti:

  • %Programmi%\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\WebTestPlugins

  • %USERPROFILE%\Documenti\Visual Studio 10\WebTestPlugins

Nota di avvisoAttenzione

Dopo avere copiato il plug-in di registrazione in uno dei due percorsi, è necessario riavviare Visual Studio 2010 Ultimate per completare la registrazione del plug-in.

Eseguire il plug-in di registrazione

Quando si crea un nuovo test delle prestazioni Web, viene visualizzata la finestra di dialogo Attiva WebTestRecordPlugins. Nella finestra di dialogo Attiva WebTestRecordPlugins vengono visualizzati tutti i plug-in disponibili per l'esecuzione.

Per eseguire il plug-in di registrazione

  1. Creare un nuovo test Web. Per ulteriori informazioni, vedere Procedura: creare un nuovo test delle prestazioni Web tramite lo strumento Registrazione test prestazioni Web.

    Verrà visualizzata la finestra di dialogo Attiva WebTestRecordPlugins.

  2. Selezionare la casella di controllo del controllo per il plug-in di registrazione, quindi fare clic su OK.

    Una volta che il test delle prestazioni Web ha completato la registrazione, verrà eseguito il nuovo plug-in di registrazione.

    Nota di avvisoAttenzione

    Quando si esegue un test delle prestazioni Web o un test di carico che utilizza il plug-in, è possibile che venga visualizzato un errore simile a quello riportato di seguito:

    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.

    L'errore si verifica se si effettuano modifiche al codice di uno qualsiasi dei plug-in e si crea una nuova versione del file DLL (Version=0.0.0.0), ma il plug-in fa ancora riferimento alla versione originale. Per risolvere il problema, attenersi ai passaggi riportati di seguito:

    1. Nei riferimenti del progetto di test, sarà presente un avviso. Rimuovere e aggiungere nuovamente il riferimento alla DLL del plug-in.

    2. Rimuovere il plug-in dal test o dal percorso appropriato, quindi aggiungerlo di nuovo.

Esempio

In questo esempio viene illustrato come creare un plug-in di registrazione del test delle prestazioni Web personalizzato per eseguire la correlazione dei parametri dinamici personalizzata.

Nota

Un listato completo del codice di esempio è riportato alla fine di questo argomento.

Revisione del codice di esempio

Scorrere il risultato per trovare la prima pagina con ReportSession

In questa parte dell'esempio di codice si scorre ogni oggetto registrato e si cerca ReportSession nel corpo della risposta.

           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)
                        {

Aggiungere una regola di estrazione

Una volta che la risposta è stata trovata, è necessario aggiungere una regola di estrazione. In questa parte dell'esempio di codice viene creata la regola di estrazione utilizzando la classe ExtractionRuleReference, quindi, nel test delle prestazioni Web, viene trovata la corretta richiesta cui aggiungere la regola di estrazione. Ciascun oggetto risultato dispone di una nuova proprietà aggiunta denominata DeclarativeWebTestItemId, che è quella utilizzata nel codice per ottenere la corretta richiesta dal test delle prestazioni 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;
           }

Sostituire i parametri della stringa di query

Vengono ora trovati tutti i parametri della stringa di query che presentano il nome ReportSession e il relativo valore viene cambiato in {{SessionId}} come mostrato in questa parte dell'esempio di codice:

           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}}";
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

Vedere anche

Attività

Procedura: creare un test Web codificato

Procedura: modificare un test delle prestazioni Web esistente utilizzando l'Editor test prestazioni Web

Riferimenti

WebTestRequestPlugin

PostWebTestRecording

ExtractionRuleReference

PostWebTestRecording

Altre risorse

Creazione e utilizzo di plug-in personalizzati per i test di carico e delle prestazioni Web