测试浏览器扩展(Testing browser extensions)

2019-07-19 16:36发布

我打算写一堆浏览器扩展(每个流行的浏览器相同的功能)的。 我希望,某些代码将被共享,但我不知道这呢。 可以肯定的一些扩展将使用原生API。 我有TDD / BDD没有太多的经验,而且我认为这是一个启动如下因素从这个项目这些想法的好时机。

问题是,我不知道如何处理它。 我应该写为每个浏览器不同的测试? 我应该走多远这些测试? 这些扩展将是很简单 - 在本地存储一些数据,刷新页面,并通过网络套接字听。

而我的观察,为什么难呢,我 - 因为有很多的行为,并没有这么多的机型,这也依赖一个平台上。

Answer 1:

我练习测试我的浏览器扩展的两种不同的方式:

  • 单元测试
  • 集成测试

介绍

我将使用跨浏览器的YouTube歌词由罗布W¯¯扩展为整个答案的例子。 这个扩展的核心是用JavaScript编写的,并与AMD模块组织。 构建脚本生成扩展名的文件为每个浏览器。 与r.js ,我精简的特定浏览器的模块,例如一个为跨来源的HTTP请求和永久存储器(对于喜好),并用吨为polyfills IE的一个模块包含。

扩展插入带有歌词在YouTube上,的Grooveshark和Spotify当前播放歌曲的面板。 我有过这些第三方网站没有控制,所以我需要一个自动化的方式来验证扩展依然很不错。

工作流程

在开发过程中:

  1. 实行/编辑功能,如果功能是不平凡的写单元测试。
  2. 运行所有的单元测试 ,看看是否有任何突破。 如果有什么是错的,回去1。
  3. 承诺与git。

之前的版本:

  1. 运行所有的单元测试 ,以验证各个模块仍正常工作。
  2. 运行所有集成测试 ,以验证扩展作为一个整体仍然是工作。
  3. 凹凸版本,创建扩展。
  4. 上传更新到官方扩展画廊和我的网站(Safari和IE浏览器的扩展必须由自己托管),并承诺与git。

单元测试

我用摩卡 + expect.js编写测试。 我不为每个模块测试每一个方法,只是重要的项目。 例如:

  • 该DOM解析方法。 在野外(包括jQuery的)大多数DOM分析方法都存在缺陷:任何外部资源的加载和执行的JavaScript。
    我验证DOM解析方法正确分析DOM无副作用。

  • 偏好模块:我验证数据可以保存并返回。

  • 我的分机获取来自外部来源的歌词。 这些源在单独的模块中定义。 这些定义识别和使用的InfoProvider模块,这需要一个查询,(黑盒子),并输出搜索结果。

    • 首先,我测试是否InfoProvider模块的功能正常。
    • 然后,对于每个的17种源,我通过一个预先定义的查询到源(与InfoProvider ),并验证结果预计:
      • 查询成功
      • 返回的歌名匹配(通过将一个单词类似算法)
      • 返回的歌词的长度在预期范围之内。
  • 无论是UI没有明显打破,例如通过点击关闭按钮。

这些测试可以直接从本地服务器,或在浏览器扩展运行。 本地服务器的好处是,你可以编辑测试并刷新浏览器看到的结果。 如果所有这些测试都通过了,我跑在浏览器扩展测试。
通过传递一个额外的参数debug到我的构建脚本,单元测试捆绑了我的扩展。

在网页中运行测试是不够的,因为扩展的环境可以从正常的页面有所不同。 例如,在一个Opera 12扩展,没有全球location对象。

备注:我不包括在发布版本的测试。 大多数用户并不需要报告和调查的错误的努力,他们只会给低评级,并说像“不工作”。 确保无明显的错误你的扩展功能之前,把它运。

摘要

  • 查看模块的黑盒子。 你不关心里面有什么,只要输出匹配预期或给定的输入。
  • 开始测试您的扩展的关键部分。
  • 确保测试可以建立并轻松运行,可能以非扩展的环境。
  • 不要忘了运行扩展的执行上下文中的测试,以确保有扩展的上下文中没有任何约束或意外的情况,其破坏你的代码。

