熟悉Appium驱动程序(或如何选择必要的驱动程序)

注意事项 翻译:我翻译了这篇文章,以帮助那些在测试自动化方面迈出第一步并希望了解更多有关Appium工具的人。 它描述了Appium驱动程序的一般操作原理,以及它们的类型和用途。 在旅程的开始,许多测试人员缺乏有条理的信息,而这些材料将有助于确定正确工具的选择。



Appium是一个跨平台工具,可让您同时自动执行移动(iOS和Android)和桌面应用程序的测试。 实现此多平台模型的方法是使用各种驱动程序。 本质上,Appium具有与Selenium WebDriver大致相同的体系结构,后者还使用大量独立的驱动程序来支持跨浏览器测试自动化。

针对不同的自动化工具,有单独的Appium驱动程序,这通常意味着每个平台都使用一个驱动程序(一个用于iOS,一个用于Android等)。 但是,也有例外。 它们与以下事实有关:在某些平台(例如,对于Android)的测试应用程序自动化中,有几种工具与Appium结合使用。 实际上,Android有三种驱动程序:基于UiAutomator,UiAutomator 2和Espresso。

司机的工作原理


驱动程序可能是整个工具中最重要的组件,因为驱动程序的任务是在特定平台上执行Appium API(称为WebDriver协议)的命令。 本质上,驱动程序是将Appium客户端代码转换为可以在iOS,Android等设备上执行命令的转换器。

出于架构简化等原因,每个单独的驱动程序本身都是独立的WebDriver兼容服务器(尽管它没有主Appium服务器具有的所有选项)。 在驱动程序内部,接收到的命令以特殊方式处理。 例如,可以将它们转移到在Android设备上运行Java代码的单独进程中。

驱动程序本身具有相当复杂的内部体系结构,有时基于多种技术。 下图显示了XCUITest驱动程序(当前的iOS驱动程序)所涉及的技术堆栈:

如您所见,XCUITest驱动程序的原理并不是那么简单。 它是Appium的一部分,可在您启动iOS会话时启动。 在驱动程序内部,它使用另一个称为WebDriverAgent的工具,该工具负责将WebDriver协议命令转换为XCUITest库调用。

尽管最终每个驱动程序都可以实现自己的驱动程序,但许多驱动程序都具有相似的体系结构,因为最终该驱动程序作为继承Appium BaseDriver类的类发布在npm中。 这使驱动程序可以轻松连接到Appium。

驱动程序类型


那么那里有多少个司机? 老实说,很难确定,因为除了Appium的官方驱动程序外,还有非官方的驱动程序。 但是,如果我们查看Appium的源代码,则会看到以下内容:

const AUTOMATION_NAMES = { APPIUM: 'Appium', UIAUTOMATOR2: 'UiAutomator2', UIAUTOMATOR1: 'UiAutomator1', XCUITEST: 'XCUITest', YOUIENGINE: 'YouiEngine', ESPRESSO: 'Espresso', TIZEN: 'Tizen', FAKE: 'Fake', INSTRUMENTS: 'Instruments', WINDOWS: 'Windows', MAC: 'Mac', }; 

自动化名称是Appium使用的各种驱动程序的键。 此部分代码确定允许将哪些行用作AutomationName功能的值。 每个驱动程序通常仅支持一个平台。 这是根据每个驱动程序的AutomationName的简要说明:

  • Appium只是指向所选平台的默认驱动程序的指针,而不是单独的驱动程序。
  • UiAutomator2( 资源库 )-Android平台的当前驱动程序,默认使用,基于Google UiAutomator工具;
  • UiAutomator1( 存储库 )是基于旧版UiAutomator的旧版Android驱动程序。 将来将不支持该驱动程序,因此最好放弃该驱动程序而改用UiAutomator2。
  • XCUITest( 存储库 )-iOS的默认驱动程序,基于Apple XCUITest工具;
  • YouiEngine( 存储库 )-来自You.i Labs开发人员的驱动程序,用于对基于其SDK创建的各种平台的应用程序测试进行自动化;
  • Espresso( 存储库 )-基于Google Espresso工具的最新Android驱动程序;
  • Tizen( 存储库 )-三星开发人员提供的驱动程序,用于自动测试Tizen OS中使用的基于Xamarin的应用程序;
  • Fake(名称不言而喻)被用作Appium的内部测试工具。 您将永远不必使用它。
  • Instruments( repository )-用于iOS 9.3及更低版本的应用程序的过时驱动程序;
  • Windows( 存储库 )-微软组装了一个与Appium兼容的服务器,称为WinAppDriver,该驱动程序将其连接到主Appium服务器。 直接设计用于自动化Windows桌面应用程序;
  • Mac( 存储库 )-一种驱动程序,可让您自动测试Mac的桌面应用程序。

如前所述,这些驱动程序中的每一个都有其自己的体系结构,可以通过查看以下图表来看到:


司机常见问题


那么您如何知道要使用哪个驱动程序?

好吧,如果您需要为iOS,Windows,Mac或Tizen的应用程序编写自动测试 ,则选择很明显-为每个平台使用默认驱动程序。 对于Android,在这里您必须在UiAutomator2和Espresso之间进行选择。 最好事先了解每种工具,并了解哪种工具最适合您的情况。 UiAutomator2和Espresso驱动程序的功能相似,但并不完全相同。

所有驱动程序是否均等地支持相同命令?

是的,没有。 从根本上说,我们受到平台提供商提供的自动化功能的限制。 在Android设备上点击可以与iOS设备上的点击相同。 但是执行其他命令的过程可能会有所不同。 Appium开发人员尽可能尝试确保不同平台上的驱动程序行为相同。

我可以从一个驱动程序切换到另一个驱动程序,并期望测试失败吗?

是的,没有。 这完全取决于我们在谈论什么驱动程序。 使用Appium的优点之一是,您可以从一种自动化工具切换到另一种自动化工具(例如,从UiAutomator2到Espresso),而无需牺牲现成的测试套件。 但是,您应该缓慢而有条理地进行迁移,确保一切都按预期进行。 Appium团队有时会发布从一个驱动程序迁移到另一个驱动程序的迁移准则-在迁移之前,您应该注意它们。

我可以创建自己的驱动程序吗?

是的 许多人已经做到了这一点,特别是Jason HugginsI (在AppiumConf 2019上)。 但是,还有其他专有的驱动程序,例如Christian Broman的hbbtv 驱动程序

驱动程序会在Appium 2.0中发生变化吗?

这是一个很好的问题! Appium驱动程序系统的负面影响之一是它们都包含在Appium服务器依赖项中。 但是,我们正在努力确保驱动程序存在于一个不太紧密的系统中,您可以在其中选择与Appium一起使用的特定驱动程序。 如果您解决了此问题,则在仅使用Appium来运行iOS测试时,不必安装旧的UiAutomator2驱动程序并连接其依赖项。 (您知道有关于开发Appium 2.0建议吗?)

希望本文对您有所帮助。 我很高兴阅读有关您使用Appium驱动程序的经验的评论。

Source: https://habr.com/ru/post/zh-CN480490/


All Articles