繁体   English   中英

使用selenium,Nunit,Selenium Grid,C#,webdriver / remote control进行自动浏览器测试

[英]Automated Browser Testing using selenium, Nunit, Selenium Grid, C#, webdriver/remote control

我一直在研究如何使用各种不同的方法自动化浏览器测试数周。 Seleniums网站非常模糊,这是最好的选择。

我安装了

  1. Selenium Webdriver
  2. 遥控
  3. Selenium Grid
  4. Apache Ant
  5. Nunit(以及你可能需要做的其他一切)

我终于放弃了自己的尝试,并想知道最好的方法。

我希望能够

  1. 在许多不同的浏览器上加载相同的网页
  2. 在许多虚拟机(我已设置)上加载相同的网页
  3. 能够拍摄比较不同浏览器结果的快照。

我对使用C#进行编程有所了解,并希望通过Nunit运行我的测试。

任何人都可以给我指示或指向我已经拥有它们的网站吗? 谢谢。

我已经使用junit和Selenium WebDriver构建了一个测试框架,它满足了你的每一个要点。 虽然它不完全是你所要求的,但我觉得无论如何它对你都有好处。

在许多不同的浏览器上加载相同的网页

使用Selenium的网格,设置非常简单。 设置一些虚拟机,其中包含您要测试的环境。例如,在我们的环境中,我们有一个运行四个节点(作为虚拟机)的网格,其设置如下所示

  • Windows与IE7和FireFox
  • Windows与IE8和FireFox
  • Windows与IE9和Firefox
  • Linux与FireFox

请注意,Selenium建议只允许在Windows节点上运行一个IE实例。 在每个上述节点上,存在指定IE的一个实例,并且允许在任何给定时间运行指定FF的五个实例。 通过网格设置和集线器配置,启动测试是轻而易举的。 在WebDriver中,使用DesiredCapabilities对象设置所需的环境,然后关闭测试并等待结果返回。

Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);

在许多虚拟机(我已设置)上加载相同的网页

我通过强制测试以螺旋方式以非常规的方式运行来解决这个问题。 每个JUnit测试都使用我放在一起的共享线程库,它创建了在不同线程中所需的所有必需的RemoteWebDrivers。 这些线程中的每一个在其节点上同时运行,而父线程处于等待并终止所有线程。 然后进入下一个运行多线程的测试。

我遇到了一些问题,例如在所有子线程中检索Junit堆栈跟踪。 我通过将Std.err重定向到父线程上的字节流来解决这个问题。 所有错误都被路由到该流,然后我转换为字符串并在每次测试结束时打印到Std.out 在测试结束时生成的html页面包括完美的Std.out

能够拍摄比较不同浏览器结果的快照

虽然我已经开始使用它,但是远程抓取屏幕截图存在一些固有的问题。 如果进程作为服务运行,IE将返回黑屏幕截图。 解决方法是从命令行运行jar并保持用户登录,在这种情况下屏幕截图正确返回。 这是浏览器中的一个已知问题,并且确实没有很好的解决方案。 截图大致类似于此

WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();

它将捕获的屏幕截图从远程计算机的运行浏览器保存到本地计算机上。

实际上,浏览器自动化仍在努力稳定自身。 有许多重要的功能,例如您所询问的功能,我在任何框架中都没有牢固地实现这些功能。 但是,随着时间的推移,我相信很多这样的事情会得到解决,各地的QA开发人员都会欢欣鼓舞。

至于第二点:您可以让持续集成服务器完成工作,而不是使用Grid。 在我的公司,我们使用Jenkins和所谓的配置矩阵 - 它让你在多个Jenkins节点上运行相同的工作。

至于第一个,我认为詹金斯在这里也会有所帮助。 您可以在同一节点上运行多个作业。 虽然我从未尝试过,所以我并不十分确定。 这只是一个想法,我不会真的推荐这样的解决方案。 您可能还想阅读此博客文章,描述如何使用Selenium Grid并行运行测试。 对于使用Java的人,我建议阅读有关TestNG的并行测试

你的第三点有点模糊。 快照是什么意思? 你想要比较什么样的结果?

Selenium RC已过时,webdriver是创建硒测试的更可靠方式。 我看到上面的回答更多地关注java方面。 下面提到了有关如何使用C#和selenium webdriver实现此处提出的问题的更多信息

关于如何设置IDE(VS express),nUnit和selenium参考如何在VSExpress上设置C#,nUnit和selenium客户端驱动程序以进行自动化测试

在创建启动浏览器的简单脚本时,请参考使用Nunit和C#创建基本Selenium Web驱动程序测试用例。

关于如何在许多不同的浏览器上加载相同的网页建议参考如何使用selenium和c#本地调用不同类型的浏览器驱动程序

在为此启用多个虚拟机(我已设置)上的相同网页时,您需要使用远程webdriver而不是普通的webdriver。 使用远程webdriver,您可以启动不同类型的浏览器。 请参阅此网页如何使用C#中的远程webdriver调用/运行不同类型的Web驱动程序浏览器

要在不同的浏览器上拍摄快照,您可以参考链接使用C#/ Selenium webdriver中的远程/本地webdriver捕获屏幕截图

您可能还会考虑免费的Telerik测试框架 这是Telerik商业测试工作室产品的基础。 测试框架提供跨浏览器支持,在动态内容情境(AJAX)方面做得很好,还可以处理操作系统级别的对话框,如文件上载/下载对话框。 您也可以随时拍摄浏览器的快照。

您可以将框架包装在您喜欢的任何跑步者中。 我已经毫无困难地使用了NUnit和MbUnit。

如果您需要有关自动化的帮助,还可以选择支持包。

(披露:我为Telerik工作,作为他们的Test Studio传道者)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM