鸦片简介

您将要创造的

众所周知,自动化测试对任何程序员都非常有价值。 它是一种工具,可以模拟人在特定设备上的动作,因此受到青睐,因为它没有实际人的错误或速度限制。

Appium是基于流行的测试框架Selenium的自动测试工具,可在本机iOS和Android应用程序上进行自动测试。 它的主要限制是它仅适用于OS X和Linux。

在我的办公室,我们使用Appium进行回归测试。 回归测试只是意味着测试现有功能,以确保它们随着产品的增长而继续按预期运行。 了解功能何时中断非常重要,这样进度才能以线性方式继续进行。

在本教程中,我将向您展示如何为Android应用程序设置Appium,生成自动脚本以及创建一些简单的登录测试。

1. Appium设定

获取Appium不需要花费很多时间,但是很容易弄乱设置。 第一次安装Appium时,我是天真的下载了该应用程序(.dmg),然后在命令行上进行了设置。 事实证明,如果您首先下载该应用程序,可能会使在命令行上获取Appium变得非常困难。 因此,首先从命令行获取Appium。

在以下步骤中,我假设您已经安装了自制软件并且正在使用OSX。如果没有安装节点,请从命令行执行以下命令:

$ brew install node

接下来,使用节点包管理器安装Appium。 你使用它的重要sudo这些命令或Appium将无法正常工作。

$ npm install -g appium
$ npm install wd

如果您没有使用这些命令的权限,则必须自己更改chmod而不是sudo 。 根据您的设置,文件夹的位置可能与您不同。

$ sudo chmod -R a+w /usr/local

要运行Appium服务器并查看是否已正确设置,请从命令行执行以下命令。

$ appium &

通过命令行上的Appium,您不仅可以在Android和iOS模拟器上运行Selenium测试,还可以在物理设备上运行Selenium测试。 该应用程序具有一个不错的用户界面,使您可以运行AUT (测试中的应用程序)的模拟版本,并轻松生成Selenium代码,以对应用程序执行简单的操作。 您将主要在创建测试的初始阶段使用该应用程序,然后使用命令行来运行测试。

我们为什么不将应用程序用于整个流程? 如果您计划在各种设备上以自动化方式(可能是按时间表)运行一套测试,那么从命令行运行Appium至关重要。

可以从Bitbucket下载Appium应用程序。 下载磁盘映像后,双击它,然后将Appium应用程序拖到“应用程序”文件夹中。

2. AUT设定

接下来,我们需要一个应用程序进行测试。 对于Appium的简介,我们将测试一个我称为AUT的本地Android应用程序。 这是一个非常简单的登录和注销应用程序。 成功登录后,它将带我们到一个页面,该页面告诉我们我们已成功登录,并显示注销按钮。

许多应用程序都具有登录功能,因此我们将创建一套基本的登录测试套件,以测试用户与登录流程进行交互的可能结果。 我们并不是要确保登录正常,我们要测试应用对用户可能无法登录的各种方式(例如,通过输入无效的凭据)的响应。

由于不可能拥有所有可用的Android设备,因此我通常在模拟设备上进行测试。 这使我可以轻松更改要模拟哪个设备以进行兼容性测试。 要获取Android模拟器,请获取AVD Manager并设置您选择的任何与API级别21兼容的Android设备。

  1. GitHub下载APK。
  2. 如果还没有JDK ,请获取它。
  3. 使用AVD Manager获取Android SDK
  4. 设置ANDROID_HOMEJAVA_HOMEPATH环境变量在.profile.bash_profile中 (或.zshrc如果您使用的zsh)。

ANDROID_HOME应该指向Android sdk的位置,而JAVA_HOME应该指向JDK的位置。

这样可以将这些路径添加到.bash_profile中 。 请注意,路径可能与您不同。

$ vim ~/.bash_profile
$ export ANDROID_HOME=/Users/(username)/Library/Android/sdk
$ export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

接下来,使用AVD Manager创建模拟设备。 确保启用“ 使用主机GPU”并将VM Heap设置为64

