Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 使用数据驱动测试用例与MBUnit/Gallio进行并行测试_Selenium_Webdriver_Mbunit_Selenium Grid_Parallel Testing - Fatal编程技术网

Selenium 使用数据驱动测试用例与MBUnit/Gallio进行并行测试

Selenium 使用数据驱动测试用例与MBUnit/Gallio进行并行测试,selenium,webdriver,mbunit,selenium-grid,parallel-testing,Selenium,Webdriver,Mbunit,Selenium Grid,Parallel Testing,我已经读了很多关于使用Selenium Grid的Selenium 2的RemoteWebDriver。目前,我的测试是使用[Test]属性在Test()中生成的 我有一个TestCriteria类,我用信息填充它,然后使用Selenium WebDriver的“页面对象设计模式”作为“控制”如何将这些数据输入到我的测试中的一种方式 因此,我有一个简单的criteria对象,例如: 公共类凭据 { 公共字符串用户名{get;set;} 公共字符串密码{get;set;} } 然后在Login

我已经读了很多关于使用Selenium Grid的Selenium 2的
RemoteWebDriver
。目前,我的测试是使用
[Test]
属性在
Test()
中生成的

我有一个
TestCriteria
类,我用信息填充它,然后使用Selenium WebDriver的“页面对象设计模式”作为“控制”如何将这些数据输入到我的测试中的一种方式

因此,我有一个简单的criteria对象,例如:

公共类凭据
{ 
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
}
然后在LoginPage对象中使用此信息

公共类登录页
{
[FindByAnnotation]
公共IWebElement用户名字段{get;set;}
[FindByAnnotation]
公共IWebelement密码字段{get;set;}
[FindByAnnotation]
公共IWebelement提交按钮{get;set;}
公共主页登录(凭据cred)
{
UsernameField.SendKeys(cred.user);
//登录和返回新主页对象的代码
}
}
现在,有了这种结构,一旦我有了测试数据,我就能够在测试中创建一些好的方法链接,比如我的凭证对象,需要在其他页面上填充的数据等等

[TestFixture]
公共类测试夹具
{
私人IWebDriver;
私有TestCaseData;//包含凭证对象等
[设置]
公共作废设置()
{
数据=新的TestCaseData()
{ 
凭据=新凭据()
{ 
Username=“Username”,
Password=“Password”
}
//其他测试用例数据对象可以在这里填充
};
驱动程序=新的FireFoxDriver();
}
[测试]
公开无效测试()
{
新建LoginPage().Login(data.Credentials)
.NavigateToSearchPage()
.EnterSearchCriteria(data.searchCriteria)
//等
}
}

这一切都很好,但是……如果我想从一个序列化的TestData对象加载测试数据,这个对象可以从XML反序列化,该怎么办呢

我还对使用
RemoteWebDriver
感兴趣,虽然我已经使用了它,但与仅使用
IWebDriver driver=new FireFoxDriver()相比,它仍然是一个很小的问题,但是忽略这些问题,我真的希望不止一次地同时运行一个测试用例。这就引出了并行测试的问题

我知道姆布尼特可以处理这件事,这是加里奥的一部分,我也研究过普尼特,这是努尼特的延伸,但它还有很长的路要走。所以我决定坚持使用姆布尼特

这使我能够使用属性
[Parallelizable]
运行testfixture。因此,如果我编译我的项目并将项目dll加载到Gallio TestRunner GUI中,我可以同时运行4个测试用例,这反过来会打开4个同时运行每个测试的浏览器,同时还可以在所有4个测试运行时对站点施加压力。(显然,这将增加到使用selenium RemoteWebDriver和selenium Grid在多台机器上运行数百个浏览器

这里有人知道我可以加载xml序列化对象集合、生成新的TestFixture对象的方法吗?这些对象可以将
[Parallelizable]
属性添加到测试夹具的顶部,并在从一个目录(例如:C:\TestCase目录)加载1-10.xml文件后让它们同时运行

我的想法是将这些都加载进来,然后让Selenium网格处理浏览器会话,其中1-5个Selenium节点连接到主Selenium网格中心

我真的很难利用Selenium网格,因为我找不到一个框架来生成一个
测试夹具
,其中包括一个
[SetUp]
[TearDown]
[Test]
以及根据从TestCase.xml文件加载的内容设置特定测试条件以测试属性的功能

例如,如果一个TestCase.xml文件有一个失败的元素,那么我如何加载这个.xml文件并在我的TestFixture的[Test]上为此设置一个属性,或者在运行时将TestCase.xml描述映射到
[Test(Description=”“)]
属性

我已经知道selenium webdriver的功能、页面对象设计模式、selenium
EventFiringWebDriver
屏幕截图功能

我如何利用这种能力来加载几个XML序列化的TestCaseData,并在加载之后生成新的TestFixture对象

理想情况下,我希望每个TestFixture的[SetUp]设置
IWebDriver
,因为某些URL会根据TestCase.xml文件包含的内容而有所不同,例如,此测试将在UAT环境、测试环境、预生产环境上运行,我需要在运行测试之前设置此URL

有没有人有一个基本的例子,它将这些主要概念与Selenium Grid/Selenium WebDriver结合使用,能够并行运行这些测试装置,从而利用运行多个浏览器的Selenium Grid功能

所以我在伪代码中寻找一些东西

public类Main()
{
//负载测试夹具
列出测试用例=反序列化(\\Some\\FolderLocation”);
foreach(测试用例中的测试)
{ 
//创建新的testFixture,而不是[Test]
//能够连接并行测试夹具
}  
}
[测试夹具]
[可并行化]
公共类测试夹具
{
公共TestCase TestCase{get;set;}
公共IWebDriver驱动程序{get;set;}
[设置]
公共作废设置()
{
if(testCase.Environment==“UAT”)
{
public static IEnumerable<TestCase> TestCases()
        {
            yield return new TestCase { Name = "internet explorer" };
            yield return new TestCase { Name = "firefox" };
        }

[FixtureSetUp]
        public void SetUp()
        {
            Console.WriteLine("SetUp " + testCase.Name);
            switch (testCase.Name)
            {
                case "internet explorer":
                    driver = new InternetExplorerDriver();
                    break;
                case "chrome":
                    driver = new ChromeDriver();
                    break;
                case "firefox":
                    driver = new FirefoxDriver();
                    break;
            }
        }