5

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

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

这是场景:

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

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

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

4

4 回答 4

7

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

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

一旦你掌握了数据包(SharpPcap 确实捕获,而不是解析),你可以使用Packet.Net将数据包解析成可用的东西(在你的情况下是 HTTP 通信)。

于 2012-09-05T22:10:33.360 回答
1

编辑:当我阅读问题时,没有看到 #2 作为中间 URL,它看起来像是(唯一的)重定向操作。根据您选择的浏览器和执行的重定向类型,您可以使用 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”或“在输入框中输入文本”或“单击按钮”。在 API 中查看更多信息。

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

对于此测试,我将转到第 1 步中的 url,然后等待一秒钟,然后在第 3 步中读取 url。

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

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();
    }
}
于 2012-09-06T00:22:39.683 回答
0

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

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

于 2013-01-10T00:04:35.937 回答
0

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

最省力的路径是编写一个FiddlerScript 插件,以检查请求并在必要时重定向。

于 2012-09-05T22:12:41.703 回答