$ cd $ANDROID_HOME/tools
$ ./android avd

为了使模拟器运行更快,请从英特尔网站安装HAX。

3.鸦片检验员

现在该使用Appium Inspector并开始编写一些测试了。 启动Appium应用程序。 在“ 常规设置”中 ,取消选中“ 检查更新 ,启动应用程序覆盖现有会话以及在启动前使用服务器端口终止进程”

Appium常规设置

接下来,选中Android单选按钮 ,然后点击Android图标 。 选中“ 应用程序路径” ,并将其值设置为放置要测试的应用程序APK的位置。 选中启动AVD,然后选择模拟设备。 从Platform Version的下拉菜单中选择5.1 Lollipop(API级别21)

选择Android
Android设置

点击启动,然后等待该应用在模拟设备上启动。

您可能会遇到一个问题,因为我们使用的是全新的API 21,因此应用程序在解锁时崩溃。要解决此问题,请在手动解锁模拟屏幕后再次启动该应用程序。

模拟设备启动应用程序后,点击放大镜图标以启动检查器。

阿皮督察

这是Appium检查器。 这是一个非常方便的工具,可帮助您开始编写Appium测试。 本质上,检查器允许您在本机Android应用程序上执行操作,并将您的操作记录为生成的代码。

检查左侧的框构成了UI导航器,并允许您导航当前活动的元素。 底部是与从元素框中选择的元素进行交互的选项。 所选元素的详细信息显示在“ 详细信息”中 。 如果您手动执行模拟操作,则必须单击“ 刷新”以使检查器识别这些更改。 如果要开始用代码记录操作,则必须单击“ 记录”按钮。

让我们创建成功登录所需的代码。 该应用程序具有两个硬编码的登录名,分别为success@envato.com :passwordsuccess2@envato.com :password2

  1. 单击记录 ,观察检查器下面现在有代码。 您可以选择不同的语言来显示。在本教程中,我们将使用Python。
  2. UI导航器中,导航到android.widget.LinearLayout / android.widget.FrameLayout /
    android.widget.LinearLayout / android.widget.ScrollView /
    android.widget.LinearLayout / android.widget.EditText [1]。
  3. 单击底部的文本 ,然后输入success@envato.com
  4. 单击“ 发送密钥” ,然后观察下面的代码有了新行。
检查员将密钥发送到电子邮件

5.在UI导航器中 ,导航到android.widget.LinearLayout /
android.widget.FrameLayout / android.widget.LinearLayout /
android.widget.ScrollView / android.widget.LinearLayout /
android.widget.EditText [2]

6.输入密码。

检查员将密钥发送到密码

7.单击发送密钥

8.在UI导航器中 ,导航到android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.LinearLayout / android.widget.ScrollView /
android.widget.LinearLayout / android.widget.Button [1]

9.单击底部的“ 触摸 ”,然后单击 。 我们现在正在进行一项新活动,因此UI导航器已更改。

检查器点击登录

10.单击“ 刷新”,因为检查员现在可能尚未意识到模拟器已超出加载屏幕。

检查员未刷新

11.在UI导航器中,导航到android.widget.LinearLayout / android.widget.FrameLayout /
android.widget.RelativeLayout / android.widget.Button [1]。

12.单击点击

检查器点击注销

在下面的代码中,我们提供了所有代码来模拟成功登录。 随时与检查员联系。 在本教程的稍后部分,我们还将为失败的登录编写测试。

4.登录测试

现在,我们将使用Appium编写一些测试,以确保我们的登录页面能够正常工作。 如果您没有Python,则可以从官方网站下载。

要将Appium Web驱动程序与Python一起使用,您还必须获取适用于PythonAppium库

  1. 下载并取消存档.gz文件。
  2. 打开.gz文件,导航到命令行上的位置,然后执行以下命令:
$ python setup.py install

在开始编写测试之前,我们需要确定将要制作的测试用例。 一个好的测试套件应该考虑所有可能的交互。 让我们从一个简单的开始。

  1. 成功登录。
  2. 登录失败。
