Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)

Mac 下 appium +python 自动化测试系列:
Mac 下搭建 appium+ios+python 自动化测试环境(一)
Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)
Mac 下 搭建appium +android+python 自动化测试环境(三)
Mac 下 appium 自动化测试 Android 测试配置和脚本编写(四)

书接上回,环境配置已经耗光了我所有耐性,终于到了收割的时候,开始测试我们第一个测试脚本吧!

一、 sample_code_python 的脚本测试验证

  • 1.开启 appium desktop
Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第1张图片
image
  • 2.配置我们要测试的的.app信息

    进入的界面如下,当然是没有我哪些输出信息的

Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第2张图片
image

Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第3张图片
image
  • 3.开启 Inspector来查看元素定位和界面元素查找
Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第4张图片
image
  • 4.配置我们的脚本来测试

    脚本来自网上下的 sample_code

git clone https://github.com/appium/sample-code

cd /Users/xxxx/Downloads/sample-code-master/sample-code/apps/TestApp(xxx 是你自己的目录)

xcodebuild -sdk iphonesimulator

如果出现*** BUILD SUCCEEDED ***则表示编译成功(指令是在目录下生成个一个.app 文件,目录大致如下:/Users/XXXX/Downloads/sample-code-master/sample-code/apps/TestApp/build/Release-iphonesimulator/TestApp-iphonesimulator.app )

完成之后,我们进入到 example 的目录

Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第5张图片
image

选择用 Xcode打开或者下载一个 IDE PyCharm来打开,当然 PyCharm强大很多
Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第6张图片
image

其中参数定义如下:

`app`            :我们需要测试的 app的地址,填我们机子上的绝对地址
`platformName`   :'iOS'我们测试的平台
`platformVersion`:'ii.3',这是我们的版本号,手机版本
`deviceName`     :'iPhone 8 Plus'这是我们需要的测试的机型,模拟器也行,会自己找,如果是真机需要填真机的 `UUID`

接着修改以下部分,因为 demo里面的元素查找不到报错


Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第7张图片
image

接着,我们可以在PyCharm或者终端里面运行 ios_simple.py了,每次脚本运行前确定 appium 已经启动!
PyCharm方式,第一次右键会有 run ios_simple.py的选项:

Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二)_第8张图片
image

终端方式如下,进入到你需要运行的脚本目录下,我这里是 python 脚本模式:

cd /Users/XXXX/Downloads/sample-code-master/sample-code/examples/python
python ios_simple.py
Ran 2 tests in 0.058s

FAILED (errors=2)
xxxxdeiMac:python xxxxx$ python ios_simple.py 
test_scroll (__main__.SimpleIOSTests) ... ok
test_ui_computation (__main__.SimpleIOSTests) ... ok

----------------------------------------------------------------------
Ran 2 tests in 18.646s

OK
上面就是**sample_code_python** 方式的脚本测试了!接下来,我们书写自己的脚本了!

二、自定义脚本测试用例详解

  • 1.脚本录制

    Inspector 提供脚本录制功能,至于如何操作,请看下面的 gif 把,我简单录制一下:


    image

    录制的脚本如下:

el1 = driver.find_element_by_accessibility_id("进入主页面")
el1.click()
el2 = driver.find_element_by_accessibility_id("登录")
el2.click()
el3 = driver.find_element_by_xpath("//XCUIElementTypeApplication[@name=\"UTengineFrameworkTest\"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[1]")
el3.click()
el4 = driver.find_element_by_accessibility_id("返回")
el4.click()

当然,,录制出来的脚本我们可能是无法直接使用的,需要自己修改!另外,里面的 xpath 查找元素并不一定是正确的,需要多次调试!最好的办法就是让开发者每个控件都设置accessibilityIdentifier,例如:

[self.label setAccessibilityIdentifier:@"呵呵哒"]

这样子找起来就方便准确多了

  • 2.自定义编写脚本,按照可以上传到阿里 MQC 云测试的模式

    开始我们自己编写属于自己的脚本吧!我们会新建两个.py 脚本,放在同一目录下,分别为:desired_capabilities.py 和 main.py
    具体内容如下:
    desired_capabilities.py 里面内容如下:

#!/usr/bin/python 
# -*- coding: UTF-8 -*-

import sys

def get_desired_capabilities():
    desired_caps = {
        #平台名称
        'platformName': 'iOS',
        #平台版本
        'platformVersion': '11.3',
        #设备名称
        'deviceName': 'iPhone 8 Plus',
        #app 的地址
        'app': '/Users/tanzhiwu/Desktop/appium自动化测试/UTengineFrameworkTest.app',
        #bundleid 如果没有填 app 地址,填了这个 id 就会直接运行已安装的 app
        'bundleId': 'com.ut.pc.UTengineFrameworkTest',
        #超时时间
        'newCommandTimeout': 60,
        #自动化测试平台
        'automationName': 'Appium',
        #是否不重新安装启动
        'noReset': True
        #自动处理系统权限弹框
        #`autoAcceptAlerts`:True 低版本有效
    }
    return desired_caps
    
#获取服务器端口地址
def get_uri():
    return 'http://localhost:4723/wd/hub'

def flushio():
    sys.stdout.flush()

main.py的内容如下:

# -*- coding: UTF-8 -*-
from appium import webdriver
import desired_capabilities
import time
from time import sleep
import unittest


class MyIOSTest(unittest.TestCase):

#setUp 和 tearDown 配对使用,场景是每个测试用例运行完都重启


    #def setUp(self):
        #获取我们设定的 capabilities,通知 appium Server 创建相应的对话
        #desired_caps = desired_capabilities.get_desired_capabilities()
        #获取 Server 的地址
        #uri          = desired_capabilities.get_uri()
        #创建会话,得到 driver 对象,driver 对象封装了所有的设备操作
        #self.driver = webdriver.Remote(uri,desired_caps)
        #设定等待时间,系统函数,在这个时间内会持续获取,超时会失败
        #self.driver.implicitly_wait(10)
        #处理系统权限弹框(新版本方法)
        #self.driver.switch_to.alter.accept()


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

#setUpClass 和 tearDownClass配套使用,场景是不间断测试,后续测试用例依赖前一个测试用例的环境
    @classmethod
    def setUpClass(self):
        desired_caps = desired_capabilities.get_desired_capabilities()

        uri          = desired_capabilities.get_uri()

        self.driver = webdriver.Remote(uri,desired_caps)

        #self.driver.implicitly_wait(10)

    @classmethod
    def tearDownClass(self):

        self.driver.quit()

    #自定义元素查找方法
    def wait_for_element(self,xpath=None, id=None, name=None, index=None,timeOut= 20):
        starTime = time.time()
        nowTime  = time.time()
        while nowTime -starTime 

这个时候最好就是上图来演示下我们的自动化测试结果了,有个注意点,右键开始 run 的时候不要放在测试用例体内,不然只会运行当前测试用例:


image

至此,我们iOS 端的测试python 自动化功能测试脚本就完成了。当然我这里只是简单的写两个用例,真的在生产环境中的时候,需要分割成不同的模块去编写测试用例,还有更细致的容错管理等!抛砖引玉一下,希望大家也能分享比较成熟的脚本编写方案,指导一下我们这种希望了解自动化测试的的新人!

参考:

Desired Capabilities Documentation

Python脚本测试

你可能感兴趣的:(Mac 下 appium 自动化测试iOS 测试配置和脚本编写(二))