Skv.cs
5.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* Skatteverkets plugins
(C) Skatteverket Svenska STATEN!!!
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.ComponentModel;
using System.Text.RegularExpressions;
namespace LIL_VSTT_Plugins
{
[DisplayName("MS Throttle Broms")]
[Description("Ökar betänketiden på request som får ett 500 svar från MS Throttle att lugna ner sig lite. Slumpar en tid mellan angiven min och max.")]
public class ZMSThrottle : WebTestPlugin
{
[DisplayName("Minsta Paustid"), DefaultValue(100), Description("Minsta paus i sekunder vid begäran om throttling")]
public int MinimumPaus { get; set; }
[DisplayName("Högsta Paustid"), DefaultValue(300), Description("Högsta paus i sekunder vid begäran om throttling")]
public int MaximumPaus { get; set; }
[DisplayName("Debugläge"), DefaultValue(false), Description("Sätter pausen oavsett svar samt loggar")]
public bool Debug { get; set; }
[DisplayName("Acceptera 500 koden"), DefaultValue(false), Description("Om MS svarar med en 500 kod SAMT throttle JSON finns i svaret med ExternalLimitReached:true ignoreras 500 koden så att anropet inte failar.")]
public bool Acceptera500 { get; set; }
[DisplayName("Stoppa inte iterationen"), DefaultValue(false), Description("Om MS svarar med en 500 kod SAMT throttle JSON finns i svaret med ExternalLimitReached:true stoppas exekveringen av skriptet.")]
public bool DontStopIteration { get; set; }
Random rnd = new Random();
Regex rx = new Regex("externalSystemRequestLimitReached\".?:.?true", RegexOptions.IgnoreCase);
public override void PreRequest(object sender, PreRequestEventArgs e)
{
base.PreRequest(sender, e);
if(Acceptera500 == true)
e.Request.IgnoreHttpStatusCode = true;
}
public override void PostRequest(object sender, PostRequestEventArgs e)
{
base.PostRequest(sender, e);
bool isLimitReachedFound = false;
if(e.ResponseExists && e.Response.StatusCode == System.Net.HttpStatusCode.InternalServerError)
{
if(rx.IsMatch(e.Response.BodyString))
{
e.Request.ThinkTime = rnd.Next(MinimumPaus, MaximumPaus);
isLimitReachedFound = true;
e.WebTest.AddCommentToResult("ExternalSystemRequestLimitReached:true pausar i " + e.Request.ThinkTime + " sekunder");
if (!DontStopIteration)
{
e.WebTest.AddCommentToResult("Stoppar iterationen av skriptet efter detta anrop");
e.WebTest.Stop();
}
}
}
if(Acceptera500 == true && (int)e.Response.StatusCode >= 400 && isLimitReachedFound == false)
{
e.Request.Outcome = Outcome.Fail;
e.WebTest.AddCommentToResult("Failar eftersom statuskod >= 400 samt ExternalSystemRequestLimitReached:true inte fanns i svaret");
}
if (Debug)
{
e.WebTest.AddCommentToResult("Sätter pausen eftersom debugläge är aktiverat");
e.Request.ThinkTime = rnd.Next(MinimumPaus, MaximumPaus);
}
}
}
[DisplayName("Validera Header")]
[Description("(C) Mårten\r\nValiderar att en header har ett visst värde i svaret.")]
public class ValidateHeader : ValidationRule
{
[DisplayName("Header Namn"), DefaultValue(""), Description("Namnet på headern i svaret")]
public string HeaderName { get; set; }
[DisplayName("Värde"), DefaultValue(""), Description("Värdet som headern ska ha")]
public string HeaderValue { get; set; }
public override void Validate(object sender, ValidationEventArgs e)
{
e.IsValid = false;
e.Message = "Default triggades. False! Check the code!!";
if (e.Response.Headers[HeaderName] == HeaderValue)
{
e.IsValid = true;
e.Message = "Hittade header " + HeaderName + " med värde " + HeaderValue;
} else
{
e.IsValid = false;
e.Message = "Hittande ingen header med namnet " + HeaderName + " och värdet " + HeaderValue;
}
}
}
[DisplayName("Validate Response URL")]
[Description("(C) Mårten\r\nValiderar att en Response URL har ett visst värde eller inte.")]
public class ValidateResponseURL : ValidationRule
{
Regex rxRegExp = null;
[DisplayName("Regular expression"), DefaultValue(""), Description("Uttrycket som ska matcha Response URL")]
public string strRegExp { get; set; }
[DisplayName("Pass if found"), DefaultValue(false), Description("Om uttrycket matchar ska testet failas eller inte?")]
public bool boolPassIfFound { get; set; }
public override void Validate(object sender, ValidationEventArgs e)
{
e.IsValid = false;
e.Message = "Default triggades. False! Check the code!!";
if (rxRegExp == null)
{
rxRegExp = new Regex(strRegExp);
}
if (rxRegExp.IsMatch(e.Response.ResponseUri.AbsoluteUri))
{
e.IsValid = boolPassIfFound;
e.Message = "" + e.Response.ResponseUri.AbsoluteUri + " matchade uttrycket!";
}
else
{
e.IsValid = !boolPassIfFound;
e.Message = "" + e.Response.ResponseUri.AbsoluteUri + " matchade inte uttrycket!";
}
}
}
}