Използвам тестове за производителност на Visual Studio. Искам да генерирам произволно име преди всяка моя заявка. Използвам този WebTestRequestPlugin за това:
using System;
using System.ComponentModel;
using System.Linq;
using Microsoft.VisualStudio.TestTools.WebTesting;
namespace TransCEND.Tests.Performance.Plugins
{
public class RandomStringContextParameterWebRequestPlugin : WebTestRequestPlugin
{
[Description("Name of the Context Paramter that will sotre the random string.")]
[DefaultValue("RandomString")]
public string ContextParameter { get; set; }
[Description("Length of the random string.")]
[DefaultValue(10)]
public int Length { get; set; }
[Description("Prefix for the random string.")]
[DefaultValue("")]
public string Prefix { get; set; }
private readonly string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private Random _random = new Random();
public RandomStringContextParameterWebRequestPlugin()
{
ContextParameter = "RandomString";
Prefix = "";
Length = 10;
}
public override void PreRequestDataBinding(object sender, PreRequestDataBindingEventArgs e)
{
e.WebTest.Context[ContextParameter] = CreateNewRandomString();
base.PreRequestDataBinding(sender, e);
}
private string CreateNewRandomString()
{
var randomString = new string(Enumerable.Repeat(_chars, Length).Select(s => s[_random.Next(s.Length)]).ToArray()).ToLower();
return $"{Prefix}{randomString}";
}
}
}
Проблемът ми е, че когато стартирам тест за натоварване с множество виртуални потребители, кодът на preRequest се изпълнява незабавно за първите няколко потребители, пренаписвайки контекстния параметър RandomName при всяко изпълнение. Така че, когато моите заявки действително се изпълняват, те използват едно и също произволно име, причинявайки конфликт в моя back-end код.
Въпросът ми е как мога да генерирам произволни имена за всяка моя заявка, дори когато потребителското натоварване е високо?