Mozilla应用程序的UI自动化工具
项目描述
[Mozmill](https://mdn.org.cn/en/Mozmill) 是一个测试工具和UI自动化框架,用于编写测试和其他自动化脚本,用于Gecko应用程序(如Firefox和Thunderbird)。它被构建为一个 [python](https://pythonlang.cn) 命令行工具。Python包提供了一种机制,可以从命令行运行测试,并提供了一种测试应用程序重启的方法。Mozmill具有一个广泛的API,可以帮助您编写模拟用户交互的功能测试。
[[Mozmill测试自动化项目](https://wiki.mozilla.org/QA/Mozmill_Test_Automation)] 于2009年1月开始,涵盖了Firefox的自动化工作。查看[项目页面](https://wiki.mozilla.org/QA/Mozmill_Test_Automation)或查看[Mozmill测试文档](https://mdn.org.cn/en/Mozmill_Tests),以了解如何参与编写和运行[Mozmill测试](https://mdn.org.cn/en/Mozmill_Tests)。现有的测试在Firefox新主要版本或安全版本发布的[发布测试](https://mdn.org.cn/en/Mozmill/Release_Testing)周期中运行。
此外,Mozilla Messaging团队还有一个活跃的项目,该项目负责[使用Mozmill测试Thunderbird](https://mdn.org.cn/en/Thunderbird/Thunderbird_MozMill_Testing)。
# 安装
Mozmill作为一个Python包提供。有关如何在您的系统上设置Mozmill的说明,请参阅[安装页面](./Installation)。
# Python客户端
[Mozmill Python包](http://pypi.python.org/pypi/mozmill) 调用并运行Gecko应用程序,执行自动测试脚本,并累积和报告结果。
## 运行命令行客户端
安装Python包后,您可以使用mozmill命令运行Mozmill。使用mozmill命令运行一个或多个测试(-t mytest.js)或测试清单(-m manifest.ini)
mozmill -m functional_tests.ini mozmill -t mytest.js -t myothertest.js
mozmill –help 显示可用的命令行选项和更多有关命令行工具的详细信息。有关测试清单的格式和用法,请参阅http://hg.mozilla.org/automation/ManifestDestiny/file/tip/README.txt。
## 控制流程
Mozmill Python包在调用时将Mozmill和[jsbridge](./jsbridge)扩展捆绑到一个配置文件中。
Mozmill的运行方式如下
mozmill -app firefox -b path/to/binary -t path/to/test.js [选项]
这将执行以下操作
应用程序,在这种情况下是firefox,将由[mozrunner](/en/Mozrunner)查找
将为受测试的应用程序创建一个适当的[配置文件对象](/en/Mozprofile)
将创建一个[python-javascript桥](./jsbridge),它将用于在Python运行器和JavaScript测试环境之间进行通信
将test.js文件发送到jsbridge,在那里它被加载和执行(请参阅:[resource://mozmill/modules/frame.js](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/extension/resource/modules/frame.js))
事件将从JavaScript发送回Python,在那里它们将被监听(见:[资源://mozmill/modules/frame.js](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/extension/resource/modules/frame.js))
在测试运行结束时,结果将通过[可插拔事件处理器](./EventHandlers)报告
## 示例API使用
从Mozmill 2.0开始,[MozMill类](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/__init__.py)可用作健壮的API。示例API使用可在https://github.com/mozilla/mozmill/tree/master/mozmill找到。
## 架构
Python Mozmill是一个测试框架和事件调度器。
Mozmill Python包由多个不同的包依赖项构建
[jsbridge](./jsbridge) : Python到JavaScript桥接接口
[mozrunner](/en/Mozrunner) : Mozilla应用程序(Firefox、Thunderbird等)的可靠启动/停止/配置
[mozinfo](/en/Mozinfo) : 统一的Mozilla系统信息接口
[manifestparser](http://hg.mozilla.org/automation/ManifestDestiny) : 解析测试和扩展manifest
有关程序设计的更多信息,请参阅[架构](./Architecture)。
## 事件调度
Mozmill将JavaScript测试和模块中的事件调度到Python运行器。有关此过程的信息,请参阅[事件处理器](./EventHandlers)。
## 将数据传输到和从测试中
将数据传输到和从JavaScript测试中是期望的。有几个机制可以做到这一点
[事件处理器](./EventHandlers)将数据从JavaScript应用程序层发送到Python框架
持久对象:一个在测试之间持久化的[cite]JSObject](https://github.com/mozilla/mozmill/blob/master/jsbridge/jsbridge/jsobjects.py),即使被测试的应用程序关闭或重启。每个[MozMill](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/__init__.py)实例都携带一个持久对象。然而,持久数据的量必须保持较小,否则[jsbridge](./jsbridge)将失败。
为更精确地控制将数据从和到测试中创建自己的[cite]JSObject](https://github.com/mozilla/mozmill/blob/master/jsbridge/jsbridge/jsobjects.py)。
另请参阅[问题668550 - python应该有一些方式将数据传输到JS侧的测试](https://bugzilla.mozilla.org/show_bug.cgi?id=668550)
## Python回调
JavaScript测试可以使用Mozmill附带包含的PythonCallbacks [事件处理器](./EventHandlers)调用任意Python。Mozmill JavaScript模块具有firePythonCallback()函数,它接受filename、文件中的method名称、有序的列表args和kwargs对象。此函数将调度到[mzmill.python_callbacks模块](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/python_callbacks.py)的[cite]mozmill.firePythonCallback [事件](./EventHandlers),该模块将导入并触发适当的回调。filename是JavaScript测试文件的位置相对路径。请注意,任何来自Python回调的返回值都不会发送到JavaScript测试或以其他方式利用。
请参阅[cite]mutt [python_callbacks.js测试](https://github.com/mozilla/mozmill/blob/master/mutt/mutt/tests/js/frame/python_callback.js)和相应的[cite]python_callbacks.py](https://github.com/mozilla/mozmill/blob/master/mutt/mutt/tests/js/frame/python_callback.py)示例。
成功运行的关键在于Python回调能够成功触发。否则,将通过Python错误引发一个[JsBridge](./jsbridge)错误,导致测试框架失败。
## 重启和关闭
JavaScript测试可以启动浏览器关闭和重启。存在两种关闭/重启事件类型:
用户关闭:测试指示关闭或重启。这不会停止浏览器,但表示进一步的操作将导致重启或关闭(如触发Ctrl+Q)
运行器关闭:测试告诉运行器关闭或重启,可能给出当前文件中下一个要运行的测试。
两种情况都会触发一个[cite]事件[/cite],mozmill.userShutdown,允许Python测试框架预测关闭或重启的类型。事件中发送以下参数:
用户:true或false;关闭是否由“用户”事件触发
重启:true或false;关闭是否为重启
下一个:当前测试文件中下一个要运行的测试函数的名称(如果有);否则将运行下一个测试文件(如果有)
重置配置文件:true或false;是否将配置文件重置到初始状态。请注意,此参数不适用于用户重启事件,因为在应用重启之前,存在不允许配置文件可靠重置的竞争条件
请参阅[MozMillController](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/extension/resource/modules/controller.js)上的startUserShutdown、restartApplication和stopApplication方法以了解详细信息。
此外,mozmill –restart在每两个测试文件之间触发测试框架重启。这有利于隔离测试行为,但缺点是浏览器重启会导致运行时间更长。
## 学习Mozmill测试
[Mozmill简介](https://mdn.org.cn/en/Mozmill/First_Steps/Tutorial%3a_Introduction_to_Mozmill):详细的教程,按需介绍每个Mozmill API对象
[Mozmill测试](https://mdn.org.cn/en/Mozmill_Tests):如何设置和运行[QA](http://quality.mozilla.org/) [mozmill测试](http://hg.mozilla.org/qa/mozmill-tests/)
为Mozmill JavaScript测试提供了API文档。
## Mozmill测试API
[controller对象参考](https://mdn.org.cn/en/Mozmill/Mozmill_Controller_Object)
[element对象参考](https://mdn.org.cn/en/Mozmill/Mozmill_Element_Object) (Mozmill 2.0+)
[查找mozmill元素](https://mdn.org.cn/en/Mozmill/Finding_Mozmill_Elements) (Mozmill 2.0+)
[mozmill对象参考](https://mdn.org.cn/en/Mozmill/Mozmill_Base_Object_Interfaces)
[扩展元素层次](https://mdn.org.cn/en/Mozmill/Mozmill_Element_Object/Extending_the_MozMill_element_hierarchy)
[elementslib对象参考](https://mdn.org.cn/en/Mozmill/Mozmill_Elements_Library_Object) (在Mozmill 2.0中已弃用 - 请参阅[cite]查找mozmill元素[/cite](https://mdn.org.cn/en/Mozmill/Finding_Mozmill_Elements))
[断言API参考](https://mdn.org.cn/en/Mozmill/Mozmill_Unit_Test_Framework)
## 查找和报告错误
Mozmill 正在积极开发中。请访问 [自动工具 Mozmill 项目页面](https://wiki.mozilla.org/Auto-tools/Projects/Mozmill) 了解开发信息。如果您认为您在 Mozmill 中发现了一个错误,请检查 [现有错误列表](https://bugzilla.mozilla.org/buglist.cgi?resolution=—&component=Mozmill&product=Testing)。如果您的发现错误未列在列表中,请在 [bugzilla](https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&component=Mozmill) 下“测试”产品“Mozmill”组件中 [提交新的错误](https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&component=Mozmill)。请尽可能提供详细信息,并附上 Mozmill 测试(如果有的话),以显示问题。感谢您帮助我们使 Mozmill 更好!
更新文档
[MDN](https://mdn.org.cn/en/Mozmill) 页面是从 [mozmill 存储库](https://github.com/mozilla/mozmill) 镜像的。请参阅我们[文档策略](./Documentation) 上的说明。
资源
存在多个关于 Mozmill 的在线资源
[MDN Mozmill 页面](https://mdn.org.cn/en/Mozmill)
[github 存储库](https://github.com/mozilla/mozmill)
[Python 包索引页面](http://pypi.python.org/pypi/mozmill)
[Mozmill 自动工具项目页面](https://wiki.mozilla.org/Auto-tools/Projects/Mozmill) 用于 Mozmill 的开发
此外,在 irc://irc.mozilla.org/ 上有一个 #mozmill 频道。请过来看看,打个招呼!