移动测试支持执行遵循Appium测试框架编写的自动化测试代码。
移动测试平台目前可支持pytest、unittest和robotframework等三方测试框架,如需其他支持,联系技术支持。
前提条件
了解使用Appium进行自动化测试的方法。具体说明请参见Appium官方文档。
具备Python编程基础。
背景信息
编写Android测试脚本,包含如下操作:
编写测试脚本:编写Capabilities文件和测试脚本,Capabilities文件用于执行测试脚本时指定所需的测试环境。详细操作请参见步骤一、创建Capabilities文件和步骤二、编写测试脚本。
验证测试脚本:在本地启动Appium Server,以验证编写完成的测试脚本。详细操作请参见步骤三、启动Appium Server和步骤四、验证测试脚本。
上传移动测试平台:测试脚本验证无误后,上传至移动测试平台。详细操作请参见步骤五、上传至移动测试平台。
步骤一、创建Capabilities文件
使用Python语言编写Capabilities文件,用于执行测试脚本时指定所需的测试环境。放在项目根目录下(/desired_capabilities.py
),文件命名为desired_capabilities.py
。
desired_capabilities.py
仅用于本地执行测试脚本时,指定测试环境。
desired_capabilities.py
文件包括get_uri()
和get_desired_capabilities()
2个函数。
函数 | 说明 |
| 获取本次会话的参数。 参数可根据实际需求进行设置。具体说明请参见Appium Desired Capabilities。 |
| 返回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 | 本次会话所使用的自动化引擎。
|
步骤二、编写测试脚本
使用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 | 设置测试用例执行完成后,对设备进行完全清理。 |
步骤四、验证测试脚本
在本地添加手机。
本地添加已开启开发者模式的手机。
远程连接云真机,执行
adb connect
,远程挂载云真机到本地。
在本地命令行,执行
python main.py
命令,执行并验证测试脚本main.py
。
步骤五、上传至移动测试平台
在根目录下将
main.py
文件压缩为zip文件。在移动测试控制台,新建上传脚本,上传
main.py
,用于后续的Android功能测试。新建脚本的详细操作请参见:新建脚本。