大家好! 在“ 移动质量检查工程师”课程启动前夕,我们进行了传统的公开课程。 由于信息太多,因此网络研讨会持续了两天( 第1天, 第2天 )。 实际上,这是一个为期两天的移动QA密集型活动 ,对于打算在Android和iOS上的移动应用程序的自动化测试方向上成为专业人员的每个人来说,这都是有用的。
讲师-Dmitry Yarygin,质量检查测试工程师,具有8年的经验,其中5
年与Google签订了合同 。
在网络研讨会上考虑:
- 什么是一般测试以及为什么需要自动化;
- 最少的Java自动化基础知识(变量,对象,类,OOP);
- 什么是Webdriver和Appium;
- 如何使用各种定位器在Web应用程序中查找对象;
- 使用Appium和Android模拟器等自动化Web应用程序(在Facebook上登录)。
顺便说一句,如果您想从这些网络研讨会中获得最大的交互性,请在开始观看之前安装以下应用程序:
- Android Studio
- Appium桌面 。
移动测试的历史和功能
移动测试作为一个整体出现在2007年左右-正是在这时,第一部iPhone面世,这彻底改变了整个行业。 是的,移动测试一直存在到2007年,但是那时的应用程序非常简单原始。 2007年之后,iOS和Android的开发特别活跃,这反过来又不得不影响测试。
当然,移动测试有其自身的特点,与台式机有所不同:

尽管所使用的小工具看起来很简单且尺寸很小,但是在Mobile QA中,您需要通过测试来涵盖很多内容(与台式机测试相比,有时甚至更多)。 谁说会容易呢?
移动应用类型
移动应用程序是:
- 本地(本地)。
- 混合动力(混合动力)。
- Web应用程序(Web)。
现在查看以下应用程序:

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

混合应用程序在外观上并没有什么不同:按钮仍基于Web,链接以Web格式显示,等等。
让我们看一下混合应用程序的功能:

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

请注意此应用程序的界面质量,并注意所有元素看起来都像“本机”,因为该功能已完全集成到操作系统中。 粗略地说,本机应用程序是考虑到“本机”技术开发的应用程序,在我们的例子中,它是iOS的Xcode。
移动应用的主要参数
参数如下:
- 表现
- 相容性
- 屏幕(转弯,模式),
- 地理位置
- 离线模式
- 文件系统交互,
- 与联系人一起工作
- 同步化
- 处理内存
- 电池。
测试移动应用程序的功能
现在,让我们熟悉移动设备测试应用程序的功能:

测试人员与开发人员的互动
原则上,就桌面测试而言,交互实际上与正常环境中的交互没有区别。 都一样:
- 开发人员创建新功能;
- 测试人员在各种设备上测试功能;
- 发现错误后,测试人员将创建错误报告并显示开发人员存在问题的区域;
- 开发人员修复错误;
- 开发人员将申请退回以进行进一步测试;
- 如果没有问题,则可以发布应用程序。

测试人员的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()
方法以获取名称。
解决问题的方法 。
自动化技术 什么时候需要,什么时候不需要?
在以下情况下,我们需要自动化:
- 具有大量屏幕的复杂应用程序;
- 庞大的设备库;
- 经常更新;
- 大量的用户;
- 该应用程序可在许多国家和应用程序市场中使用;
- 测试速度很重要;
- 性能测试是必需的。
当不需要自动化时:
- 应用程序中的一两个屏幕;
- 该应用程序在一个国家,一个市场中运行;
- 罕见的更新;
- 用户数量少;
- 自动化成本将超过预算。
自动化:原理和手段
自动化原理:
- 在当前应用程序屏幕上找到一个对象。
- 检查其状况,确保可用。
- 对对象执行操作。
自动化分类:
- 不需要访问源代码的自动化工具(Webdriver,Appium)。
- 需要访问源代码(Espresso,KIF)的自动化工具。
自动化固然很好,但是您应该永远记住并非所有的东西都可以“自动化”。
Appium自动化
Appium是基于WebDriver协议的服务器(WebDriver是用于自动化Web应用程序的框架)。 Appium接受来自客户端的请求,将其转换并将其传输到仿真器或设备。

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


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

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