Skip to content

Commit

Permalink
Merge pull request #2054 from NuGet/bhuvak-loadtests-updatetotestmix
Browse files Browse the repository at this point in the history
Updates to load tests
  • Loading branch information
bhuvak committed Apr 24, 2014
2 parents af93236 + c01cf37 commit d78393c
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 42 deletions.
14 changes: 14 additions & 0 deletions tests/NuGetGallery.FunctionalTests/Features/CuratedFeedTest.cs
Expand Up @@ -249,5 +249,19 @@ public void ValidateMicrosoftDotNetCuratedFeed()
if (((HttpWebResponse)e.Response).StatusCode != HttpStatusCode.OK) Assert.Fail("Next page link is broken. Expected 200, got " + ((HttpWebResponse)e.Response).StatusCode);
}
}

[TestMethod]
[Description("Performs a querystring-based search of the Microsoft curated feed. Confirms expected packages are returned.")]
public void SearchMicrosoftDotNetCuratedFeed()
{
string packageId = "microsoft.aspnet.webpages";
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"curated-feeds/microsoftdotnet/Packages()?$filter=tolower(Id)%20eq%20'" + packageId + "'&$orderby=Id&$skip=0&$top=30");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
Assert.IsTrue(responseText.Contains(@"<id>" + UrlHelper.V2FeedRootUrl + "Packages(Id='" + packageId));

}
}
}
20 changes: 13 additions & 7 deletions tests/NuGetGallery.FunctionalTests/LoadTests/E2E.loadtest
@@ -1,15 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LoadTest Name="E2E" Description="" Owner="" storage="c:\github\nugetgallery\tests\nugetgallery.functionaltests\loadtests\e2e.loadtest" Priority="2147483647" Enabled="true" CssProjectStructure="" CssIteration="" DeploymentItemsEditable="" WorkItemIds="" TraceLevel="None" CurrentRunConfig="Run Settings1" Id="5e6b3c35-b02b-44c9-b148-3cf727b18759" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<LoadTest Name="E2E" Description="" Owner="" storage="c:\users\bhuvak\documents\github\nugetgallery\tests\nugetgallery.functionaltests\loadtests\e2e.loadtest" Priority="2147483647" Enabled="true" CssProjectStructure="" CssIteration="" DeploymentItemsEditable="" WorkItemIds="" TraceLevel="None" CurrentRunConfig="Run Settings1" Id="5e6b3c35-b02b-44c9-b148-3cf727b18759" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Scenarios>
<Scenario Name="EndToEndScenario" DelayBetweenIterations="0" PercentNewUsers="0" IPSwitching="true" TestMixType="PercentageOfTestsStarted" ApplyDistributionToPacingDelay="true" MaxTestIterations="0" DisableDuringWarmup="false" DelayStartTime="0" AllowedAgents="">
<ThinkProfile Value="0.2" Pattern="NormalDistribution" />
<LoadProfile Pattern="Constant" InitialUsers="40" />
<TestMix>
<TestProfile Name="PackagesPageTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="5ceca307-8fd2-e863-65bb-d8151e5dafba" Percentage="10" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="HomePageValidationTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="d527504e-456c-ed4a-8eba-7c20c18ba47d" Percentage="7" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="LogonTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="a1c602d9-292b-1042-380c-707cec091de9" Percentage="2" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="TryDownloadPackage" Path="..\bin\nugetgallery.functionaltests.dll" Id="3116eff2-5111-57b6-5f25-6e95db874b5c" Percentage="52" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="Top30PackagesFeedTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="f05527fd-db0a-085b-230f-5fc3060b9ebe" Percentage="29" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="PackagesPageTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="5ceca307-8fd2-e863-65bb-d8151e5dafba" Percentage="7" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="HomePageValidationTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="d527504e-456c-ed4a-8eba-7c20c18ba47d" Percentage="3" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="LogonTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="a1c602d9-292b-1042-380c-707cec091de9" Percentage="1" Type="Microsoft.VisualStudio.TestTools.WebStress.CodedWebTestElement, Microsoft.VisualStudio.QualityTools.LoadTest, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="Top30PackagesFeedTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="f05527fd-db0a-085b-230f-5fc3060b9ebe" Percentage="1" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="FindPackagesByIdForPredefinedPackage" Path="..\bin\nugetgallery.functionaltests.dll" Id="5f763901-3dcd-3c65-e7ad-ffa8547251c2" Percentage="26" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="ManagePackageUILaunchSimulationTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="11a54ceb-b7e7-d391-cecb-b53c0bbc1c1e" Percentage="10" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="DownloadPackageSimulationTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="a0abfb9b-6bd8-b2a5-6937-08824dd48388" Percentage="19" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="ApiV2MetadataTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="3cac0efe-553c-a93c-7330-82f91feb1c58" Percentage="7" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="ApiV2BaseUrlTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="c8ad6f49-5073-0c52-242d-144b0ed5fc5b" Percentage="7" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="SearchMicrosoftDotNetCuratedFeed" Path="..\bin\nugetgallery.functionaltests.dll" Id="9d68191c-cb8d-a838-8844-0f43c5150c15" Percentage="7" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<TestProfile Name="PackagesApiTest" Path="..\bin\nugetgallery.functionaltests.dll" Id="5159307c-5187-3a7e-5af6-cbf8addd86f0" Percentage="12" Type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestMix>
<BrowserMix>
<BrowserProfile Percentage="100">
Expand Down Expand Up @@ -425,7 +431,7 @@
</CounterSet>
</CounterSets>
<RunConfigurations>
<RunConfiguration Name="Run Settings1" Description="" ResultsStoreType="Database" TimingDetailsStorage="AllIndividualDetails" SaveTestLogsOnError="true" SaveTestLogsFrequency="0" MaxErrorDetails="200" MaxErrorsPerType="1000" MaxThresholdViolations="1000" MaxRequestUrlsReported="1000" UseTestIterations="false" RunDuration="7210" WarmupTime="0" CoolDownTime="0" TestIterations="100" WebTestConnectionModel="ConnectionPerUser" WebTestConnectionPoolSize="50" SampleRate="20" ValidationLevel="High" SqlTracingConnectString="" SqlTracingConnectStringDisplayValue="" SqlTracingDirectory="" SqlTracingEnabled="false" SqlTracingFileCount="2" SqlTracingRolloverEnabled="true" SqlTracingMinimumDuration="500" RunUnitTestsInAppDomain="true" CoreCount="1">
<RunConfiguration Name="Run Settings1" Description="" ResultsStoreType="Database" TimingDetailsStorage="AllIndividualDetails" SaveTestLogsOnError="true" SaveTestLogsFrequency="0" MaxErrorDetails="200" MaxErrorsPerType="1000" MaxThresholdViolations="1000" MaxRequestUrlsReported="1000" UseTestIterations="false" RunDuration="3600" WarmupTime="0" CoolDownTime="0" TestIterations="100" WebTestConnectionModel="ConnectionPerUser" WebTestConnectionPoolSize="50" SampleRate="20" ValidationLevel="High" SqlTracingConnectString="" SqlTracingConnectStringDisplayValue="" SqlTracingDirectory="" SqlTracingEnabled="false" SqlTracingFileCount="2" SqlTracingRolloverEnabled="true" SqlTracingMinimumDuration="500" RunUnitTestsInAppDomain="true" CoreCount="1">
<CounterSetMappings>
<CounterSetMapping ComputerName="[CONTROLLER MACHINE]">
<CounterSetReferences>
Expand Down
142 changes: 142 additions & 0 deletions tests/NuGetGallery.FunctionalTests/LoadTests/LoadTests.cs
@@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NuGetGallery.FunctionTests.Helpers;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace NuGetGallery.FunctionalTests.LoadTests
{
/// <summary>
/// This class has the various scenarios used in LoadTests.
/// The tests does minimal validation and uses existing packages to reduce the execution time spent in test prep and asserts.
/// </summary>
[TestClass]
public class LoadTests
{
[TestMethod]
[Description("Tries to download a packages from v2 feed and make sure the re-direction happens properly.")]
[Priority(0)]
public void DownloadPackageSimulationTest()
{
string packageId = "EntityFramework"; //try to down load a pre-defined package.
string version = "5.0.0";
//Just try download and not actual download. Since this will be used in load test, we don't to actually download the nupkg everytime.
string redirectUrl = ODataHelper.TryDownloadPackageFromFeed(packageId, version).Result;
Assert.IsNotNull( redirectUrl, " Package download from V2 feed didnt work");
string expectedSubString = "packages/entityframework.5.0.0.nupkg";
Assert.IsTrue(redirectUrl.Contains(expectedSubString), " The re-direct Url {0} doesnt contain the expect substring {1}",redirectUrl ,expectedSubString);
}


[TestMethod]
[Description("Tries to simulate the launch of Manage package dialog UI")]
[Priority(0)]
public void ManagePackageUILaunchSimulationTest()
{
// api/v2/search()/$count query is made everytime Manage package UI is launched in VS.
//This test simulates the same.
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"/Search()/$count?$filter=IsLatestVersion&searchTerm=''&targetFramework='net45'&includePrerelease=false");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
int searchCount = Convert.ToInt32(responseText);
//Just check if the response is a valid int.
Assert.IsTrue(searchCount >= 0);
}

[TestMethod]
public void FindPackagesByIdForPredefinedPackage()
{
string packageId = "PostSharp";
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"/FindPackagesById()?id='" + packageId + "'");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
Assert.IsTrue(responseText.Contains(@"<id>" + UrlHelper.V2FeedRootUrl + "Packages(Id='" + packageId));
}

