在.NET中发出Web请求并等待服务器返回完整结果

时间:2015-07-09 21:30:50

标签: .net c#-4.0 performance-testing

我正在研究一种对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();
            }
        }
    }

最终,如果我可以使这个工作,我想收集返回这些结果所需的时间。

谢谢!

2 个答案:

答案 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不会。但你可以按上述方式启用它。最大值只是一个占位符,您可以根据需要增加或减少它,但我建议您保留它以避免无限重定向或重定向循环。