#!/usr/bin/python

from appium import webdriver 
import time
import unittest
import os

首先,我们必须导入测试所需的所有内容。 我们将使用内置的Python单元测试来运行我们的测试。 Appium元素是Web驱动程序,我们将使用它与Appium服务器进行交互。

class LoginTests(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['appium-version'] = '1.0'
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '5.1'
        desired_caps['app'] = os.path.abspath('/Users/mkim/Documents/AUT/app/build/outputs/apk/app-debug-unaligned.apk')

        self.wd = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)
        self.wd.implicitly_wait(60)

我们创建一个类LoginTests来定义我们的测试套件。 单元测试的setUp功能在测试开始时运行。 在这种方法中,我们设置了所需的功能,例如Android和应用程序路径。 然后,我们通过连接到Appium服务器来初始化Web驱动程序self.wd

def tearDown(self):
        self.wd.quit()

经过测试后, tearDown函数将运行,并且它与Appium服务器断开连接。

def test_success(self):
        basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/"
        basepath2 = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/"
    self.wd.find_element_by_xpath(basepath + "android.widget.EditText[1]").send_keys("success@envato.com")
	self.wd.find_element_by_xpath(basepath + "android.widget.EditText[2]").send_keys("password")
	self.wd.find_element_by_xpath(basepath + "android.widget.Button[1]").click()
        try:
	    self.wd.find_element_by_xpath(basepath2 + "android.widget.TextView[1]")
        except: 
            self.fail("Not at Login Success page.\n")

	self.wd.find_element_by_xpath(basepath2 + "android.widget.Button[1]").click()

上面的代码块大部分是从Appium检查器代码复制而来的。 我们在用户界面上执行所需的操作才能成功登录。 在try子句中,我们尝试找到显示文本Login SuccesstextView元素 如果引发异常,则测试失败。

def test_fail(self):
        basepath = "//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/"
    self.wd.find_element_by_xpath(basepath + "android.widget.EditText[1]").send_keys("success@envato.com")
	self.wd.find_element_by_xpath(basepath + "android.widget.EditText[2]").send_keys("wrongpassword")
	self.wd.find_element_by_xpath(basepath + "android.widget.Button[1]").click()
        try:
	    self.wd.find_element_by_xpath(basepath + "android.widget.Button[1]")
        except:
            self.fail("Not still at login screen.\n")

要使登录测试失败,我们特意使用了错误的密码errorpassword ,期望登录失败。 我们检查是否可以找到登录按钮元素,如果无法通过,则测试失败。

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(LoginTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

这是运行测试所需的主要功能。 我们的第一个测试用例没有错。 但是,不成功的登录可能意味着很多事情。 当用户无法登录时,我们要确保用户界面正在帮助他们意识到如何解决错误,从而获得更好的用户体验。

  1. 成功登录。
  2. 使用不正确的密码登录。
  3. 使用不正确的电子邮件登录。
  4. 没有密码登录。
  5. 没有电子邮件登录。
  6. 使用无效的电子邮件登录。

我们已将登录页面的测试用例从两个测试用例扩展到了六个。 如此简单的功能看起来很多,但这是绝对必要的。

编写测试最困难的部分是检查期望。 例如,失败的登录测试将检查用户界面中是否存在元素。 这意味着登录测试完全依赖于用户界面来告诉我们是否满足要求。

这可能是一件坏事,因为用户界面无法告诉我们有关底层代码的所有信息。 但是,目标是测试用户界面,以便对用户界面元素存在的期望进行检查。 我们可以通过检查页面上是否存在每个期望的元素,甚至通过检查每个元素的正确位置来使我们的期望更加透彻。

结论

我们已经学会了如何:

关于Appium和测试还有很多要学习的东西。 下一步可能是创建一个持续集成的测试系统,该系统将Appium的功能用于您自己的应用程序。

翻译自: https://code.tutsplus.com/tutorials/an-introduction-to-appium--cms-23861

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值