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

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

一、 sample_code_python 的脚本测试验证

1.开启 appium desktop

73981e3265d5

image

2.配置我们要测试的的.app信息

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

73981e3265d5

image

73981e3265d5

image

3.开启 Inspector来查看元素定位和界面元素查找

73981e3265d5

image

4.配置我们的脚本来测试

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 的目录

73981e3265d5

image

选择用 Xcode打开或者下载一个 IDEPyCharm来打开,当然PyCharm强大很多

73981e3265d5

image

其中参数定义如下:

`app` :我们需要测试的 app的地址,填我们机子上的绝对地址

`platformName` :'iOS'我们测试的平台

`platformVersion`:'ii.3',这是我们的版本号,手机版本

`deviceName` :'iPhone 8 Plus'这是我们需要的测试的机型,模拟器也行,会自己找,如果是真机需要填真机的 `UUID`

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

73981e3265d5

image

接着,我们可以在PyCharm或者终端里面运行 ios_simple.py了,每次脚本运行前确定 appium 已经启动!

PyCharm方式,第一次右键会有 run ios_simple.py的选项:

73981e3265d5

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 把,我简单录制一下:

73981e3265d5

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

# 通过xpath 查找控件

try:

if xpath is not None:

el = self.driver.find_element_by_xpath(xpath)

return el

except:

pass

#通过 id 或者 name 查找控件

try:

if id is not None:

if index is not None:

return self.driver.find_element_by_accessibility_id(id)[index]

else:

return self.driver.find_element_by_accessibility_id(id)

except:

pass

#通过 name 查找控件

try:

if name is not None:

if index is not None:

return self.driver.find_elements_by_class_name(name)[index]

else:

return self.driver.find_element_by_name(name)

except:

pass

sleep(1)

nowTime = time.time()

raise Exception("Element xpath[%s] id[%s] name[%s] index[%s] not found" % (xpath, id, name, index))

def test_1(self):

mainBtn = self.wait_for_element(id="进入主页面")

mainBtn.click()

loginBtn = self.wait_for_element(id="登录")

loginBtn.click()

def test_2(self):

sleep(3)

item1 = self.wait_for_element(name="名字")

item1.click()

backItem = self.wait_for_element(id="返回")

backItem.click()

if __name__ == '__main__':

# try:unittest.main()

# except SystemExit:pass

suite = unittest.TestSuite()

suite.addTest(MyIOSTest("test_1"))

suite.addTest(MyIOSTest("test_2"))

unittest.TextTestRunner(verbosity=2).run(suite)

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

73981e3265d5

image

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

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值