/********************************************************************************************************************
'
' Copyright (c) 2002, Brian Knowles, Jim Shore
'
' Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
' documentation files (the "Software"), to deal in the Software without restriction, including without limitation
' the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
' to permit persons to whom the Software is furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in all copies or substantial portions
' of the Software.
'
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
' THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
' CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
' DEALINGS IN THE SOFTWARE.
'
'*******************************************************************************************************************/
using System;
using NUnit.Framework;
using NUnit.Extensions.Web.AspNet;
namespace NUnit.Extensions.Web.Test
{
public class PerformanceTest : NUnitAspTestCase
{
private const int expectedTestsPerSecond = 1;
private const long speedOfMinimumComputer = 67; // determined empirically; do not change
[Test]
public void TestPerformance()
{
TimeSpan runTime = BestOutOfThree();
TimeSpan calibratedTime = AdjustForSpeedOfComputer(runTime);
TimeSpan expectedTime = new TimeSpan(0, 0, 0, 0, 1000 / expectedTestsPerSecond);
string failureMessage = String.Format("calibrated test time must be better than {0} h:m:s but was {1}", expectedTime, calibratedTime);
Assert.IsTrue(calibratedTime <= expectedTime, failureMessage);
}
private TimeSpan AdjustForSpeedOfComputer(TimeSpan time)
{
long speed = CalculateComputerSpeedSuchThatLargerIsBetter();
double speedRatio = speed / speedOfMinimumComputer;
long adjustedTime = (long)(speedRatio * time.Ticks);
return new TimeSpan(adjustedTime);
}
private long CalculateComputerSpeedSuchThatLargerIsBetter()
{
DateTime start = DateTime.Now;
TimeSpan runTime = new TimeSpan(0, 0, 0, 0, 200);
long speed = 0;
Browser.SendRequest(BaseUrl + "PerformanceTestPage.aspx");
string timeWaster = Browser.Document.BodyTag.InnerText;
do
{
speed++;
timeWaster = timeWaster.ToUpper();
timeWaster = timeWaster.ToLower();
} while ((DateTime.Now - start) < runTime);
return speed;
}
private TimeSpan BestOutOfThree()
{
TimeSpan bestPerformance = TimeSpan.MaxValue;
for (int i = 0; i < 3; i++)
{
TimeSpan currentPerformance = TimedTest();
if (currentPerformance < bestPerformance)
bestPerformance = currentPerformance;
}
return bestPerformance;
}
private TimeSpan TimedTest()
{
RunTest();
return Browser.LoadTime;
}
private void RunTest()
{
TextBoxTester textBox1 = new TextBoxTester(Browser, "textBox1");
TextBoxTester textBox2 = new TextBoxTester(Browser, "textBox2");
TextBoxTester textBox3 = new TextBoxTester(Browser, "textBox3");
TextBoxTester textBox4 = new TextBoxTester(Browser, "textBox4");
TextBoxTester textBox5 = new TextBoxTester(Browser, "textBox5");
ButtonTester button = new ButtonTester(Browser, "button");
Browser.SendRequest(BaseUrl + "PerformanceTestPage.aspx");
Assert.AreEqual("textBox1", textBox1.Text, "textBox1");
Assert.AreEqual("textBox2", textBox2.Text, "textBox2");
Assert.AreEqual("textBox3", textBox3.Text, "textBox3");
Assert.AreEqual("textBox4", textBox4.Text, "textBox4");
Assert.AreEqual("textBox5", textBox5.Text, "textBox5");
textBox1.Text = "not 1";
textBox2.Text = "not 2";
textBox3.Text = "not 3";
textBox4.Text = "not 4";
textBox5.Text = "not 5";
button.Click();
Assert.AreEqual("not 1", textBox1.Text, "textBox1");
Assert.AreEqual("not 2", textBox2.Text, "textBox2");
Assert.AreEqual("not 3", textBox3.Text, "textBox3");
Assert.AreEqual("not 4", textBox4.Text, "textBox4");
Assert.AreEqual("not 5", textBox5.Text, "textBox5");
}
}
}