An important part of loadtesting with Markov chains is choosing which transition the test should take. This boils down to generating a random number and then seeing in which of the transitions in the probability matrix that number belongs to.
The plugin code below generates a random number between your specified lower- and upper bound and places it into the specified context parameter. Its very similar to the out-of-the box plugin. However Visual Studio’s plugin can only be executed once when a webtest starts. I needed a new random number every time that my loops executes.
using System; using System.ComponentModel; using Microsoft.VisualStudio.TestTools.WebTesting; using Microsoft.VisualStudio.TestTools.WebTesting.Rules; namespace LoadTestPlugins { [DisplayNameAttribute("Generate random number")] [DescriptionAttribute("Generates a random number during a request")] public class GenerateRandomNumber : WebTestRequestPlugin { #region Methods private void GenerateIt(WebTestContext Context) { Context[this.ContextParameterName] = new Random().Next(this.LowerBound, this.UpperBound); } public override void PostRequest(object sender, PostRequestEventArgs e) { if(this.BeforeRequest == false) { this.GenerateIt(e.WebTest.Context); } } public override void PreRequest(object sender, PreRequestEventArgs e) { if(this.BeforeRequest == true) { this.GenerateIt(e.WebTest.Context); } } #endregion #region Properties [Description("Name of context parameter to store the number in"), DisplayName("Context parameter"), IsContextParameterName(true)] public string ContextParameterName {get; set;} [Description("The lower bound"), DisplayName("Lower bound"), DefaultValue(1)] public Int32 LowerBound { get; set; } [Description("The upper (inclusive) bound"), DisplayName("Upper bound"), DefaultValue(100)] public Int32 UpperBound { get; set; } [Description("Whether to generate the number before or after the request has executed"), DisplayName("Apply before request"), DefaultValue(true)] public bool BeforeRequest { get; set; } #endregion } }