编写Android测试脚本

移动测试支持执行遵循Appium测试框架编写的自动化测试代码。

重要

移动测试平台目前可支持pytest、unittest和robotframework等三方测试框架,如需其他支持,联系技术支持

前提条件

  • 了解使用Appium进行自动化测试的方法。具体说明请参见Appium官方文档

  • 具备Python编程基础。

背景信息

编写Android测试脚本,包含如下操作:

步骤一、创建Capabilities文件

使用Python语言编写Capabilities文件,用于执行测试脚本时指定所需的测试环境。放在项目根目录下(/desired_capabilities.py),文件命名为desired_capabilities.py

说明

desired_capabilities.py仅用于本地执行测试脚本时,指定测试环境。

desired_capabilities.py文件包括get_uri()get_desired_capabilities()2个函数。

函数

说明

get_desired_capabilities()

获取本次会话的参数。

参数可根据实际需求进行设置。具体说明请参见Appium Desired Capabilities

get_uri()

返回Appium Server的地址。

示例代码

#!/usr/bin/env python

def get_desired_capabilities():
    desired_caps = {
        'platformName': 'Android',
        'platformVersion': '7.0',
        'deviceName': 'V8xxx',
        'appPackage': 'com.example.Android.myapp',
        'appWaitPackage': 'com.example.Android.myapp',
        'app': 'D:/home/xx/xx/xx/xx/xx.apk',
        'newCommandTimeout': 30,
        'automationName': 'Appium'
    }
    return desired_caps

def get_uri():
    return "http://localhost:50000/wd/hub"

示例说明

  • 本地启动的Appium Server,监听端口默认设置为50000,则返回值为http://localhost:50000/wd/hub

  • get_desired_capabilities()函数中设置了8个参数:

参数

说明

platformName

测试设备的系统类型。可选Android或iOS平台。

platformVersion

测试设备的系统版本。

deviceName

测试设备的名称。

appPackage

待测应用的包名。仅适用于Android平台。

appWaitPackage

测试时等待启动的应用包名。仅适用于Android平台。

app

待测应用安装文件的存储位置。

newCommandTimeout

两条指令之间允许的最长时间间隔(单位:秒)。

如两条指令之间的时间间隔超过预设取值,则Appium Server将终止本次会话。

automationName

本次会话所使用的自动化引擎。

  • Android 4.2以下:设置为Selendroid

  • iOS或Android 4.2及以上:设置为Appium

步骤二、编写测试脚本

使用Python语言编写测试脚本,作为执行自动化测试的入口,放在项目根目录下(/main.py),文件命名为main.py

说明

移动测试平台通过执行测试脚本main.py,实施功能测试。

示例代码及说明如下:

# -*- coding: utf-8 -*-

from appium import webdriver

# 引入刚刚创建的同目录下的desired_capabilities.py
import desired_capabilities

# 使用python的unittest作为单元测试工具
from unittest import TestCase

# 使用python的unittest作为单元测试工具
import unittest

# 使用time.sleep(xx)函数进行等待
import time

class MqcTest(TestCase):

   global automationName

   def setUp(self):
       # 获取我们设定的capabilities,通知Appium Server创建相应的会话。
       desired_caps = desired_capabilities.get_desired_capabilities()
       # 获取server的地址。
       uri = desired_capabilities.get_uri()
       # 获取使用的测试框架
       self.automationName = desired_caps.get('automationName')
       # 创建会话,得到driver对象,driver对象封装了所有的设备操作。
       self.driver = webdriver.Remote(uri, desired_caps)

   def test_searchbox(self):
        # 找到包含“Tab4”字符串的控件。
        if self.automationName == 'Appium':
            tab4 = self.driver.find_element_by_name("Tab4")
        else:
            tab4 = self.driver.find_element_by_link_text("Tab4")
        # 点击.
        tab4.click()

        # 等待2秒钟
        time.sleep(2)

        # 通过控件类名找到用户名和密码输入框。
        editTexts = self.driver.find_elements_by_class_name("android.widget.EditText")
        # 输入用户名和密码,[0]表示用户名,[1]表示密码
        editTexts[0].send_keys("admin")
        editTexts[1].send_keys("admin")
        # 隐藏出现的软键盘
        self.driver.hide_keyboard()

        # 找到包含“登录”的按钮并点击
        if self.automationName == 'Appium':
            self.driver.find_element_by_name("登录").click()
        else:
            self.driver.find_element_by_link_text("登录").click()
        # 等待3秒钟,等待登录成功。 
        time.sleep(3)

   def tearDown(self): 
        # 测试结束,退出会话。 
        self.driver.quit()

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

步骤三、启动Appium Server

在本地命令行,执行appium命令,启动Appium Server。例如:appium -p 50000

参数释义

参数

说明

-p

指定Appium Server监听的端口号。

-a

指定Appium Server的IP地址。

-selendroid-port

在Selendroid模式下,指定adb forward的端口。

-U

当Appium Server挂载多个设备时,指定用于测试的设备的串号。

--full-reset

设置测试用例执行完成后,对设备进行完全清理。

步骤四、验证测试脚本

  1. 在本地添加手机。

    • 本地添加已开启开发者模式的手机。

    • 远程连接云真机,执行adb connect ,远程挂载云真机到本地。

  2. 在本地命令行,执行python main.py命令,执行并验证测试脚本main.py

步骤五、上传至移动测试平台

  1. 在根目录下将main.py文件压缩为zip文件。

  2. 在移动测试控制台,新建上传脚本,上传main.py,用于后续的Android功能测试。

    新建脚本的详细操作请参见:新建脚本