Makeover of SetTestParameter
- New feature that uses a Queue - Using Categories in Properties - New names and descriptions
Showing
1 changed file
with
114 additions
and
71 deletions
... | @@ -158,7 +158,7 @@ namespace LIL_VSTT_Plugins | ... | @@ -158,7 +158,7 @@ namespace LIL_VSTT_Plugins |
158 | } | 158 | } |
159 | 159 | ||
160 | [DisplayName("Set Test Context Parameters")] | 160 | [DisplayName("Set Test Context Parameters")] |
161 | [Description("(C) Copyright 2011 LIGHTS IN LINE AB\r\nSätter parametrar i testcontextet för tester i mixen hämtat från en CSV fil")] | 161 | [Description("(C) Copyright 2011 LIGHTS IN LINE AB\r\nSätter parametrar i testcontextet för tester i mixen hämtat från en CSV fil.")] |
162 | public class SetTestParameter : ILoadTestPlugin | 162 | public class SetTestParameter : ILoadTestPlugin |
163 | { | 163 | { |
164 | // Summary: | 164 | // Summary: |
... | @@ -192,16 +192,27 @@ namespace LIL_VSTT_Plugins | ... | @@ -192,16 +192,27 @@ namespace LIL_VSTT_Plugins |
192 | 192 | ||
193 | private bool stop = false; | 193 | private bool stop = false; |
194 | private int timeWait = 0; | 194 | private int timeWait = 0; |
195 | private int nextAvailableRow = 0; | ||
196 | 195 | ||
197 | private StringCollection myParams = new StringCollection(); | 196 | private StringCollection myParams = new StringCollection(); |
197 | private Queue<String> myUsedQueue = new Queue<string>(); | ||
198 | private Queue<String> myUnUsedQueue = new Queue<string>(); | ||
198 | private Random random = new Random(); | 199 | private Random random = new Random(); |
199 | private Dictionary<string, int> testIterations = new Dictionary<string, int>(); | 200 | private Dictionary<string, int> testIterations = new Dictionary<string, int>(); |
200 | private Dictionary<int, int> userRow = new Dictionary<int, int>(); | ||
201 | private LoadTest m_loadTest; | 201 | private LoadTest m_loadTest; |
202 | 202 | ||
203 | #region guiparams | 203 | #region guiparams |
204 | 204 | ||
205 | [Category("Context")] | ||
206 | [DisplayName("Parameter Namn")] | ||
207 | [Description("Ange namnet på parametern som vi ska lägga till i TestContext, om det är flera använd CSV format med kommatecken som separator.")] | ||
208 | [DefaultValue("UserName")] | ||
209 | public string Parameter_Name | ||
210 | { | ||
211 | get { return myParameterName; } | ||
212 | set { myParameterName = value; } | ||
213 | } | ||
214 | |||
215 | [Category("XDebug")] | ||
205 | [DisplayName("Debug Mode")] | 216 | [DisplayName("Debug Mode")] |
206 | [Description("Set True in order to enable Debug Mode. Each agent will log debug messages to the given Debug Log File.")] | 217 | [Description("Set True in order to enable Debug Mode. Each agent will log debug messages to the given Debug Log File.")] |
207 | [DefaultValue(false)] | 218 | [DefaultValue(false)] |
... | @@ -211,6 +222,7 @@ namespace LIL_VSTT_Plugins | ... | @@ -211,6 +222,7 @@ namespace LIL_VSTT_Plugins |
211 | set { myDebug = value; } | 222 | set { myDebug = value; } |
212 | } | 223 | } |
213 | 224 | ||
225 | [Category("XDebug")] | ||
214 | [DisplayName("Debug Log File")] | 226 | [DisplayName("Debug Log File")] |
215 | [Description("Log file path to be used for debug logging, if enabled (True)")] | 227 | [Description("Log file path to be used for debug logging, if enabled (True)")] |
216 | [DefaultValue("C:\\Temp\\SetTestParameterDebug.log")] | 228 | [DefaultValue("C:\\Temp\\SetTestParameterDebug.log")] |
... | @@ -220,8 +232,9 @@ namespace LIL_VSTT_Plugins | ... | @@ -220,8 +232,9 @@ namespace LIL_VSTT_Plugins |
220 | set { myDebugLogFile = value; } | 232 | set { myDebugLogFile = value; } |
221 | } | 233 | } |
222 | 234 | ||
223 | [DisplayName("CSV filens sökväg")] | 235 | [Category("CSV Testdata")] |
224 | [Description("Ange den fullständiga sökvägen till CSV filen. Observera att filen behöver finnas på alla agenterna också om du inte kör lokalt.")] | 236 | [DisplayName("Filens sökväg")] |
237 | [Description("Ange filens namn om den finns som Deployment Item i dina testsettings, eller fullständig sökväg om den inte deployas. Du kan ange en nätverksmappad disk eller UNC sökväg. Vid lokal sökväg behöver filen finnas på den agent där pluginet körs, vilket är alla agenter om du inte anger undantag.")] | ||
225 | [DefaultValue("C:\\Userdata.csv")] | 238 | [DefaultValue("C:\\Userdata.csv")] |
226 | public string Connection_String | 239 | public string Connection_String |
227 | { | 240 | { |
... | @@ -229,8 +242,9 @@ namespace LIL_VSTT_Plugins | ... | @@ -229,8 +242,9 @@ namespace LIL_VSTT_Plugins |
229 | set { myConnectionString = value; } | 242 | set { myConnectionString = value; } |
230 | } | 243 | } |
231 | 244 | ||
232 | [DisplayName("CSV filen har kolumnamn")] | 245 | [Category("CSV Testdata")] |
233 | [Description("Ange om csv filen har rubriker i form av kolumnnamn. Om du sätter True kommer kolmnens rubrik att användas som parameternamn istället.")] | 246 | [DisplayName("Filen har kolumner med namn")] |
247 | [Description("Ange om csv filen har rubriker i form av kolumnnamn på första raden. Om du sätter True kommer även kolumnens namn att användas som parameternamn istället.")] | ||
234 | [DefaultValue(false)] | 248 | [DefaultValue(false)] |
235 | public bool Has_col_name | 249 | public bool Has_col_name |
236 | { | 250 | { |
... | @@ -238,8 +252,9 @@ namespace LIL_VSTT_Plugins | ... | @@ -238,8 +252,9 @@ namespace LIL_VSTT_Plugins |
238 | set { myHasColName = value; } | 252 | set { myHasColName = value; } |
239 | } | 253 | } |
240 | 254 | ||
241 | [DisplayName("CSV Autosplit per agent")] | 255 | [Category("CSV Testdata")] |
242 | [Description("Ange True om du vill att filen automatiskt ska splittas mellan alla aktiva agenter.")] | 256 | [DisplayName("Autosplit per agent")] |
257 | [Description("Ange True om du vill att filen automatiskt ska splittas mellan alla aktiva agenter i testet. Obligatoriskt för att kunna ha unikt testdata över hela ditt loadtest då agenterna inte pratar med varandra under körningen.")] | ||
243 | [DefaultValue(false)] | 258 | [DefaultValue(false)] |
244 | public bool Autosplit | 259 | public bool Autosplit |
245 | { | 260 | { |
... | @@ -247,7 +262,8 @@ namespace LIL_VSTT_Plugins | ... | @@ -247,7 +262,8 @@ namespace LIL_VSTT_Plugins |
247 | set { myUseAutoSplit = value; } | 262 | set { myUseAutoSplit = value; } |
248 | } | 263 | } |
249 | 264 | ||
250 | [DisplayName("CSV Ignorera blankskott")] | 265 | [Category("CSV Testdata")] |
266 | [DisplayName("Ignorera blankskott")] | ||
251 | [Description("Ange False om du inte vill att rader med blankskott ignoreras (tomma/blanka rader eller samtliga kolumner tomma/blanka).")] | 267 | [Description("Ange False om du inte vill att rader med blankskott ignoreras (tomma/blanka rader eller samtliga kolumner tomma/blanka).")] |
252 | [DefaultValue(true)] | 268 | [DefaultValue(true)] |
253 | public bool IgnoreBlanks | 269 | public bool IgnoreBlanks |
... | @@ -256,15 +272,7 @@ namespace LIL_VSTT_Plugins | ... | @@ -256,15 +272,7 @@ namespace LIL_VSTT_Plugins |
256 | set { myIgnoreBlanks = value; } | 272 | set { myIgnoreBlanks = value; } |
257 | } | 273 | } |
258 | 274 | ||
259 | [DisplayName("Context Parameter Namn")] | 275 | [Category("Loggning")] |
260 | [Description("Ange namnet på parametern som vi ska lägga till i TestContext, om det är flera använd CSV format.")] | ||
261 | [DefaultValue("UserName")] | ||
262 | public string Parameter_Name | ||
263 | { | ||
264 | get { return myParameterName; } | ||
265 | set { myParameterName = value; } | ||
266 | } | ||
267 | |||
268 | [DisplayName("Loggfilens namn")] | 276 | [DisplayName("Loggfilens namn")] |
269 | [Description("Ange den fullständiga sökvägen till logg filen. Om filen finns kommer den inte skrivas över utan läggas till i slutet.")] | 277 | [Description("Ange den fullständiga sökvägen till logg filen. Om filen finns kommer den inte skrivas över utan läggas till i slutet.")] |
270 | [DefaultValue("C:\\Temp\\Fungerande.log")] | 278 | [DefaultValue("C:\\Temp\\Fungerande.log")] |
... | @@ -274,7 +282,8 @@ namespace LIL_VSTT_Plugins | ... | @@ -274,7 +282,8 @@ namespace LIL_VSTT_Plugins |
274 | set { myLogFileString = value; } | 282 | set { myLogFileString = value; } |
275 | } | 283 | } |
276 | 284 | ||
277 | [DisplayName("Loggfilens namn: Lägg till ID")] | 285 | [Category("Loggning")] |
286 | [DisplayName("Lägg till ID")] | ||
278 | [Description("Ange True om du vill att Agent ID samt VU ID läggs till automatiskt i slutet på filnamnet.")] | 287 | [Description("Ange True om du vill att Agent ID samt VU ID läggs till automatiskt i slutet på filnamnet.")] |
279 | [DefaultValue(false)] | 288 | [DefaultValue(false)] |
280 | public bool LogFileAppendID | 289 | public bool LogFileAppendID |
... | @@ -283,7 +292,8 @@ namespace LIL_VSTT_Plugins | ... | @@ -283,7 +292,8 @@ namespace LIL_VSTT_Plugins |
283 | set { myLogAppendID = value; } | 292 | set { myLogAppendID = value; } |
284 | } | 293 | } |
285 | 294 | ||
286 | [DisplayName("Loggfilens namn: Lägg till Namn")] | 295 | [Category("Loggning")] |
296 | [DisplayName("Lägg till Namn")] | ||
287 | [Description("Ange True om du vill att Scenario Name samt Test Name läggs till automatiskt i slutet på filnamnet.")] | 297 | [Description("Ange True om du vill att Scenario Name samt Test Name läggs till automatiskt i slutet på filnamnet.")] |
288 | [DefaultValue(false)] | 298 | [DefaultValue(false)] |
289 | public bool LogFileAppendName | 299 | public bool LogFileAppendName |
... | @@ -292,26 +302,29 @@ namespace LIL_VSTT_Plugins | ... | @@ -292,26 +302,29 @@ namespace LIL_VSTT_Plugins |
292 | set { myLogAppendName = value; } | 302 | set { myLogAppendName = value; } |
293 | } | 303 | } |
294 | 304 | ||
295 | [DisplayName("Välj slumpmässigt?")] | 305 | [Category("Radmappning")] |
296 | [Description("Ange True om du vill välja en slumpmässig användare. False går igenom listan sekventiellt.")] | 306 | [DisplayName("1: Test Iteration Number")] |
297 | [DefaultValue(true)] | 307 | [Description("Varje iteration av ett och samma test på samma Agent, får en ny rad från din fil. Testets iterationsnummer mappas till raderna i din testdatafil. Börjar på 1 på varje Agent. Autosplit fördelar rader mellan agenter.")] |
298 | public bool Use_Random | 308 | [DefaultValue(false)] |
309 | public bool Use_UniqueTestIteration | ||
299 | { | 310 | { |
300 | get { return myUseRandom; } | 311 | get { return myUseUniqueTestIteration; } |
301 | set { myUseRandom = value; } | 312 | set { myUseUniqueTestIteration = value; } |
302 | } | 313 | } |
303 | 314 | ||
304 | [DisplayName("Välj unikt per VU?")] | 315 | [Category("Radmappning")] |
305 | [Description("Ange True om du vill att varje LoadTest VU ska ha sitt eget unika värde och återanvända detta i varje iteration. Stänger av slumpmässigt val.")] | 316 | [DisplayName("2: Total Iteration Number")] |
317 | [Description("Varje iteration av ett test på samma Agent, oavsett test, får en ny rad från din fil. Agentens Globala iterationsnummer mappas till raderna i din testdatafil. Börjar på 1 på varje Agent. Autosplit fördelar rader mellan agenter.")] | ||
306 | [DefaultValue(false)] | 318 | [DefaultValue(false)] |
307 | public bool Use_Unique | 319 | public bool Use_UniqueIteration |
308 | { | 320 | { |
309 | get { return myUseUnique; } | 321 | get { return myUseUniqueIteration; } |
310 | set { myUseUnique = value; } | 322 | set { myUseUniqueIteration = value; } |
311 | } | 323 | } |
312 | 324 | ||
313 | [DisplayName("Välj unikt per VU per Testdatafil?")] | 325 | [Category("Radmappning")] |
314 | [Description("Ange True om du vill att varje testdatafil (CSV) hanteras separat för varje unik VU. Pluginet kommer då komma ihåg vilka rader som delats ut separat för varje fil.")] | 326 | [DisplayName("3: FIFO Kö med Pop/Enqueue")] |
327 | [Description("Varje rad läses in i en kö på agenten. När en VU vill köra ett test får den raden överst i kön. När en VU är klar med iterationen av ett test läggs raden tillbaka sist i kön. Detta säkerställer att du inte behöver fler rader i testdata filen än antalet samtidiga/parallella VU som kör dina tester, även om du har olika testdatafiler för olika tester. Varje agent börjar på rad 1 i filen om du inte använder Autosplit.")] | ||
315 | [DefaultValue(false)] | 328 | [DefaultValue(false)] |
316 | public bool Use_UniqueFiles | 329 | public bool Use_UniqueFiles |
317 | { | 330 | { |
... | @@ -319,26 +332,38 @@ namespace LIL_VSTT_Plugins | ... | @@ -319,26 +332,38 @@ namespace LIL_VSTT_Plugins |
319 | set { myUseUniqueFiles = value; } | 332 | set { myUseUniqueFiles = value; } |
320 | } | 333 | } |
321 | 334 | ||
322 | [DisplayName("Välj unikt per Iteration?")] | 335 | [Category("Radmappning")] |
323 | [Description("Ange True om du vill att varje LoadTest VU ska ha sitt eget unika värde för varje iteration av alla tester, dvs aldrig återanvändas av någon VU i något test. Gäller före unikt per test iteration.")] | 336 | [DisplayName("4: Virtual User ID Number")] |
337 | [Description("Varje ny VU får en egen rad från din fil, och återanvänder denna rad om den kör fler tester/iterationer. Agentens Virtual User ID Number mappas till raderna i din testdatafil. En VU varierar vilka tester den kör i din mix. En ny VU (enligt procent nya VU i run settings) får ett nytt nummer och därmed en ny rad i din fil. Första VU får nummer 1 på varje Agent. Autosplit fördelar rader mellan agenter.")] | ||
324 | [DefaultValue(false)] | 338 | [DefaultValue(false)] |
325 | public bool Use_UniqueIteration | 339 | public bool Use_Unique |
326 | { | 340 | { |
327 | get { return myUseUniqueIteration; } | 341 | get { return myUseUnique; } |
328 | set { myUseUniqueIteration = value; } | 342 | set { myUseUnique = value; } |
329 | } | 343 | } |
330 | 344 | ||
331 | [DisplayName("Välj unikt per Test Iteration?")] | 345 | [Category("Radmappning")] |
332 | [Description("Ange True om du vill att varje LoadTest VU ska ha sitt eget unika värde för varje iteration av respektive test, dvs aldrig återanvändas av någon VU som kör samma test.")] | 346 | [DisplayName("5: Slumpmässigt")] |
347 | [Description("Slumpmässigt val av rader i filen. Ingen kontroll eller viss ordning och flera VU kan slumpa fram samma rad.")] | ||
333 | [DefaultValue(false)] | 348 | [DefaultValue(false)] |
334 | public bool Use_UniqueTestIteration | 349 | public bool Use_Random |
335 | { | 350 | { |
336 | get { return myUseUniqueTestIteration; } | 351 | get { return myUseRandom; } |
337 | set { myUseUniqueTestIteration = value; } | 352 | set { myUseRandom = value; } |
353 | } | ||
354 | |||
355 | [Category("Radmappning")] | ||
356 | [DisplayName("6: Virtual User Iteration Number")] | ||
357 | [Description("Varje VU väljer rad baserat på antalet tidigare tester/iterationer den gjort. Varje ny VU börjar på rad 1. Om procent nya VU är 100 används endast rad 1 i alla tester. Observera att en VU som inte är ny kommer att byta mellan olika tester under din körning, om du har flera tester/skript i din mix. Om du använder undantag och flera instanser av detta plugin, kommer vissa rader att hoppas över.")] | ||
358 | [DefaultValue(true)] | ||
359 | public bool Use_Seq | ||
360 | { | ||
361 | get; set; // Fake. Actually enabled by setting all other options above to false. | ||
338 | } | 362 | } |
339 | 363 | ||
340 | [DisplayName("Välj sekventiell loop?")] | 364 | [Category("CSV Testdata")] |
341 | [Description("Ange true om du vill börja om från början om sekventiell läsning får slut på värden. Gäller även Unik läsning. Om data tar slut kommer sista värdet ges till alla om sekventiell loop inte tillåts")] | 365 | [DisplayName("Loopa testdata")] |
366 | [Description("Ange true om du vill börja om från början av testdatafilen när alla används en gång. Gäller alla unik typer utom Push/Pull. Med False på detta val kommer sista raden ges till alla om datat tar slut, eller OutOfTestDataException slängas och loadtestet stoppas om det är aktiverat.")] | ||
342 | [DefaultValue(false)] | 367 | [DefaultValue(false)] |
343 | public bool Use_Loop | 368 | public bool Use_Loop |
344 | { | 369 | { |
... | @@ -346,7 +371,8 @@ namespace LIL_VSTT_Plugins | ... | @@ -346,7 +371,8 @@ namespace LIL_VSTT_Plugins |
346 | set { mySeqLoop = value; } | 371 | set { mySeqLoop = value; } |
347 | } | 372 | } |
348 | 373 | ||
349 | [DisplayName("OutOfTestDataException?")] | 374 | [Category("CSV Testdata")] |
375 | [DisplayName("Avbryt med OutOfTestDataException")] | ||
350 | [Description("Ange true om du vill att ditt loadtest ska stoppas om testdata tar slut (och Sekventiell Loop är satt till false).")] | 376 | [Description("Ange true om du vill att ditt loadtest ska stoppas om testdata tar slut (och Sekventiell Loop är satt till false).")] |
351 | [DefaultValue(false)] | 377 | [DefaultValue(false)] |
352 | public bool ThrowException | 378 | public bool ThrowException |
... | @@ -354,6 +380,7 @@ namespace LIL_VSTT_Plugins | ... | @@ -354,6 +380,7 @@ namespace LIL_VSTT_Plugins |
354 | get; set; | 380 | get; set; |
355 | } | 381 | } |
356 | 382 | ||
383 | [Category("Loggning")] | ||
357 | [DisplayName("Logga fungerande till fil?")] | 384 | [DisplayName("Logga fungerande till fil?")] |
358 | [Description("Ange True om du vill att poster vars tester slutar i Pass ska loggas till fil (c:\\fungerande.log). Om filen redan finns läggs de till i slutet.")] | 385 | [Description("Ange True om du vill att poster vars tester slutar i Pass ska loggas till fil (c:\\fungerande.log). Om filen redan finns läggs de till i slutet.")] |
359 | [DefaultValue(false)] | 386 | [DefaultValue(false)] |
... | @@ -363,8 +390,9 @@ namespace LIL_VSTT_Plugins | ... | @@ -363,8 +390,9 @@ namespace LIL_VSTT_Plugins |
363 | set { myLogToFile = value; } | 390 | set { myLogToFile = value; } |
364 | } | 391 | } |
365 | 392 | ||
393 | [Category("Undantag")] | ||
366 | [DisplayName("Endast dessa Tester")] | 394 | [DisplayName("Endast dessa Tester")] |
367 | [Description("Parametrar sätts endast på tester i test mixen där namnet eller del av namnet för testet finns i denna lista. Lämna blankt för att sätta i alla tester.")] | 395 | [Description("Denna instans av pluginet körs endast på Tester i test mixen där namnet eller del av namnet för testet finns i denna lista. Lämna blankt för att köra i alla tester.")] |
368 | [DefaultValue("")] | 396 | [DefaultValue("")] |
369 | public string Test_Names | 397 | public string Test_Names |
370 | { | 398 | { |
... | @@ -372,17 +400,19 @@ namespace LIL_VSTT_Plugins | ... | @@ -372,17 +400,19 @@ namespace LIL_VSTT_Plugins |
372 | set { myTestNames = value; } | 400 | set { myTestNames = value; } |
373 | } | 401 | } |
374 | 402 | ||
403 | [Category("Undantag")] | ||
375 | [DisplayName("Endast dessa Scenarios")] | 404 | [DisplayName("Endast dessa Scenarios")] |
376 | [Description("Parametrar sätts endast på Scenarion där namnet eller del av namnet för scenariot finns i denna lista. Lämna blankt för att sätta i alla scenarion.")] | 405 | [Description("Denna instans av pluginet körs endast på Scenarion där namnet eller del av namnet för scenariot finns i denna lista. Lämna blankt för att köra i alla scenarion.")] |
377 | [DefaultValue("")] | 406 | [DefaultValue("")] |
378 | public string Scenario_Names | 407 | public string Scenario_Names |
379 | { | 408 | { |
380 | get { return myScenarioNames; } | 409 | get { return myScenarioNames; } |
381 | set { myScenarioNames = value; } | 410 | set { myScenarioNames = value; } |
382 | } | 411 | } |
383 | 412 | ||
413 | [Category("Undantag")] | ||
384 | [DisplayName("Endast dessa Agenter")] | 414 | [DisplayName("Endast dessa Agenter")] |
385 | [Description("Parametrar sätts endast på Agenter där namnet eller del av namnet för agenten finns i denna lista. Lämna blankt för att sätta i alla agenter.")] | 415 | [Description("Denna instans av pluginet körs endast på Agenter där namnet eller del av namnet för agenten finns i denna lista. Lämna blankt för att köra på alla agenter.")] |
386 | [DefaultValue("")] | 416 | [DefaultValue("")] |
387 | public string Agent_Names | 417 | public string Agent_Names |
388 | { | 418 | { |
... | @@ -475,23 +505,23 @@ namespace LIL_VSTT_Plugins | ... | @@ -475,23 +505,23 @@ namespace LIL_VSTT_Plugins |
475 | { | 505 | { |
476 | if (shouldRun(e)) | 506 | if (shouldRun(e)) |
477 | { | 507 | { |
478 | int row = 0; | 508 | string strParams = "OutOfData"; |
479 | // Go single threaded | 509 | // Go single threaded |
480 | lock (userRow) | 510 | lock (myUnUsedQueue) |
481 | { | 511 | { |
482 | // Check if the user already has a row in our file, otherwise get the next one | 512 | if(myUnUsedQueue.Count > 0) |
483 | if (userRow.ContainsKey(e.UserContext.UserId)) row = userRow[e.UserContext.UserId]; | 513 | { |
484 | else | 514 | strParams = myUnUsedQueue.Dequeue(); |
515 | e.UserContext["QueueVal"] = strParams; | ||
516 | } else | ||
485 | { | 517 | { |
486 | // New user, get the next row and increase the counter | 518 | // Out of testdata |
487 | row = nextAvailableRow++; | 519 | e.UserContext["QueueVal"] = null; |
488 | // Save the row for this user | 520 | stopAndThrow(); |
489 | userRow[e.UserContext.UserId] = row; | ||
490 | } | 521 | } |
491 | } | 522 | } |
492 | string strParams = this.getSeqUser(row); | ||
493 | setParameters(strParams, e); | 523 | setParameters(strParams, e); |
494 | if (myDebug) lock (myDebugLogFile) { File.AppendAllText(myDebugLogFile, DateTime.Now.ToLocalTime() + " File: " + myConnectionString + " Test: " + e.TestName + " VU: " + e.UserContext.UserId + " Row: " + row + " Value: \"" + strParams + "\"\r\n"); } | 524 | if (myDebug) lock (myDebugLogFile) { File.AppendAllText(myDebugLogFile, DateTime.Now.ToLocalTime() + " File: " + myConnectionString + " Test: " + e.TestName + " VU: " + e.UserContext.UserId + " Value: \"" + strParams + "\" PULL\r\n"); } |
495 | } | 525 | } |
496 | } | 526 | } |
497 | 527 | ||
... | @@ -499,7 +529,13 @@ namespace LIL_VSTT_Plugins | ... | @@ -499,7 +529,13 @@ namespace LIL_VSTT_Plugins |
499 | { | 529 | { |
500 | if (shouldRun(e)) | 530 | if (shouldRun(e)) |
501 | { | 531 | { |
502 | 532 | String queueVal = (String)e.UserContext["QueueVal"]; | |
533 | if (queueVal != null) | ||
534 | lock (myUnUsedQueue) | ||
535 | { | ||
536 | myUnUsedQueue.Enqueue(queueVal); | ||
537 | } | ||
538 | if (myDebug) lock (myDebugLogFile) { File.AppendAllText(myDebugLogFile, DateTime.Now.ToLocalTime() + " File: " + myConnectionString + " Test: " + e.TestName + " VU: " + e.UserContext.UserId + " Value: \"" + queueVal + "\" PUSH\r\n"); } | ||
503 | } | 539 | } |
504 | } | 540 | } |
505 | 541 | ||
... | @@ -604,11 +640,7 @@ namespace LIL_VSTT_Plugins | ... | @@ -604,11 +640,7 @@ namespace LIL_VSTT_Plugins |
604 | // Handle out of testdata here | 640 | // Handle out of testdata here |
605 | if (ThrowException) | 641 | if (ThrowException) |
606 | { | 642 | { |
607 | foreach (LoadTestScenario s in m_loadTest.Scenarios) | 643 | stopAndThrow(); |
608 | { | ||
609 | s.CurrentLoad = 0; | ||
610 | } | ||
611 | this.stop = true; | ||
612 | return "OutOfData"; | 644 | return "OutOfData"; |
613 | } | 645 | } |
614 | else return myParams[myParams.Count - 1]; | 646 | else return myParams[myParams.Count - 1]; |
... | @@ -616,11 +648,20 @@ namespace LIL_VSTT_Plugins | ... | @@ -616,11 +648,20 @@ namespace LIL_VSTT_Plugins |
616 | } | 648 | } |
617 | } | 649 | } |
618 | 650 | ||
651 | void stopAndThrow() | ||
652 | { | ||
653 | if(m_loadTest != null) | ||
654 | foreach (LoadTestScenario s in m_loadTest.Scenarios) | ||
655 | { | ||
656 | s.CurrentLoad = 0; | ||
657 | } | ||
658 | this.stop = true; | ||
659 | } | ||
660 | |||
619 | bool initUserArray(string path, int agentCount, int agentId) | 661 | bool initUserArray(string path, int agentCount, int agentId) |
620 | { | 662 | { |
621 | if (path.Length > 0) | 663 | if (path.Length > 0) |
622 | { | 664 | { |
623 | //StreamReader re = File.OpenText(path); | ||
624 | StreamReader re = new StreamReader(path, System.Text.Encoding.Default); | 665 | StreamReader re = new StreamReader(path, System.Text.Encoding.Default); |
625 | string input = null; | 666 | string input = null; |
626 | int lineNum = 0; | 667 | int lineNum = 0; |
... | @@ -646,13 +687,15 @@ namespace LIL_VSTT_Plugins | ... | @@ -646,13 +687,15 @@ namespace LIL_VSTT_Plugins |
646 | else ifAgentId = dataNum + 1; | 687 | else ifAgentId = dataNum + 1; |
647 | if (ifAgentId == agentId) | 688 | if (ifAgentId == agentId) |
648 | { | 689 | { |
649 | myParams.Add(input.TrimEnd(trim)); | 690 | if (myUseUniqueFiles) myUnUsedQueue.Enqueue(input.TrimEnd(trim)); |
691 | else myParams.Add(input.TrimEnd(trim)); | ||
650 | } | 692 | } |
651 | dataNum++; | 693 | dataNum++; |
652 | } | 694 | } |
653 | else | 695 | else |
654 | { | 696 | { |
655 | myParams.Add(input.TrimEnd(trim)); | 697 | if (myUseUniqueFiles) myUnUsedQueue.Enqueue(input.TrimEnd(trim)); |
698 | else myParams.Add(input.TrimEnd(trim)); | ||
656 | } | 699 | } |
657 | } | 700 | } |
658 | } | 701 | } | ... | ... |
-
Please register or sign in to post a comment