用于mozilla应用程序的ui自动化工具
mozmill的Python项目详细描述
[mozmill](https://developer.mozilla.org/en/mozmill)是一个测试工具,并且 用于编写测试和其他自动化脚本的ui自动化框架 用于基于壁虎的应用程序,如Firefox和Thunderbird。 它是作为一个[python]命令行工具构建的(http://python.org rel="nofollow">http://python.org)。python包提供了 从命令行运行测试以及 提供一种测试重新启动应用程序的方法。 mozmill有一个广泛的api来帮助您编写 模拟用户交互。
[Mozmill Test Automation项目](https://wiki.mozilla.org/qa/mozmill_test_automation" rel="nofollow">https://wiki.mozilla.org/qa/mozmill_test_automation) 成立于2009年1月,涵盖 火狐浏览器。查看[项目页面](https://wiki.mozilla.org/qa/mozmill_test_automation) 或者看看 [mozmill测试文档](https://developer.mozilla.org/en/mozmill_tests) 如何在写作和跑步中做出贡献 [mozmill测试](https://developer.mozilla.org/en/mozmill_tests)。 现有测试在 [发布测试](https://developer.mozilla.org/en/mozmill/release嫒testing) 循环使用新的主要版本或安全版本的Firefox。
此外,mozilla消息传递团队还有一个活动项目来处理 [雷鸟Mozmill测试](https://developer.mozilla.org/en/thunderbird/thunderbird_mozmill_testing)。
#安装
mozmill是一个python包。 有关如何安装的说明,请参见[安装页](/installation) 在您的系统上安装Mozmill。
#python客户端
[mozmill python包](http://pypi.python.org/pypi/mozmill" rel="nofollow">http://pypi.python.org/pypi/mozmill) 调用并运行gecko应用程序,执行自动测试脚本, 并累积和报告结果。
##运行命令行客户端
[安装]后(安装) 可以使用mozmill命令运行mozmill的python包。 mozmill命令与一个或多个测试一起运行(-t mytest.js)或 测试清单(-m manifest.ini):
< Buff行情> mozmill-m functional_tests.ini mozmill-t mytest.js-t myothertest.jsmozmill–help显示可用的命令行选项等 有关命令行实用程序的深入信息。对于格式 以及测试清单的使用,请参见 http://hg.mozilla.org/automation/manifestdestiny/file/tip/readme.txt
##控制流
mozmill python包捆绑了mozmill和[jsbridge](/jsbridge) 调用时扩展到配置文件。
Mozmill的运行方式如下:
< Buff行情> mozmill-app firefox-b path/to/binary-t path/to/test.js[选项]这将执行以下操作:
- 在本例中,应用程序将由 [mozrunner](/en/mozrunner)
- 将创建一个[profile对象](/en/mozprofile)类型 适用于测试中的应用程序
- 将创建一个[python javascript桥](/jsbridge),它将 用于在python运行程序和javascript之间进行通信 测试环境
- test.js文件将通过jsbridge发送 加载并执行(参见: [资源://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))
- 测试结束后,结果将由 [可插入事件处理程序](./event handlers)
##API使用示例
自Mozmill2.0以来, [mozmill类](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/uuuu init_u.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):解析测试和附加清单
有关 程序设计。
##事件调度
mozmill将事件从javascript测试和模块分派到 蟒蛇赛跑者。请参阅[事件处理程序](./event handlers)了解其工作原理。
##从测试中获取数据
希望在javascript测试之间传输数据。那里 有几种机制可以做到这一点:
- [事件处理程序](./event handlers)从javascript发送数据 python线束的应用程序层
- 持久化对象:a [jsobject](https://github.com/mozilla/mozmill/blob/master/jsbridge/jsbridge/jsobjects.py) 在测试之间保持的 即使正在测试的应用程序已关闭或重新启动。每个 [mozmill](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/\uu init\uu.py) 实例携带一个持久化的对象。数量 但是,持久化数据必须保持较小,否则[jsbridge](/jsbridge)将失败。
- 创建自己的 [jsobject](https://github.com/mozilla/mozmill/blob/master/jsbridge/jsbridge/jsobjects.py) 用于更精细的调谐控制,从测试中获取数据。
也见 [bug 668550-python应该有某种方式将数据传输到js端的测试](https://bugzilla.mozilla.org/show_Bug.cgi?id=668550)
##python回调
javascript测试可以使用pythoncallbacks调用任意python [事件处理程序](./eventhandlers)包含在mozmill中。这个 [mozmill javascript模块](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/extension/resource/modules/mozmill.js) 具有firethoncallback()函数,该函数接受文件名, 文件中方法的名称、有序参数列表和 kwargs对象。此函数将派遣一个 mozmill.firethoncallback[事件](/eventhandlers)返回到 [mozmill.python_回调模块](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/python_callbacks.py) 它将导入并启动相应的回调。文件名 相对于javascript测试文件的位置。注意,任何 来自python回调的返回值不会发送到 javascript测试或以其他方式使用。
参见mutt [python_callbacks.js test](https://github.com/mozilla/mozmill/blob/master/mutt/mutt/tests/js/frame/python_callback.js) 以及附带的[python_callbacks.py](https://github.com/mozilla/mozmill/blob/master/mutt/mutt/tests/js/frame/python_callback.py) 例如。
启动python回调对于成功运行非常重要 成功。否则,[jsbridge](./jsbridge)错误将通过 python错误和线束将失败。
##重新启动和关闭
javascript测试可以启动 浏览器。有两种类型的关机/重新启动事件:
- 用户关机:测试指示关机或重新启动。这确实 不停止浏览器,但表示进一步的操作将导致 重新启动或关闭(例如触发ctrl+q)
- 转轮关闭:测试告诉转轮关闭或重新启动, 可能在同一个文件中运行下一个测试。
两个案例都触发了一个[事件](/eventhandlers),mozmill.usershutdown, 这使得python线束能够预测关闭的类型,或者 重新启动。以下参数随事件一起发送:
- 用户:true或false;关机是否由 "用户"事件
- 重新启动:true或false;关机是否是重新启动
- next:当前测试中要运行的下一个测试函数的名称 文件(如果有);否则将运行下一个测试文件(如果有)
- 重置配置文件:true或false;是否将配置文件重置为 开始状态。请注意,这不可用于用户重新启动 事件,因为存在不允许配置文件的比赛条件 在应用程序重新启动之前可靠地重置
请参见方法startusershutdown,restartapplication,以及 停止应用程序 [mozmill controller](https://github.com/mozilla/mozmill/blob/master/mozmill/mozmill/extension/resource/modules/controller.js) 有关详细信息。
此外,Mozmill–Restart表示 每个测试文件。这有利于隔离测试行为,但是 否定,因为重新启动浏览器会导致运行时间更长。
#学习Mozmill测试
- [Mozmill简介](https://developer.mozilla.org/en/mozmill/first-steps/tutorial%3a_-introduction_-mozmill" rel="nofollow">https://developer.mozilla.org/en/mozmill/first-steps/tutorial%3a_-introduction_-mozmill): 详细的教程,介绍了需要的每个mozmill api对象
- [mozmill测试](https://developer.mozilla.org/en/mozmill_tests): 如何设置和运行[qa](http://quality.mozilla.org/) [mozmill测试](http://hg.mozilla.org/qa/mozmill-测试/)
有用于mozmill javascript测试的api文档。
##Mozmill测试API
- [控制器对象引用](https://developer.mozilla.org/en/mozmill/mozmill_controller_object" rel="nofollow">https://developer.mozilla.org/en/mozmill/mozmill_controller_object)
- [元素对象引用](https://developer.mozilla.org/en/mozmill/mozmill_element_object" rel="nofollow">https://developer.mozilla.org/en/mozmill/mozmill_element_object)(mozmill 2.0+)
- [查找mozmill元素](https://developer.mozilla.org/en/mozmill/finding_mozmill_elements)(mozmill 2.0+)
- [mozmill对象引用](https://developer.mozilla.org/en/mozmill/mozmill_base_object_interfaces)
- [扩展元素层次结构](https://developer.mozilla.org/en/mozmill/mozmill_element_object/extending_mozmill_element_hierarchy" rel="nofollow">https://developer.mozilla.org/en/mozmill/mozmill_element_object/extending_mozmill_element_hierarchy)
- [elementslib对象引用](https://developer.mozilla.org/en/mozmill/mozmill_elements_library_object" rel="nofollow">https://developer.mozilla.org/en/mozmill/mozmill_elements_library_object) (在Mozmill 2.0中已弃用-请参阅 [查找mozmill元素](https://developer.mozilla.org/en/mozmill/finding_mozmill_elements)
- [断言API参考](https://developer.mozilla.org/en/mozmill/mozmill_unit_test_framework)
#查找和报告错误
莫兹密尔正在积极开发中。查看 [自动工具mozmill项目页面](https://wiki.mozilla.org/auto-tools/projects/mozmill) 关于发展的信息。如果你认为你在莫兹密尔发现了一只虫子, 请检查 [现有错误列表](https://bugzilla.mozilla.org/buglist.cgi?分辨率=-&;组件=Mozmill&;产品=测试)。 如果你发现的错误没有列在那里,请 [提交一个新的错误](https://bugzilla.mozilla.org/enter_Bug.cgi?产品=测试和组件=Mozmill) 在[bugzilla](https://bugzilla.mozilla.org/) 在"测试"产品和"Mozmill"组件下。拜托 提供尽可能多的细节,如果 可用,这表明了问题所在。谢谢你帮我们做莫兹密尔 更好!
#更新文档
[mdn](http://developer.mozilla.org/en/mozmill)页面被镜像 从[mozmill repository](https://github.com/mozilla/mozmill)。 请参阅[文档策略]的注释(./文档)。
#资源
Mozmill有几个在线资源:
- [mdn mozmill page](http://developer.mozilla.org/en/mozmill)
- [github存储库](https://github.com/mozilla/mozmill)
- [python包索引页](http://pypi.python.org/pypi/mozmill" rel="nofollow">http://pypi.python.org/pypi/mozmill)
- [自动工具Mozmill项目页](https://wiki.mozilla.org/auto-tools/projects/mozmill" rel="nofollow">https://wiki.mozilla.org/auto-tools/projects/mozmill) 为莫兹米尔的发展
此外,irc://irc.mozilla.org/上还有一个"mozmill频道" . 请过来打个招呼!