集成测试

我用Selenium 2来测试我的分机是否仍然工作在YouTube上,的Grooveshark(3次)和Spotify。

最初,我只是用硒IDE记录测试,看看它是否工作。 这很顺利,直到我需要更多的灵活性:我想有条件地运行取决于测试账户是否或没有登录测试。 这是不可能的默认硒IDE(有人说是可能与流量控制插件 -我还没有尝试过)。

硒IDE提供导出现有的测试其他格式的选项,包括JUnit 4个测试(JAVA)。 不幸的是,这个结果并不令人满意。 许多命令无法识别。

于是,我放弃了硒IDE,并切换到硒。
请注意,当你搜索“硒”,您就会找到硒RC(硒1)和硒的webdriver(硒2)信息。 首先是应该用于新项目的老弃用,后者(硒的webdriver)。

一旦你发现的文件是如何工作的,这是很容易使用。
我喜欢的文档在项目页面,因为它通常简洁(在维基 )和完成(在Java文档 )。

如果你想快速上手,请阅读入门wiki页面 。 如果你有空闲时间,看看通过在SeleniumHQ文档 ,特别是硒的webdriver和webdriver的:高级用法 。
硒电网也值得一读。 此功能允许您在不同的(虚拟)机分发测试。 伟大的,如果你想测试在IE8,9和10分机, 同时 (对运行Internet Explorer的多个版本,你需要虚拟化)。

自动化测试是很好的。 更重要的是漂亮的? 自动化安装扩展!
该ChromeDriver和FirefoxDriver支持扩展的安装,在看到这个例子 。

对于SafariDriver ,我写了两个类来安装自定义Safari浏览器扩展。 我已经出版,并在公关硒发送,所以它可能是提供给大家的未来: https://github.com/SeleniumHQ/selenium/pull/87

该OperaDriver不支持安装自定义扩展的(从技术上讲,它应该是可能的,虽然)。
需要注意的是与来临铬供电歌剧院 ,老OperaDriver不起作用了。

这里有一个Internet Explorer的驱动程序 ,而这一次也绝对不会允许一个安装自定义扩展。 Internet Explorer不具有扩展的内置支持。 扩展是通过MSI或EXE安装程序,它甚至没有集成在Internet Explorer安装。 因此,为了自动安装在IE中您的扩展,你需要能够平静地运行,它安装您的IE插件的安装程序。 我没有试过



Answer 2:

测试浏览器扩展所带来对我来说有些难度为好,但我在,我可以从硒带动浏览器同时调用了几个不同的区域实施的测试解决。

我使用的步骤是:

首先,我写集成到可以通过简单地将一个特定的URL被激活的扩展代码测试代码。 当分机看到这个URL,它开始运行测试。

然后,在激活扩展的测试页我执行服务器端的测试,以确保该API执行,并记录和日志的问题在那里。 我记录方法调用,他们把时间和任何错误。 所以,我可以看到扩展调用的方法,网络性能,业务逻辑性能和数据库的性能。

最后,我自动调用浏览器在特定URL指向,并与其他测试信息,错误等使用Selenium任何给定的客户端系统上沿记录他们的表现:

http://docs.seleniumhq.org/

这样我可以打破测试的浏览器,扩展,服务器,应用程序和数据库方面,并根据具体的测试集所有这些连接在一起。 这需要一些工作来把它放在一起,但一旦它的完成,你可以有一个非常不错的扩展测试框架。

通常,对于以维持一个代码库我使用crossrider,但是你可以用任何框架或原生扩展,你想这样做跨浏览器的扩展开发,硒不会在意的,它只是驱动扩展到特定页面,并允许你进行互动,并进行测试。

关于这种方法的一个好处是,你可以用它来现场用户以及。 如果您正在为您的扩展支持,有一个用户去测试网址,马上你会看到的延伸和服务器端性能。 你不会得到当然Selenium测试,但你会俘获了不少问题,这种方式 - 非常有用,当你对编码的各种浏览器和浏览器版本。



文章来源: Testing browser extensions