开放式网络研讨会“在Selenium和Appium上测试移动应用程序自动化的简介”



大家好! 在“ 移动质量检查工程师”课程启动前夕我们进行了传统的公开课程。 由于信息太多,因此网络研讨会持续了两天( 第1天, 第2天 )。 实际上,这是一个为期两天的移动QA密集型活动 ,对于打算在Android和iOS上的移动应用程序的自动化测试方向上成为专业人员的每个人来说,这都是有用的。



讲师-Dmitry Yarygin,质量检查测试工程师,具有8年的经验,其中5 年与Google签订了合同

在网络研讨会上考虑:

  • 什么是一般测试以及为什么需要自动化;
  • 最少的Java自动化基础知识(变量,对象,类,OOP);
  • 什么是Webdriver和Appium;
  • 如何使用各种定位器在Web应用程序中查找对象;
  • 使用Appium和Android模拟器等自动化Web应用程序(在Facebook上登录)。

顺便说一句,如果您想从这些网络研讨会中获得最大的交互性,请在开始观看之前安装以下应用程序:

  1. Android Studio
  2. Appium桌面

移动测试的历史和功能


移动测试作为一个整体出现在2007年左右-正是在这时,第一部iPhone面世,这彻底改变了整个行业。 是的,移动测试一直存在到2007年,但是那时的应用程序非常简单原始。 2007年之后,iOS和Android的开发特别活跃,这反过来又不得不影响测试。

当然,移动测试有其自身的特点,与台式机有所不同:



尽管所使用的小工具看起来很简单且尺寸很小,但是在Mobile QA中,您需要通过测试来涵盖很多内容(与台式机测试相比,有时甚至更多)。 谁说会容易呢?

移动应用类型


移动应用程序是:

  1. 本地(本地)。
  2. 混合动力(混合动力)。
  3. Web应用程序(Web)。

现在查看以下应用程序:



告诉我,它是什么:混合,本机或Web应用程序?

答案是:
隐藏文字
这是一个Web应用程序

最初,应该理解,Web应用程序分别在浏览器中运行和操作,所有接口元素都按照Web样式执行。
对于混合应用程序,这实际上是一种尝试将Web应用程序“填充”到一个特殊的容器中并在该容器中运行,从而稍微“修饰”它以使其看起来像本机。

混合应用示例:



混合应用程序在外观上并没有什么不同:按钮仍基于Web,链接以Web格式显示,等等。

让我们看一下混合应用程序的功能:



现在是AppStore中“本地”应用程序的示例:



请注意此应用程序的界面质量,并注意所有元素看起来都像“本机”,因为该功能已完全集成到操作系统中。 粗略地说,本机应用程序是考虑到“本机”技术开发的应用程序,在我们的例子中,它是iOS的Xcode。

移动应用的主要参数


参数如下:

  • 表现
  • 相容性
  • 屏幕(转弯,模式),
  • 地理位置
  • 离线模式
  • 文件系统交互,
  • 与联系人一起工作
  • 同步化
  • 处理内存
  • 电池。

测试移动应用程序的功能


现在,让我们熟悉移动设备测试应用程序的功能:



测试人员与开发人员的互动


原则上,就桌面测试而言,交互实际上与正常环境中的交互没有区别。 都一样:

  1. 开发人员创建新功能;
  2. 测试人员在各种设备上测试功能;
  3. 发现错误后,测试人员将创建错误报告并显示开发人员存在问题的区域;
  4. 开发人员修复错误;
  5. 开发人员将申请退回以进行进一步测试;
  6. 如果没有问题,则可以发布应用程序。



测试人员的OOP


现在5分钟内OOP ))。 因此,如果您打算进行自动化测试,则应了解:

  • 类,对象,方法;
  • 继承
  • 字符串,整数;
  • 多态性
  • 数组
  • 重新定义/重载;
  • 构造函数;
  • 接口。

简而言之,如果没有复杂的术语,则OOP(面向对象编程)是数据和代码的组合,用于在一个对象中进行处理。



继承是一种语言机制,可让您基于现有类创建新类。

封装是一种语言机制,它限制对对象组件(变量和方法)的访问,并使它们只能在对象内部(私有)访问。 换句话说,隐藏一个类实现。

多态是子孙类更改父类的实现,但保留接口的能力。

现在,让我们从理论转向实践 ,这将帮助您了解OOP的基础。

互动式


首先,打开以下链接 。 我们有以下Java代码,其中包含三个主要类:

1.主要:

public class Main { public static void main (String[]args) { Cat cat = new Cat (); cat.setAge (5); cat.setName ("Alisa"); System.out.println (cat.getName ()); System.out.println (cat.getAge ()); } } 

2.动物:

 public class Animal { private String name; private int age; public Animal() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

3.猫:

 public class Cat extends Animal { private String name; public String getName() { return "Cat name is: " + name; } public void setName(String name) { this.name = name; } } 

Main是运行其他类所需的主要类。 Animal类列出了属性,例如动物的年龄和名称。 Cat类继承了Animal类的所有属性(Cat扩展了Animal),但是覆盖了用于与我们的类一起工作的现有方法。



现在尝试自己解决以下问题:

  • 使Dog类继承Animal类;
  • Dog类中创建一个getName()方法,显示“Dog name is: [ ]”
  • Dog类中创建一个setName()方法以返回名称;
  • Main类中,创建Dog类的实例,使用setName()设置名称并运行getName()方法以获取名称。

解决问题的方法

自动化技术 什么时候需要,什么时候不需要?


在以下情况下,我们需要自动化:

  • 具有大量屏幕的复杂应用程序;
  • 庞大的设备库;
  • 经常更新;
  • 大量的用户;
  • 该应用程序可在许多国家和应用程序市场中使用;
  • 测试速度很重要;
  • 性能测试是必需的。

当不需要自动化时:

  • 应用程序中的一两个屏幕;
  • 该应用程序在一个国家,一个市场中运行;
  • 罕见的更新;
  • 用户数量少;
  • 自动化成本将超过预算。

自动化:原理和手段


自动化原理:

  1. 在当前应用程序屏幕上找到一个对象。
  2. 检查其状况,确保可用。
  3. 对对象执行操作。

自动化分类:

  1. 不需要访问源代码的自动化工具(Webdriver,Appium)。
  2. 需要访问源代码(Espresso,KIF)的自动化工具。

自动化固然很好,但是您应该永远记住并非所有的东西都可以“自动化”。

Appium自动化


Appium是基于WebDriver协议的服务器(WebDriver是用于自动化Web应用程序的框架)。 Appium接受来自客户端的请求,将其转换并将其传输到仿真器或设备。



运行时,Appium允许您查看从客户端到服务器的所有请求:





Appium系统环境的设置是什么:



朋友,我们只讨论了网络研讨会第一部分 ,因此我们建议您一定要观看录制的视频,以免错过任何内容。 还将讨论测试中的注释 ,初始化Appium for Native应用程序,在Android上使用Appium搜索元素。 此外,请务必阅读公开课程的第二部分 ,它将在一般的自动化领域(尤其是在Appium中)提供更深入的实践知识。

而且,当然,请注册马上开始的“ 移动质量检查工程师”课程!

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


All Articles