Postupy: Vytvoření modulu plugin rekordéru
WebTestRecorderPlugin umožňuje změnit zaznamenaný test výkonu webu.Změna nastane po zvolení možnosti Stop na panelu nástrojů pro test výkonu webu, ale před uložením testu a jeho prezentací v editoru testu výkonu webu.
Primární problém, který doplněk zapisovače pomáhá vyřešit, je provádění vlastní korelace dynamických parametrů.S funkcí vestavěné korelace testy výkonnosti webu rozpoznávají dynamické parametry v záznamu webu po dokončení nebo při použití tlačítka Podporovat dynamické parametry na parametry webového testu na panelu nástrojů Editor testu výkonnosti webu.Další informace naleznete v tématu [vyřazeno] Postupy: Řešení potíží s přehráváním testů výkonnosti webu vyvolaných dynamickými parametry.Nicméně integrovaná funkce detekce nenajde vždy všechny dynamické parametry.Například nenajde ID relace, které obvykle svou hodnotu mění mezi 5 až 30 minutami.Proto je nutné ručně provést proces korelace.Další informace naleznete v tématu [vyřazeno] Postupy: Převedení dynamických parametrů na parametry testu výkonnosti webu.
WebTestRecorderPlugin umožňuje napsat kód pro vlastní modul plug-in.Tento modul plug-in může provádět korelaci nebo změnu testu výkonnosti webu mnoha způsoby před uložením a zobrazením v editoru testování výkonnosti webu.Proto pokud určíte, že konkrétní dynamická proměnná musí být korelována pro mnoho vašich nahrávek, můžete automatizovat proces.
Je několik způsobů, jak lze zapisovací doplněk použít pro přidávání extrakčních a ověřovacích pravidel, přidání parametrů kontextu nebo komentáře k převodu na transakce v testu výkonu webu.
Následující postupy popisují, jak vytvořit základní kód pro rekordér doplňku, jak nasadit doplněk a jak jej spustit.Ukázkový kód používající uvedené postupy ukazuje, jak pomocí jazyka Visual C# vytvořit vlastní modul plug-in záznamníku korelace dynamického parametru.
Požadavky
- Visual Studio Ultimate
Vytvoření modulu plugin rekordéru
Vytvoření modulu plugin rekordéru
Otevřete řešení, které obsahuje test výkonu webu a test zatížení s testem výkonnosti webu, pro který chcete vytvořit doplněk rekordéru.
V Průzkumníku řešení klikněte pravým tlačítkem na řešení, vyberte možnost Přidat a poté zvolte možnost Nový projekt.
Zobrazí se dialogové okno Přidat nový projekt.
V části Nainstalované šablony klikněte na položku Visual C#.
V seznamu šablon vyberte možnost Knihovna tříd.
Do textového pole Název zadejte název modulu plug-in rekordéru.
Knihovna tříd je přidána do okna Průzkumník řešení a nová třída se otevře v editoru kódu.
V Průzkumníku řešení v nová knihovně tříd projektové složky, klikněte pravým tlačítkem na složku Odkazy a vyberte možnost Přidat odkaz.
Tip
Příklad nové složky projektu knihovny třídy je RecorderPlugins.
Zobrazí se dialogové okno Přidat odkaz.
Vyberte kartu .NET.
Projděte níže, zvolte možnost Microsoft.VisualStudio.QualityTools.WebTestFramework a klikněte na tlačítko OK.
Microsoft.VisualStudio.QualityTools.WebTestFramework je přidán do složky Odkazy v okně Průzkumník řešení.
Zadejte kód pro modul plug-in rekordéru.Nejprve vytvořte novou veřejnou třídu, která je odvozena z WebTestRecorderPlugin.
Přepíše metodu PostWebTestRecording.
public class Class1 : WebTestRecorderPlugin { public override void PostWebTestRecording(object sender, PostWebTestRecordingEventArgs e) { base.PostWebTestRecording(sender, e); } }
Argumenty události vám pro práci nabídnou dva objekty: zaznamenané výsledky a nahraný test výkonu webu.To vám umožní iterovat hledání výsledku pro určité hodnoty a pak skočit na stejný požadavek testu výkonu webu k provádění změn.Test výkonnosti web lze také upravit, pokud jste chtěli přidat parametr context nebo parametrizovat části adresy URL.
[!POZNÁMKA]
Pokud změníte test webového výkonu, je také třeba nastavit vlastnost RecordedWebTestModified na hodnotu true: e.RecordedWebTestModified = true;
Přidáte další kód podle toho, jakou akci má modul plug-in rekordéru provést po výskytu nahrávání webu.Můžete například přidat kód pro zpracování vlastní korelace, jak je znázorněno v následující ukázce.Můžete také vytvořit modul plug-in zapisovače pro takové věci jako převod komentářů k transakci nebo přidání pravidel ověřování do testu výkonnosti webu.
V nabídce Sestavení zvolte <název projektu knihovny tříd> pro sestavení.
Dále je nutné nasadit modul plug-in rekordéru, aby se zaregistroval v Visual Studio Ultimate.
Nasazení modulu plug-in rekordéru
Po kompilaci zásuvného modulu rekordéru bude třeba výslednou knihovnu DLL vložit do jednoho ze dvou umístění:
%ProgramFiles%\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\WebTestPlugins
%USERPROFILE%\My Documents\Visual Studio 2013\WebTestPlugins
![]() |
---|
Po zkopírování modulu plug-in rekordéru do jednoho ze dvou umístění je nutné restartovat Visual Studio Ultimate pro modul plug-in rekordéru, který má být zaregistrován. |
Spuštění modulu plug-in rekordéru
Při vytváření nového testu výkonnosti webu se zobrazí dialog Povolit WebTestRecordPlugins.Dialogové okno Povolit WebTestRecordPlugins zobrazí všechny dostupné doplňky, které lze spustit.
Spuštění modulu plug-in rekordéru
Vytvořte nový test výkonnosti webu.Další informace naleznete v tématu Zaznamenání a spuštění testu výkonnosti webu [přesměrováno].
Zobrazí se dialogové okno Povolit WebTestRecordPlugins.
Zaškrtněte políčko pro doplněk rekordéru a klepněte na tlačítko OK.
Po dokončení nahrávání testu výkonnosti webu bude spuštěn nový modul plug-in rekordéru.
Upozornění
Může se objevit chyba podobná následující při spuštění testu výkonnosti webu nebo zátěžového testu, který používá modul plug-in:
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.
K tomu dojde, pokud provedete změny kódu libovolného zásuvného modulu a vytvoříte novou verzi knihovny DLL (Version=0.0.0.0), ale tento modul plug-in stále odkazuje původní verzi modulu plug-in.Při opravě tohoto problému postupujte následujícím způsobem:
V projektu Test výkonu a zátěže webu se v odkazech zobrazí upozornění.Odeberte a znovu přidejte odkaz na knihovnu DLL doplňku.
Odeberte doplněk z vašeho testu nebo vhodného místa a znovu jej přidejte.
Příklad
Tento příklad ukazuje, jak vytvořit přizpůsobený modul plug-in záznamníku testu webového výkonu k provedení vlastní korelace dynamického parametru.
[!POZNÁMKA]
Úplný seznam vzorového kódu je umístěn v dolní části tohoto tématu.
Revize ukázkového kódu
Procházením skrze výsledek vyhledáte první stránku s ReportSession
Tato část ukázkového kódu prochází každý zaznamenaný objekt a hledá tělo odpovědi pro 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)
{
Přidání pravidla extrakce
Nyní, když jste nalezli odpověď, je třeba přidat pravidlo extrakce.Tato část ukázky kódu vytváří pravidlo extrakce používající třídu ExtractionRuleReference a následně vyhledá správný požadavek v testu výkonnosti web u pro přidání pravidla extrakce.Každý objekt výsledku má přidánu novou vlastnost nazvanou DeclarativeWebTestItemId, která je to, co se používá v kódu, chcete-li získat správnou žádost testu webového výkonu.
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;
}
Nahraďte parametry řetězce dotazu
Nyní kód najde všechny parametry řetězce dotazu, které mají název ReportSession, a změní hodnotu na {{Id_relace}}, jak je uvedeno v této části s ukázkou kódu:
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}}";
}
}
}
}
}
}
}
}
}
Viz také
Úkoly
[vyřazeno] Postupy: Vytvoření programového testu výkonnosti webu
Referenční dokumentace
Další zdroje
Vytvoření vlastního kódu a modulů plugin pro zátěžové testování
Postupy: Úprava existujícího testu výkonnosti webu pomocí editoru testů výkonnosti webu