我正在研究一种对Web应用程序进行性能测试的粗略方法。基本上,我想从.NET执行Web请求到返回一些结果的特定URL。我遇到的问题是我似乎得到某种类型的中间页作为结果;结果应该是来自数据库的对象列表,页面标题为“高级搜索结果”,但我的代码正在提供标题为“Working ...”的内容。我最初尝试在PowerShell中执行此操作并且似乎具有相同的结果,所以我认为我可能在C#中有更好的运气。以下是我到目前为止的情况:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.IO;
namespace QTesting
{
class Program
{
static void Main(string[] args)
{
WebRequest wr = WebRequest.Create("https://u.spart.com/u.Int/AdvSearchResults/Person/220001305");
wr.Method = "GET";
wr.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = wr.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
response.Close();
}
}
}
最终,如果我可以使这个工作,我想收集返回这些结果所需的时间。
谢谢!
贝
答案 0 :(得分:1)
该页面可能使用AJAX并且您首先获得一个空页面,其中“Working ...”标题在加载结果时由JS代码替换。 您必须使用像Fiddler这样的代理来识别JS代码发送到目标网站的请求,然后将其添加到您的测试代码中:我的意思是您的代码必须请求原始页面然后请求新URL。新URL很容易用JSON对象回答。 通过这种方式,您将模拟整页加载服务器端。 另一种方法可能是使用模拟真实浏览器的Selenium,你不需要关心JS的作用。这对于功能测试是可行的,但不适用于大规模负载测试,因为您可以在机器上生成的Selenium驱动程序数量有限
答案 1 :(得分:0)
尝试启用重定向:
WebRequest wr = WebRequest.Create("https://u.spart.com/u.Int/AdvSearchResults/Person/220001305");
wr.MaximumAutomaticRedirections=10;
wr.AllowAutoRedirect=true;
很多站点在没有意识到的情况下重定向,默认情况下WebRequest不会。但你可以按上述方式启用它。最大值只是一个占位符,您可以根据需要增加或减少它,但我建议您保留它以避免无限重定向或重定向循环。