[TestMethod]
public void FindPackagesBySpecificIdAndVersion()
{
string packageId = "Microsoft.Web.Infrastructure";
string version = "1.0.0.0";
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"Packages(Id='" + packageId + "',Version='" + version + "')");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
Assert.IsTrue(responseText.Contains(@"<id>" + UrlHelper.V2FeedRootUrl + "Packages(Id='" + packageId + "',Version='" + version + "')</id>"));
}

[TestMethod]
public void PackagesApiTest()
{
string packageId = "newtonsoft.json";
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"Packages()?$filter=tolower(Id) eq '" + packageId + "'&$orderby=Id" );
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
Assert.IsTrue(responseText.Contains(@"<id>" + UrlHelper.V2FeedRootUrl + "Packages(Id='" + packageId));
}

[TestMethod]
public void StatsTotalTest()
{
WebRequest request = WebRequest.Create(UrlHelper.BaseUrl + @"/stats/totals");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
Assert.IsTrue(responseText.Contains(@"Downloads"));
}

[TestMethod]
[Description("Hits the search endpoint directly")]
[Priority(0)]
public void HitSearchEndPointDirectly()
{
bool Value = TrySearch().Result;
Assert.IsTrue(Value);
}

public static async Task<bool> TrySearch()
{
try
{
HttpClientHandler handler = new HttpClientHandler();
handler.AllowAutoRedirect = false;
using (HttpClient client = new HttpClient(handler))
{
string requestUri = "https://api-search-0.nuget.org/search/query?q='app insights'&luceneQuery=false";
var response = await client.GetAsync(requestUri);
//print the header
Console.WriteLine("HTTP status code : {0}", response.StatusCode);
//Console.WriteLine("HTTP header : {0}", response.Headers.ToString());
if (response.StatusCode == HttpStatusCode.OK)
{
return true;
}
else
{
return false;
}
}
}
catch (HttpRequestException hre)
{
Console.WriteLine("Exception : {0}", hre.Message);
return false;
}
}
}
}

