自定义步骤用于在功能测试中,通过编写代码,满足非通用性需求。自定义步骤作为一个功能测试步骤插入到正常的用例脚本中执行,一般用于实现与业务或用例场景相关的常用逻辑。
前提条件
具有Appium引擎基本知识。相关内容请参见Appium官方文档。
具有Python编程基本知识。相关内容请参见Python文档。
已打开指定应用的用例管理页面。具体操作请参见打开用例管理页面。
操作步骤
在指定应用的用例管理页签,选择自定义步骤子页签。
在自定义步骤页签,单击新建自定义步骤,打开新建自定义步骤右侧栏。
在新建自定义步骤右侧栏,填写相关信息。
配置说明如下:
选项
说明
步骤名
用于设置自定义步骤的名称。
描述
用于添加自定义步骤的说明信息,便于后续查询回顾。
入参
用于设置自定义步骤的输入参数。
【操作说明】
分别输入参数名和参数描述。
单击添加参数,通过
self.step["
参数名
"]
将参数添加至下方列表,例如name
、age
。重复上述步骤,添加多个输入参数。
代码
用于添加自定义步骤的代码。
【操作说明】单击编辑/查看更多按钮,打开代码编辑右侧栏。
单击确定,保存自定义步骤。
代码编写规范
自定义步骤的代码需基于appium引擎与python 3+语言开发。
自定义步骤在Android/iOS平台的应用工程内为全局共享,因此自定义步骤的代码函数名不能重复。
自定义步骤的代码须符合python类的语法与约定。例如:
class className(): def setAppium(self, driver=None, step=None): self.driver = driver self.step = step def run(self): #code
其中,必选项说明如下:
选项
说明
className
类名,用于标识一个自定义步骤,全局唯一。
setAppium
初始化接口,在执行这个操作前,脚本会通过setAppium传入当前操作可能需要的参数:
driver
:即appium driver,用于与appium通信并执行appium相关操作。step
:即当前步骤的参数,是一个{key(string):value(string)}
形式的dict。
说明为更加便利地调用appium接口,移动测试提供AppiumLib封装为API。相关源码实现参见:groovy/AppiumLib.py
除标准库外,移动测试在appium client的执行环境中,提供安装以下第三方库:Appium-Python-Client、selenium、matplotlib、cv2、numpy、pycurl、subprocess32、MySQL-python、cx-Oracle/ibm_db
代码示例
示例1:通过调用driver实现简单滑动。
class test():
#interface to set appium params
def setAppium(self, driver=None, step=None):
self.driver = driver
self.step = step
def run(self):
#add main code here
#第一次左滑
#获取屏幕的高
x = driver.get_window_size()['width']
print float(6.0/7)*x
# 获取屏幕宽
y = driver.get_window_size()['height']
# 滑屏,大概从屏幕右边2分之一高度,往左侧滑动,滑动后显示的是热点tab
driver.swipe(0.89*x, 0.5*y, 0.12*x, y/2, 500)
示例2:计算两个参数param1
和param2
的差,并将返回值保存到参数result
中。
import desired_capabilities
class minus():
def setAppium(self, driver=None, step=None):
self.driver = driver
self.step = step
def run(self):
result = step.get("param1") - step.get("param2")
step.put("result", result)
示例3:打开webview调试模式。
from AppiumLib import AppiumLib
from time import sleep
class OpenWebviewDebug():
def setAppium(self, driver=None, step=None):
if driver is not None:
self.driver = driver
self.appiumLib = AppiumLib(self.driver)
if step is not None:
self.step = step
def run(self):
platform = self.step.get("platform")
self.appiumLib.openWebviewDebug(platform)
# 点击 永久生效
self.appiumLib.touch(xpath="//android.widget.CheckBox[@text='永久生效' or @content-desc='永久生效']")
# 点击 确定
self.appiumLib.touch(xpath="//android.widget.TextView[@text='确定' or @content-desc='确定']")
sleep(2)
设置入参platform, 则platform会作为step的一个key传入到当前操作中,在描述中通过 ${platform},该参数会被解析为在线录制的一个可操作参数提供给测试使用。
示例4:连续点击某一控件。
import AppiumLib
class clicksByxpath():
#interface to set appium params
def setAppium(self, driver=None, step=None):
self.driver = driver
self.step = step
self.xpath = step.get("xpath")
self.times = step.get("times")
def run(self):
#add main code here
el = self.driver.find_element_by_xpath(self.xpath)
for i in range(int(self.times)):
el.click()
print '第%d次点击'%(i+1)
print self.times
平台展示:Xpath可以使用在线录制,点击控件后的生成步骤,复制步骤中的xpath粘贴过来即可针对步骤进行编辑。