【问题标题】:Capture HTTP Traffic捕获 HTTP 流量
【发布时间】:2012-08-30 16:58:17
【问题描述】:

短版:
我希望确保(客户端)请求一个 URL(部分匹配)。

加长版:
我希望自动化我的部分测试。目前我使用Fiddler2手动验证。

这是场景:

  1. 用户导航到站点 A
  2. 我的应用使用跟踪 URL 重定向(在 Fiddler 的 HTTP 流量中可见)
  3. 用户最终到达站点 A,现在应用了参数。

我想在 C# 中通过部分匹配(例如包含 {string})来验证第 2 步是否发生。

问题:
我该怎么办?我已经开始研究HttpWebRequest 类和FiddlerCore,但我喜欢使用尽可能简单的代码(以便其他团队成员在需要时更新)让我询问 StackOverflow 的用户会推荐什么。

【问题讨论】:

  • 您是否考虑过使用 selenium RC 之类的东西通过浏览器来执行此操作?这可能比检查流量少。
  • 是的,我使用 Telerik Test Studio。问题是我在第 2 步中的 URL 仅在浏览器地址栏中出现一瞬间。我的目标是监视/嗅探流量,以便在示例的步骤 3 中结束 URL 之前确保 URL 被命中。不过谢谢!

标签: c# http


【解决方案1】:

看看SharpPcap。它基于 pcap(Windows 上的 WinPcap),这是流行的Wireshark 使用的数据包捕获库。

在 CodeProject 上有一个非常棒的教程,其中包含大量示例代码可以帮助您入门:http://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework-for-NET

一旦您持有数据包(SharpPcap 会捕获,而不是解析),您可以使用 Packet.Net 将数据包解析成可用的东西(在您的情况下是 HTTP 通信)。

【讨论】:

  • 感谢您的回复。我将研究 SharpPcap,因为我可以在我的自动化套件中运行 C# 代码作为测试步骤。
  • 不幸的是,必须运行一个安装程序才能使 C# 应用程序正常工作。 ://
【解决方案2】:

听起来您想嗅探 HTTP 流量。您可以使用像 winpcap 这样的数据包捕获驱动程序,导入该 DLL 并进行测试,或者使用 @SimpleCoder 提到的 SharpPcap

最省力的方法是写一个FiddlerScript Addon,以检查请求并在必要时重定向。

【讨论】:

  • 感谢您的回复。我将放弃 Fiddler 路线,因为调用外部服务会导致我的自动化软件出现问题,因为它没有“阻止操作”来告诉测试脚本等待其他进程,然后继续下一个自动化步骤。
【解决方案3】:

编辑:当我阅读问题时,没有看到 #2 作为中间 URL,它看起来像是(唯一的)重定向操作。根据您的browser of choice, and the type of redirect performed,您可以使用 Selenium 读取页面引用并获取重定向。

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;

// Call any javascript
var referrer = js.executeScript("document.referrer");

我会推荐 Selenium Webdriver 来满足您在 C# 中的所有网站/应用程序测试需求。它与 NUnit、MSTest 和其他测试框架完美集成 - 非常易于使用。

使用 Selenium Webdriver,您将从您的 C# 测试代码启动一个自动浏览器实例(Firefox、Chrome、Internet Explorer、PhantomJS 等)。然后,您将使用简单的命令控制浏览器,例如“转到 url”或“在输入框中输入文本”或“单击按钮”。 See more in the API.

它也不需要其他开发人员太多 - 他们只运行测试套件,假设他们安装了浏览器,它就会工作。我已经成功地在一个开发人员团队中使用它进行了数百次测试,每个开发人员都有不同的浏览器偏好(即使是测试,我们每个人都对其进行了调整)和团队构建服务器。

对于这个测试,我会先go to the url in step 1,然后是wait for a second,然后在步骤 3 中读取 url。

这里是一些示例代码,改编自 Introducing the Selenium-WebDriver API by Example。由于我不知道您要查找的 URL 和 {string}(本例中为“奶酪”),因此示例没有太大变化。

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

// Requires reference to WebDriver.Support.dll
using OpenQA.Selenium.Support.UI;

class RedirectThenReadUrl
{
    static void Main(string[] args)
    {
        // Create a new instance of the Firefox driver.

        // Notice that the remainder of the code relies on the interface, 
        // not the implementation.

        // Further note that other drivers (InternetExplorerDriver,
        // ChromeDriver, etc.) will require further configuration 
        // before this example will work. See the wiki pages for the
        // individual drivers at http://code.google.com/p/selenium/wiki
        // for further information.
        IWebDriver driver = new FirefoxDriver();

        //Notice navigation is slightly different than the Java version
        //This is because 'get' is a keyword in C#
        driver.Navigate().GoToUrl("http://www.google.com/");

        // Print the original URL
        System.Console.WriteLine("Page url is: " + driver.Url);

        // @kirbycope: In your case, the redirect happens here - you just have
        // to wait for the new page to load before reading the new values

        // Wait for the page to load, timeout after 10 seconds
        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        wait.Until((d) => { return d.Url.ToLower().Contains("cheese"); });

        // Print the redirected URL
        System.Console.WriteLine("Page url is: " + driver.Url);

        //Close the browser
        driver.Quit();
    }
}

【讨论】:

  • 感谢您的回复。但是,我们已经使用了一个名为 Telerik 的自动化套件。问题是它不像访问一个 URL 并等待片刻那么容易。这是因为我正在寻找的 URL 是一种中间人,而您的解决方案(上图)将向我显示示例第 3 步中的 URL,而不是第 2 步中看到的 URL。
【解决方案4】:

跟进: 我最终使用 Telerik 的代理发送 HTTP 请求并通过 C# 解析响应。这是被用作跳板的文章:

https://docs.telerik.com/teststudio/advanced-topics/coded-samples/general/using-the-http-proxy

【讨论】:

  • 您的资源已关闭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多