Python移动自动化测试面试

时间:2022-08-25 18:38:40

Python移动自动化测试面试

 

移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的”变”, 变化导致自动化用例的大量维护。从分层测试的角度,自动化测试应该逐层进行。最大量实现自动化测试的应该是单元测试,最容易实现也最容易在早期发现问题;其次是接口级测试,以验证逻辑为目的进行自动化,由于接口的相对稳定,自动化测试成本相对也可以接受;自动化成本最大的便是UI级自动化测试,然而UI界面是直接反馈给用户的效果展示,适度的尤其是BVT级的自动化测试也是非常必要的。本文通过分析几种自动化框架的异同,使测试人员在选择自动化框架时有所参考。

Python移动自动化测试面试

 

Android自动化框架

 

 

1、Instrumentation 

 

https://developer.android.com/reference/android/app/Instrumentation.html

 

Instrumentaion是Android自带的一个测试框架,是很多其它测试框架的基础,可以在同进程中加载被测组件。它有很多丰富的高层封装,使用者可以使用基于instrumentation的其他框架,避免过多二次开发量。但Instrumentation不支持跨应用,导致基于instrumentation的框架都继承了这个缺点。

 

2、Robotium 

 

https://github.com/robotiumtech/robotium

 

Robotium是基于Instrumentation框架开发的一个更强的框架。对常用的操作进行了易用性的封装。用于开发功能性、系统和验收测试场景。它运行时绑定到GUI组件。它安装了一个测试用例套件作为在Android设备或仿真器上的应用程序,并提供用于执行测试的真实环境。

 

优点:容易在最短的时间内编写测试脚本,易用性高。自动跟随当前activity。由于运行时绑定到GUI组件,所以相比Appium,它的测试执行更快,更强大。不访问代码或不了解app实现,也可以工作。支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控件。

 

缺点:不能处理flash和web组件。在旧设备上会变得很慢。 由于不支持iOS设备,当自动化测试同时覆盖android与iOS的情况时,测试会被中断。没有内置的记录和回放功能,使用记录功能需要TestDroid和Robotium Recorder这样的收费工具。

 

3、UIAutomator

 

https://google.github.io/android-testing-support-library/docs/uiautomator/

 

UIAutomator是由谷歌提供的测试框架,它提供了原生Android app和游戏的高级UI测试。这是一个包含API的Java库,用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。

 

优点:它在运行访问不同的进程时,会给JUnit测试案例特权。库由谷歌社区支持和维护。

 

缺点:仅支持android4.1(API level 16)及以上。不支持脚本记录。支持的重点是Java。你不能获得当前活动或仪表化。目前不支持web视图。库仅支持使用Java,因此很难和使用Ruby的cucumber混合。如想支持BDD框架,建议使用Java自己的BDD框架,例如Jbehave。

 

4、Espresso

 

https://google.github.io/android-testing-support-library/docs/espresso/index.html

 

Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁、API更加精确、编写测试代码简单、容易快速上手。因为是基于Instrumentation的,所以不能跨App。

 

5、Calabash

 

https://github.com/calabash

 

Calabash是一个适用于iOS和Android开发者的跨平台app测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash开源免费并支持Cucumber语言,Cucumber能让你用自然的英语语言表述app的行为,实现BDD(Behavior Driven Development,行为驱动开发)。Cucumber中的所有语句使用Ruby定义。

 

优点: 有大型社区支持。列表项简单,类似英语表述的测试语句支持在屏幕上的所有动作,如滑动,缩放,旋转,敲击等。跨平台开发支持(同样的代码在Android和iOS设备中都适用)。

 

缺点:测试步骤失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题。测试耗费时间,因为它总是默认先安装app。需要Calabash框架安装在ios的ipa文件中,因此测试人员必须要有iOS的app源码。除了Ruby,对其他语言不友好。

 

6、Appium

 

http://appium.io/

 

Appium是一个开源的、跨平台的自动化测试工具,支持IOS、Android和FirefoxOS平台。通过Appium,开发者无需重新编译app或者做任何调整,就可以测试移动应用,可以使测试代码访问后端API和数据库。它是通过驱动苹果的UIAutomation和Android的UiAutomator框架来实现的双平台支持,同时绑定了Selenium Web Driver用于老的Android平台测试。开发者可以使用Web Driver兼容的任何语言编写测试脚本,如Java,OC,JS, PHP,Python,Ruby,C#,Clojure和Perl语言。

 

7、Selendroid

 

https://www.gitbook.com/book/lihuazhang/selendroid/details

 

Selendroid是一个基于Instrumentation的一个框架。完全兼容Webdriver协议。Selendroid可以在模拟器和实际设备上使用,也可以集成网格节点作为缩放和并行测试。

 

8、Robolectric

 

http://robolectric.org/

 

Robolectric是一款Android单元测试框架,但它并不依赖于Android提供的测试功能,它通过实现一套JVM能运行的Android代码,然后在unit test运行的时候去截取android相关的代码调用,然后转到Robolectric实现的代码(shadow objects)去执行这个调用的过程。因此它不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式)、打包、部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。

 

除了实现Android里面的类的现有接口,Robolectric还给每个Shadow类额外增加了很多接口,可以读取对应的Android类的一些状态。比如它为ImageView提供了getImage ResourceId()方法,测试者可以通过getImage ResourceId()接口来确定是不是正确显示了期望的Image。

 

9、RoboSpock

 

http://robospock.org/

 

RoboSpock是一个开源的Android测试框架,它提供了简单的编写BDD行为驱动开发规范的方法,使用Groovy语言,支持Google Guice库。RoboSpock合并了Robolectic和Spock的功能。

 

10、Cafe

 

http://cafe.baidu.com/#panel1

 

Cafe是百度出品的一个基于Robotium的测试框架,它提供了跨进程的测试解决方案。

 

11、Athrun

 

http://code.taobao.org/p/athrun/wiki/index/

 

Athrun是taobao出的一个移动测试框架,它支持Android和IOS。Android部分是基于Instrumentation,在Android原有的Activity Instrumentation Test Case2类基础上进行了扩展,提供了一整套面向对象的API。IOS上的自动化测试包括注入式自动化框架AppFramework,和基于录制的自动化框架Athrun_IOS,InstrumentDriver。