This file was deleted.

Expand Up @@ -80,7 +80,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Features\SearchTest.cs" />
<Compile Include="LoadTests\PackageDownloadTest.cs" />
<Compile Include="LoadTests\LoadTests.cs" />
<Compile Include="WebUITests\AccountManagement\RegisterNewUserTest.cs" />
<Compile Include="WebUITests\AssertAndValidationHelper.cs" />
<Compile Include="ClientIntegrationTests\NuGetCommandLineTests.cs" />
Expand Down
Expand Up @@ -11,9 +11,35 @@ namespace NuGetGallery.FunctionalTests.ODataTests
public partial class V2FeedTest : GalleryTestBase
{


[TestMethod]
public void Top30PackagesFeedTest()
public void ApiV2BaseUrlTest()
{
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl);
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
//Just check for presence of defined tag.
Assert.IsTrue(responseText.Contains(@"<atom:title>Packages</atom:title>"));
}

[TestMethod]
public void ApiV2MetadataTest()
{
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"$metadata");
// Get the response.
WebResponse response = request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseText = sr.ReadToEnd();
//Just check for presence of defined tag.
//Assert.IsTrue(responseText.Contains(@"<EntityType Name=" + @"""" + "V2FeedPackage" +@"""" + "m:HasStream=" + @"""" + "true" +@"""" + ">"));
Assert.IsTrue(responseText.Contains(@"V2FeedPackage"));
}

[TestMethod]
public void Top30PackagesFeedTest()
{
WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"/Search()?$filter=IsAbsoluteLatestVersion&$orderby=DownloadCount%20desc,Id&$skip=0&$top=30&searchTerm=''&targetFramework='net45'&includePrerelease=true");
// Get the response.
WebResponse response = request.GetResponse();
Expand All @@ -39,6 +65,8 @@ public void FindPackagesByIdTest()

}



/// <summary>
/// Regression test for #1052
/// </summary>
Expand Down

0 comments on commit d78393c

Please sign in to comment.