嵌在客户端里的网页怎样自动化测试 ----- 一个三年前的问题的解答
三年前的一次面试中我被问及,怎样自动化测聊天PC客户端软件里内嵌的网页。
具体来说,他们的产品是某网站的聊天工具。聊天工具有PC端,PC端内部有嵌入一些网页。
问我怎样做自动化测试。
我曾经被这个问题难倒过。
因为我那时只会用selenium,面试官先问我selenium会到啥程度,再问我遇到非通用的浏览器,selenium不支持的话怎么办。
然后问我怎么用selenium实现某个自定义浏览器的driver。
最后问我,怎样自动化测试他们这个内嵌有网页的桌面程序。
现在回想了一下。
突然有了答案。首先实现一个webdriver是没有必要的。selenium的作者使用webdriver这种奇怪的代码组织方式是为了兼容性。在只需要测单个自定义浏览器的情况下,根本不需要对这个浏览器去开发一个webdriver。如果要测的是浏览器本身,需要开发人员开放一些接口,而要测的如果是浏览器里显示的网页,根本不需要用这个浏览器来自动化测试。
下面是我的答案,仅供参考:
首先,把待测的软件划分为两个部分,一个是网页,一个是客户端。
待测的用户场景分为3类。只和网页有关的、只和客户端有关的、客户端和网页交互的。
当测试只和网页有关的场景时,可以用普通浏览器打开该网页,进行自动化测试。
当测试只和客户端有关的场景时,需要客户端提供对应的接口,在测试脚本里调用对应的接口。接口的例子:比如点击某图标之类的。也就是转化成接口测试来编写和执行。
当要测两者交互的场景时,明确我们到底要测网页,还是测客户端,还是一起测,
只测网页时,采用mock的客户端+真实的网页----技术方案用一般的selenium之类的就行了。
只测客户端时,采用mock的网页+真实的客户端-----技术方案同接口测试。
两个一起测时,就用真实的网页+真实的客户端----技术方案就是接口测试和selenium混合。
综上,再把问题扩展和一般化,
在需要单独测一些模块的时候引入合理的mock代替外部系统,
在需要集成不同模块时,采用统一的编程语言和不同的库处理不同的逻辑(比如桌面端和web端的不同逻辑)。
如此,不管是桌面端、web端、移动端,不管什么端的自动化测试都可以混合起来做。也都可以孤立开来使用mock单独测。