管理自定义步骤

自定义步骤用于在功能测试中,通过编写代码,满足非通用性需求。自定义步骤作为一个功能测试步骤插入到正常的用例脚本中执行,一般用于实现与业务或用例场景相关的常用逻辑。

前提条件

操作步骤

  1. 在指定应用的用例管理页签,选择自定义步骤子页签。

  2. 自定义步骤页签,单击新建自定义步骤,打开新建自定义步骤右侧栏。

    新建自定义步骤1652
  3. 新建自定义步骤右侧栏,填写相关信息。

    新建自定义步骤1659

    配置说明如下:

    选项

    说明

    步骤名

    用于设置自定义步骤的名称。

    描述

    用于添加自定义步骤的说明信息,便于后续查询回顾。

    入参

    用于设置自定义步骤的输入参数。

    【操作说明】

    1. 分别输入参数名和参数描述。

    2. 单击添加参数,通过self.step["参数名"]将参数添加至下方列表,例如nameage

    3. 重复上述步骤,添加多个输入参数。

    代码

    用于添加自定义步骤的代码。

    【操作说明】单击编辑/查看更多按钮,打开代码编辑右侧栏。

    【相关信息】代码编写规范代码样例

  4. 单击确定,保存自定义步骤。

代码编写规范

  1. 自定义步骤的代码需基于appium引擎与python 3+语言开发。

  2. 自定义步骤在Android/iOS平台的应用工程内为全局共享,因此自定义步骤的代码函数名不能重复。

  3. 自定义步骤的代码须符合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:计算两个参数param1param2的差,并将返回值保存到参数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粘贴过来即可针对步骤进行编辑。

ziding-1ziding-2