移动设备上的自动化测试:使用Selenium WebDriver和Appium

1. 移动设备测试的重要性

随着全球移动用户的快速增长,智能手机和平板电脑的普及率显著提升。移动应用程序不仅渗透到了消费者的日常生活中,也逐渐占据了企业市场的份额。为了满足用户的需求,企业和开发者投入大量资源构建移动友好型网站和原生应用程序。因此,在多种移动平台上测试这些应用程序变得至关重要。本文将详细介绍如何使用Selenium WebDriver和Appium在iOS和Android平台上进行自动化测试。

2. 设置iOS测试环境

为了在iOS平台上测试应用程序,首先需要在Mac OS X系统上安装Xcode。截至本文撰写时,推荐使用Xcode 5.1或更高版本。Xcode可以从苹果官方的App Store或开发者门户网站下载。

2.1 Xcode安装步骤

  1. 访问 App Store 或 开发者门户网站 。
  2. 下载并安装Xcode。
  3. 安装完成后,启动Xcode并更新所有组件。

2.2 安装Appium

Appium是用于移动应用自动化的开源工具,支持iOS和Android平台。它可以通过Node.js包管理器npm安装,也可以通过独立的GUI版本安装。对于Mac OS X用户,建议使用带有内置Node.js的Appium独立GUI版本。

安装Appium独立GUI版本
  1. 访问 Appium官网 并下载适用于Mac OS X的安装包。
  2. 安装后,启动Appium GUI并确保Node.js已正确安装。

3. 使用Appium Inspector工具

Appium Inspector是Appium自带的一个可视化工具,可通过点击Appium主窗口上的放大镜图标启动。Inspector的主要功能包括:

  • 分析被测应用的UI元素结构或层级。
  • 查看这些元素的属性。
  • 模拟各种手势并查看其在模拟器上的效果。
  • 记录在应用上执行的步骤。

3.1 使用Appium Inspector

  1. 启动Appium GUI。
  2. 点击放大镜图标启动Inspector。
  3. 选择要测试的应用程序。
  4. 使用Inspector浏览和选择UI元素,查看其属性,并记录操作。

4. iOS自动化机制

Appium通过Apple Instruments提供的UI Automation功能来自动化iOS应用程序。它作为一个HTTP服务器运行,接收来自测试脚本的命令,并通过JSON线缆协议将这些命令发送给Apple Instruments执行。执行结果会返回给测试脚本。

4.1 自动化流程

graph LR;
    A[测试脚本] --> B(Appium HTTP服务器);
    B --> C(Apple Instruments);
    C --> D(UI Automation);
    D --> E(执行结果);
    E --> B;
    B --> A;

5. 编写iOS测试案例

编写iOS测试案例时,通常会创建一个Python类继承自 unittest.TestCase ,并通过 setUp() 和 tearDown() 方法配置测试环境。以下是一个具体的测试案例示例,演示了如何在iPhone Safari浏览器中测试搜索功能。

5.1 测试案例代码

import unittest
from appium import webdriver

