多浏览器测试对比工具

简介:

 引言

各浏览器内核不一样,支持的css标准不一样,因此前端开发人员对各个浏览器的兼容性很头疼。不仅如此,前端的测试人员也身受其害。同样的功能,需要在不同的浏览器中重复地操作与观察。即使已将前端的case自动化,还需要搭建不同的浏览器环境,在各浏览器中一一发起执行。既然case已经自动化运行,能否再进一步, 若case能在各个浏览器下自动的运行,则能减少测试人员搭建多浏览器环境与串行多次运行case的代价。
现状  

目前已有工具可在浏览器兼容性的测试中给出一些辅助。笔者觉得可将它们按功能可归为三类:一类是可将同一url在多个浏览器中打开并返回截图的工具,比如Browsershots、SuperPreviewIE;一类是提供一系列备选浏览器,在不需要在机器上安装各浏览器的情况下,模拟指定的浏览器操作的工具,比如Browser Sandbox、IEtester;另一类是检测js错误工具,可在不需安装多浏览器的情况下检查js是否能运行成功,比如crosscheck。此类工具的缺点都在于不能将对同一页面的操作同步到多个浏览器中,只能减少各浏览器的安装成本,测试时仍需对每个浏览器逐一检查。另外,sandbox与 ietester是否反应页面在各浏览器下的真实结果还有待确认。
多浏览器测试对比工具
笔者设计的多浏览器测试对比工具,也并不能将测试人员从浏览器兼容性测试的工作中解放出来,但是,它可以减少您在windows下安装ie6\ie7\ie8\firefox3.6\chrome的工作,自动地在各个浏览器中完成case的执行,并行执行case来节约case运行时间,它还可以返回各浏览器中运行的截图供您一次性查看,同时运用基于分块的直方图相似度对比各浏览器的截图图像,以给您查看图像时提供参考。
多浏览器测试对比工具的功能图如下: 


1. 输入数据 

工具会检查某个目录下是否有文件夹,用户只需将含有自动化case及配置文件的文件夹上传到此目录下,工具检测到用户输入后,会根据配置文件中指定的浏览器类型,将case分发到浏览器对应的机器上,并发起case的执行。
配置文件格式如下 

2. 输出结果
此工具将收集各浏览器测试的结果,如下,每个以浏览器类型命名的文件夹下是各浏览器的截图及运行日志,在server的日志中,给出各浏览器截图的相似度对比结果。

3. 关于实现

 1) 多浏览器环境的建立
每个浏览器都在windows环境下真实地安装,从而得到真正各版本浏览器下运行的结果。各浏览器安装在一台或多台机器上,由由server端记录着各个浏览器类型所对应的机器及机器提供case上传、远程调用的端口号。各浏览器所在机器部署着多浏览器工具的client,提供了查询client空闲状态、运行case、返回运行结果等接口供server端调用。
(2)case的分发
Case的分发到哪台机器,意味着case会在这台机器上执行。目前的case分发采用着最为简单的方法。每次server只运行一个应用,即当有多个case文件夹同时上传到ftp后,会依次处理每一个上传。当server端检测到case输入时,根据配置文件中选择的浏览器类型,依次查询对应浏览器所在的机器列表中,有哪台机器是空闲的,若有空间的机器,则将case部署到此机器上。对获取空闲机器的操作加锁,以保证不会出现并发时对机器的获取有误。Server建立各浏览器运行case的线程,由配置文件中,case在各个浏览器下串并行配置来确定线程的运行顺序。
采用以上方法来分发case,虽然简单方便,但存在着资源利用不充足的问题。可能出现正在运行的case在等待符合条件的空闲机器,而现在空闲的机器虽然不满足此时case的浏览器要求,却可能满足下一个输入满足的浏览器类型。笔者目前还没有想到好的算法。若所有的case全为并行,则可将解析所有的待运行case,按case\浏览器类型组成数组,当有空闲机器时,就从数组中找出能满足条件的先运行。但因case可设置为串行,此方法便不可行了。若大家有满足串并行要求、又能充分利用机器资源的算法,欢迎交流。
(3)浏览器截图
截图的时间
当case发起执行时,同时发起另一线程开始截图。当case运行完成或遇到异常结束时,截图停止。配置文件中可设置截图的时间间隔,线程中按指定的时间间隔sleep截图。


