如何使用 C# 编写自动化系统测试?

Posted

技术标签:

【中文标题】如何使用 C# 编写自动化系统测试?【英文标题】:How to Write Automated System Tests with C#? 【发布时间】:2012-01-24 17:04:52 【问题描述】:

我们有一个旧的 asp.net 应用程序,它没有单元测试、集成测试、组件测试或 UI/功能测试 - 令人惊讶!

现在,我们想引入一些自动化系统测试来测试功能,以便当应用出现问题时我们会立即得到通知!

例如用户注册表,用户可以在其中输入用户名和电子邮件地址并在系统中注册。

引入单元测试为时已晚/太昂贵(因为当前的设计不可单元测试)所以现在最重要的是编写自动化系统测试。

例如,我们想用 C# 编写一个测试,打开浏览器,在文本框中输入数据,点击注册按钮,然后我们的测试检查数据是否被插入进入数据库,是否发送验证邮件,最后是否向用户显示正确的消息(当然这只是主要场景,还有很多特殊情况)。基本上不是测试孤立的单元,而是测试整个过程是否有效!

那么,我可以使用什么工具来帮助我编写这样的测试并将其自动化?

你会推荐使用什么方法?

我查看了 Selenium 和 Fitnesse,但它们似乎不允许我编写 C# 代码来测试数据库等。我查看了 SoapUI/LoadUI 相同的问题。可能会使用WatiN,不确定。非常感谢任何想法/建议。

希望问题很清楚。

非常感谢,

【问题讨论】:

seleniumhq.org 是事实上的工具,或者如果您拥有 Visual Studio Ultimate,我相信该版本具有某种能力。 视觉工作室包含“测试”程序,并按照您在此处描述的想法进行操作。你试过了吗? @Joe 使用 Selenium 可以写 c# 代码吗?我们只有专业版的 VS。 是的,但这只是我所追求的一部分。 LoadUI/SoapUI 也会这样做。我需要编写一个测试,例如也检查数据库。整个过程所涉及的组件,不仅仅是 UI 的变化。 【参考方案1】:

Selenium 绝对允许您编写 C# 代码进行系统测试。首先,您将有一种与网站交互的方法,第二种方法来验证数据库是否正确。所有这些都在一个测试应用程序/类中。

对于网络交互,您可以使用WebDriver(取自Selenium API doc)。这是 IWebDriver 接口的一些示例代码。它与 google 交互,但您可以修改它以与您的网站交互。

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

class GoogleSuggest

    static void Main(string[] args)
    
        IWebDriver driver = new FirefoxDriver();
        driver.Navigate().GoToUrl("http://www.google.com/");
        IWebElement query = driver.FindElement(By.Name("q"));
        query.SendKeys("Cheese");
        System.Console.WriteLine("Page title is: " + driver.Title);
        driver.Quit();
    

然后您只需实现另一个方法来验证数据库条目是否正确,使用类似 LinqToSql 或其他 C# 数据库 API 之类的东西。

【讨论】:

谢谢,你能用 Selenium 记录/回放页面上的用户活动吗? 我从未使用过 WatiN,因此无法评论它的功能。至于记录和回放,是的,您可以使用 Selenium IDE(Firefox 插件)单击您的 web ui,IDE 将在 Selenese 中记录您的操作。然后,您可以轻松地将其导出为 C# 代码。我自己从来没有这样做过,但是根据他们的docs 这很容易。 请注意,生成的代码假定您在 C# 中使用 NUnit,而您不一定需要。您只需要 IWebDriver 交互。取决于您希望它变得多么正式和复杂。【参考方案2】:

如果您拥有 Visual Studio Ultimate,也许您正在寻找编码的 UI 测试? http://msdn.microsoft.com/en-us/library/dd286681.aspx

【讨论】:

编码的 UI 测试也可用于 Visual Studio 2010 Premium。【参考方案3】:

使用CodedUI 或Selenium Web driver

【讨论】:

我想你会从这里得到好主意--blog.gfader.com/2010/02/…【参考方案4】:

您还可以将Telerik's Test Studio 视为满足您测试需求的解决方案。 (披露:我为 Telerik 工作,担任他们的测试工作室布道者。)

Test Studio 可让您轻松创建极易维护的功能和性能测试。

您还可以轻松地在 C#(或 VB.NET)中添加步骤或测试来处理诸如测试夹具设置/拆卸之类的事情,或者处理您提到的测试 oracle 情况。 (检查数据库以确保正确保存记录,使用 nDumbster 之类的东西进行电子邮件验证等)

【讨论】:

【参考方案5】:

Selenium Webdriver 可以作为包添加到 Visual Studio Express IDE 中的 C# 项目中,然后添加 nUnit 包可以编写测试用例。以下是一些可以帮助您开始使用 selenium webdriver 自动化测试用例的链接

关于如何设置 IDE(VS express),nUnit 和 selenium 参考 How to setup C#,nUnit and selenium client drivers on VSExpress for Automated tests

关于创建启动浏览器的简单脚本执行几个步骤,请参阅 Creating Basic Selenium web driver test case using Nunit and C#

关于如何在多个不同的浏览器上加载相同的网页,我建议参考 How to invoke locally different types of browser driver using selenium and c#

在为此在多个虚拟机上加载相同的网页时,您需要使用远程 webdriver 而不是普通的 webdriver。此外,使用远程 webdriver,您可以启动不同类型的浏览器。参考这个网页 How to invoke/run different type of web driver browser using remote webdriver in C#

要在不同的浏览器上拍摄快照,您可以参考链接 Capturing screen shots using remote/local webdriver in C#/Selenium webdriver

【讨论】:

以上是关于如何使用 C# 编写自动化系统测试?的主要内容,如果未能解决你的问题,请参考以下文章

您如何在 C# 中模拟文件系统以进行单元测试?

接口自动化测试测试用例设计

自动化测试——读写64位操作系统的注册表

如何使用Pytest进行自动化测试

Apifox写接口自动化测试用例总结-2

编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试