class SearchProductsOnIPhone(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'iOS'
        desired_caps['platformVersion'] = '7.1'
        desired_caps['deviceName'] = 'iPhone Simulator'
        desired_caps['app'] = 'safari'

        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    def test_search_functionality(self):
        # 打开指定网页
        self.driver.get("http://demo.magentocommerce.com/")
        # 点击搜索图标
        search_icon = self.driver.find_element_by_accessibility_id("Search")
        search_icon.click()
        # 清空搜索框
        search_field = self.driver.find_element_by_name("q")
        search_field.clear()
        # 输入搜索关键词并提交
        search_field.send_keys("phones")
        search_field.submit()

        # 获取所有包含产品名称的锚点元素
        products = self.driver.find_elements_by_xpath("//h2[@class='product-name']/a")
        self.assertEqual(2, len(products))

    def tearDown(self):
        # 关闭浏览器窗口
        self.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

5.2 测试步骤说明

| 步骤 | 描述 | | --- | --- | | 1 | 打开指定网页。 | | 2 | 点击搜索图标。 | | 3 | 清空搜索框。 | | 4 | 输入搜索关键词并提交。 | | 5 | 获取所有包含产品名称的锚点元素。 | | 6 | 断言搜索结果数量。 |

通过上述步骤,我们可以验证Safari浏览器中的搜索功能是否正常工作。接下来,我们将探讨如何在Android平台上进行类似的测试。


请继续阅读下一部分,了解如何在Android平台上设置和编写测试案例。

6. 设置Android测试环境

为了在Android平台上测试应用程序,首先需要确保已安装Android Studio和Android SDK。Android Studio是官方推荐的集成开发环境(IDE),它包含了所有必需的工具和库。

6.1 安装Android Studio

  1. 访问 Android Studio官网 。
  2. 下载并安装Android Studio。
  3. 安装完成后,启动Android Studio并配置SDK路径。

6.2 配置ADB

Android Debug Bridge(ADB)是Android SDK的一部分,用于与Android设备通信。确保ADB已正确安装并配置环境变量。

配置ADB环境变量
  1. 打开终端或命令提示符。
  2. 输入 adb devices 查看已连接的设备。
  3. 如果未显示设备,请确保USB调试已启用,并重新连接设备。

7. 编写Android测试案例

编写Android测试案例的过程与iOS类似,同样需要创建一个Python类继承自 unittest.TestCase ,并通过 setUp() 和 tearDown() 方法配置测试环境。以下是一个具体的测试案例示例,演示了如何在Android Chrome浏览器中测试搜索功能。

7.1 测试案例代码

import unittest
from appium import webdriver

class SearchProductsOnAndroid(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '4.3'
        desired_caps['deviceName'] = 'Android Emulator'
        desired_caps['app'] = 'chrome'

        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

    def test_search_functionality(self):
        # 打开指定网页
        self.driver.get("http://demo.magentocommerce.com/")
        # 点击搜索图标
        search_icon = self.driver.find_element_by_accessibility_id("Search")
        search_icon.click()
        # 清空搜索框
        search_field = self.driver.find_element_by_name("q")
        search_field.clear()
        # 输入搜索关键词并提交
        search_field.send_keys("phones")
        search_field.submit()

        # 获取所有包含产品名称的锚点元素
        products = self.driver.find_elements_by_xpath("//div[@class='category-products']/ul/li")
        self.assertEqual(2, len(products))

    def tearDown(self):
        # 关闭浏览器窗口
        self.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)

7.2 测试步骤说明

| 步骤 | 描述 | | --- | --- | | 1 | 打开指定网页。 | | 2 | 点击搜索图标。 | | 3 | 清空搜索框。 | | 4 | 输入搜索关键词并提交。 | | 5 | 获取所有包含产品名称的锚点元素。 | | 6 | 断言搜索结果数量。 |

通过上述步骤,我们可以验证Chrome浏览器中的搜索功能是否正常工作。

8. 使用Sauce Labs进行云端测试

除了在本地环境中测试外,还可以使用基于云的服务如Sauce Labs来进行跨平台测试。Sauce Labs支持多种设备和操作系统组合,可以大大减少测试时间并提高覆盖率。

8.1 使用Sauce Labs进行测试

  1. 注册并登录 Sauce Labs 。
  2. 获取API密钥。
  3. 修改测试脚本中的 desired_caps ,添加Sauce Labs的认证信息。
修改后的测试脚本
import unittest
from appium import webdriver

class SearchProductsOnIPhone(unittest.TestCase):
    SAUCE_USERNAME = 'your_sauce_username'
    SAUCE_ACCESS_KEY = 'your_sauce_access_key'

    def setUp(self):
        desired_caps = {}
        desired_caps['browserName'] = 'Safari'
        desired_caps['platformVersion'] = '7.1'
        desired_caps['platformName'] = 'iOS'
        desired_caps['deviceName'] = 'iPhone Simulator'
        desired_caps['app'] = 'safari'

        sauce_url = f'http://{self.SAUCE_USERNAME}:{self.SAUCE_ACCESS_KEY}@ondemand.saucelabs.com:80/wd/hub'
        self.driver = webdriver.Remote(sauce_url, desired_caps)

    def test_search_functionality(self):
        # 测试步骤同上

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

if __name__ == '__main__':
    unittest.main(verbosity=2)

8.2 测试流程

graph LR;
    A[测试脚本] --> B(Sauce Labs HTTP服务器);
    B --> C(云设备);
    C --> D(执行结果);
    D --> B;
    B --> A;

通过Sauce Labs,我们可以轻松地在云端进行大规模的跨平台测试,确保应用程序在各种设备和操作系统组合下的兼容性和稳定性。

9. 总结与展望

通过本文的介绍,我们详细探讨了如何使用Selenium WebDriver和Appium在iOS和Android平台上进行自动化测试。无论是设置测试环境、编写测试案例,还是利用云端服务进行大规模测试,都离不开这些工具和技术的支持。未来,随着移动设备和操作系统的不断发展,移动自动化测试也将不断创新和完善。希望本文能为读者提供有价值的参考,帮助大家更好地理解和掌握移动自动化测试的技术和方法。

更多推荐