使用 Mozmill 测试 Firefox 插件

Using Mozmill for testing Firefox addon

我有一个 Mozilla Firefox 插件,想测试一下。我找到了 Mozmill 并编写了 Python 小脚本,它只是获取每个 Firefox 版本和 运行 命令,如下所示:

mozmill --binary=C:\browsers\firefox.0.1\firefox.exe 
--addon=C:\my_ext\ext 
--test=C:\my_ext\tests\mozmill\

这是脚本 unit_test_runner_public.py:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from subprocess import check_output
import time

firefox_binary_path = 'C:\browsers\firefox\'
ff_addon_location = 'C:\my_ext\ext'
tests_folder = 'C:\my_ext\tests\mozmill\'
ff_versions = ['38.0.1', '37.0.2', '36.0.4', '35.0.1', '34.0.5', '33.1.1',
               '32.0.3', '31.0', '30.0', '29.0.1', '28.0', '27.0.1', '26.0',
               '25.0.1', '24.0', '23.0.1', '22.0', '21.0', '20.0.1', '19.0.2',
               '18.0.2', '17.0.1', '16.0.2', '15.0.1', '14.0.1', '13.0.1']


def build_ff_path(ff_version):
    return "%s%s%s" % (firefox_binary_path, ff_version, "\firefox.exe")


for item in ff_versions:
    print "##### Started unit tests for Mozilla Firefox %s #####" % item
    current_run = "mozmill --binary=%s --addon=%s --test=%s" % \
        (build_ff_path(item), ff_addon_location, tests_folder)
    test_run_result = check_output(current_run, shell=True)
    print "##### Finished unit tests for Mozilla Firefox %s #####" % item

    time.sleep(10)

Mozmill 正在启动浏览器,运行进行测试,然后关闭浏览器,并对从 38.0.1 到 13.0.1 的每个 Firefox 版本执行此操作

问题是,几乎每次它都挂在某个随机的 Firefox 版本上。所以它打开浏览器实例,运行 测试,但它没有关闭浏览器,Firefox window 挂了一段时间,然后我在终端看到这样的异常:

##### Finished unit tests for Mozilla Firefox 16.0.2 #####
##### Started unit tests for Mozilla Firefox 15.0.1 #####
mozversion INFO | application_buildid: 20120905151427
mozversion INFO | application_changeset: 0b774a1067fe
mozversion INFO | application_display_name: Firefox
mozversion INFO | application_id: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
mozversion INFO | application_name: Firefox
mozversion INFO | application_repository: http://hg.mozilla.org/releases/mozilla
-release
mozversion INFO | application_vendor: Mozilla
mozversion INFO | application_version: 15.0.1
mozversion INFO | platform_buildid: 20120905151427
mozversion INFO | platform_changeset: 0b774a1067fe
mozversion INFO | platform_repository: http://hg.mozilla.org/releases/mozilla-re
lease
mozversion INFO | platform_version: 15.0.1
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\mozmill\__init__.py", line 878, in run
    mozmill.run(tests, self.options.restart)
  File "C:\Python27\lib\site-packages\mozmill\__init__.py", line 473, in run
    self.stop_runner()
  File "C:\Python27\lib\site-packages\mozmill\__init__.py", line 595, in stop_ru
nner
    raise Exception('client process shutdown unsuccessful')
Exception: client process shutdown unsuccessful
Traceback (most recent call last):
  File "unit_test_runner_public.py", line 24, in <module>
    test_run_result = check_output(current_run, shell=True)
  File "C:\Python27\lib\subprocess.py", line 573, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'mozmill --binary=C:\browsers\firefox.
0.1\firefox.exe --addon=C:\my_ext\ext --test=C:\my_ext\tests\mozmill\' returned 
non-zero exit status 1

C:\my_ext>

而且每次随机版本的 Firefox 都会发生这种情况,因此某些特定的 Firefox 版本不会出现类似问题的模式。

系统详细信息是:

和 pip 列表的输出:

blessings (1.6)
jsbridge (3.0.3)
ManifestDestiny (0.5.7)
manifestparser (1.1)
mozcrash (0.14)
mozdevice (0.45)
mozfile (1.1)
mozinfo (0.7)
mozlog (2.11)
mozmill (2.0.10)
moznetwork (0.24)
mozprocess (0.22)
mozprofile (0.23)
mozrunner (5.35)
mozversion (1.0)
pip (1.5.6)
setuptools (7.0)

有人遇到过此类问题吗?

所以,在 Mozmill Developers Google Groups - I've got an answer from Henrik Skupin 上发帖提问后,谁负责 Mozmill。

简而言之,他们也遇到了这个问题,但 Mozmill 很快就会停产 - 最好开始使用新框架 firefox-ui-tests. Unfortunately it doesn't have yet possibility to specify --addon like it was with Mozmill, but bug(功能请求);) 已经创建 - 所以很可能此功能将在未来的版本中添加。同时,如果您需要测试 Firefox 插件,您可以将 --profile 指定为已预构建的带有预安装插件的 Firefox 配置文件。