全部产品

编写Android测试脚本

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

注意

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

前提条件

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

  • 具备Python编程基础。

创建Capabilities文件

使用Python语言编写Capabilities文件,指定执行测试脚本所需测试环境,文件命名为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': 'V889F',
        'appPackage': 'com.alibaba.mts.mtsdemoapp',
        'appWaitPackage': 'com.alibaba.mts.mtsdemoapp',
        'app': 'D:/home/mdp/result/GroovyTest/case1/task.apk',
        'newCommandTimeout': 30,
        'automationName': 'Appium'
    }
    return desired_caps

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

示例说明

1:在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

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

说明

desired_capabilities.py仅用于本地执行/验证测试脚本,待测试脚本打包上传后,移动测试平台自动生成并替换该文件。

创建入口脚本文件

使用Python语言编写测试脚本,作为执行自动化测试的入口,文件命名为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")
        # 第一个框为用户名输入框,输入用户名;第二个框为密码框,输入密码
        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()
说明

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

启动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

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

执行测试脚本

在本地命令行,执行python main.py命令,执行并验证测试脚本功能正常。

提交至移动测试

1:将测试文件打包为zip文件。

说明

main.py文件必须放在根目录下。

2:在移动测试控制台,新建上传脚本,用于后续的Android功能测试。具体操作参见:新建脚本