截图的方法
由于此工具并不会干涉用户如何操作浏览器,因此对浏览器的截图并没有调用selenium或watinN的相关接口来截图,而是调用windows api来完成的截图。在截图时,先根据此时浏浏览器的类型来得到浏览器窗口的classname,由classname来定位浏览器的父窗口句柄,再枚举子窗口,得到浏览器渲染区的句柄。为了能将渲染区的图清晰地截取出来,在获取了父窗口的句柄后,将窗口最大化且置为HWND_TOPMOST。由winApi中的GetWindowRect根据渲染区的句柄得出渲染区的屏幕坐标区域,再对此区域进行屏幕截取。
由于chrome\firefox存在不同程度打开一个应用程序,出现多个classname相同的窗口的情况,因此在获取chrome与firefox句柄的细节方面,还加了title过滤等处理。
截图的对比
图像的对比的方法较多,领域也很深,笔者找到了一个基于图像直方图来对比相似度的方法,觉得能有一些参考价值。此方法将两个图像各切分为64个小方格,每个方格提取直方图,对比相似度后,取相似度的平均值做为总的图像相似度。
笔者将baidu上搜索hahaxixi的自动化case放入多浏览器工具中,选择在ie6\ie8\firefox3.6下运行,人眼看到的截图基本一致,得到的对比结果是,ie6.0与firefox3.6下截图的相似度为83.949%,ie6.0与ie8.0的截图相似度为82.233%。
4. 关于运用

 此工具刚开发完成,目前是在测试时使用了一些web自动化case在运行。此后准备先在创意专家项目组来实验并完善此工具。
由于工具的使用比较简单,用户只需将可执行的自动化case及配置文件传入ftp即可,由工具自动地完成case的分发、执行、截图与结果收集。若运行得比较顺畅,用户可在持续集成中采用此工具做兼容性检查的daily run。不过,此工具对用户自动化用例的要求会高一些,用例能成功运行的浏览器类型,还取决于用户自身的web case所使用的执行引擎。 

作者:pfeng

 









本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/744416,如需转载请自行联系原作者


相关文章
|
22天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
116 7
性能工具之emqtt-bench BenchMark 测试示例
|
16天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
1天前
|
Web App开发 测试技术 C++
Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
Playwright是新兴的跨浏览器测试工具,相比Selenium,它支持Chrome、Firefox、WebKit,执行速度快,选择器更稳定。安装Playwright只需一条`pip install playwright`的命令,随后的`playwright install`会自动添加浏览器,无需处理浏览器驱动问题。这一优势免去了Selenium中匹配驱动的烦恼。文章适合寻求高效自动化测试解决方案的开发者。
10 2
|
5天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
16 0
|
7天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
13 1
|
11天前
|
机器学习/深度学习 人工智能 测试技术
提升软件测试效率与准确性的策略与工具
【5月更文挑战第2天】 在软件开发生命周期中,测试阶段是确保产品质量的关键。然而,传统的测试方法往往耗时且容易出错。本文将探讨一系列现代软件测试策略和工具,旨在提高测试效率和准确性。我们将分析自动化测试框架、持续集成(CI)、测试驱动开发(TDD)以及人工智能(AI)在测试中的应用,并讨论如何结合这些技术和方法来优化测试流程。
|
13天前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。
|
13天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
13天前
|
机器学习/深度学习 人工智能 机器人
深入理解自动化测试:框架、工具与实践
【4月更文挑战第30天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速市场交付的关键环节。本文将探讨自动化测试的核心框架、常用工具以及实际应用的最佳实践,旨在为软件测试工程师提供深入的理解和有效的策略,以改进其自动化测试流程。我们将分析几种流行的测试自动化框架,包括Selenium、Appium和JUnit,并讨论如何根据项目需求选择适合的工具。此外,文中还将介绍持续集成(CI)环境下的自动化测试策略,以及如何通过测试结果分析和报告来优化测试过程。目标是帮助读者构建更健壮、更高效的自动化测试系统。
|
14天前
|
IDE 测试技术 持续交付
探索自动化测试工具Selenium的高效应用
【4月更文挑战第29天】 在快速迭代的软件开发过程中,高效的测试策略是确保产品质量的关键。本文将深入探讨如何利用自动化测试工具Selenium来提高软件测试的效率和准确性。通过介绍Selenium的核心功能、脚本编写技巧以及与持续集成环境的集成方法,我们旨在为读者提供一个全面的Selenium应用指南。此外,我们还将讨论常见的问题解决策略,并通过案例分析展示如何有效地运用Selenium进行复杂的Web应用测试。

热门文章

最新文章