-
Appium环境搭建
(1)安装Python+Pycharm编辑器
(2)安装Appium python client包
直接在命令提示窗口中 输入pip install Appium-Python- Client
常见问题:SSL代理错误,取消internet链接-局域网设置-代理服务器 勾选
注:为防止后期bat批处理运行时相关三方包获取失败问题,建议使用pip命令安装框架中需要的第三方库,不要使用pycharm安装
(3)安装Appium Server
(4)安装Android SDK及配置环境变量
配置环境变量的目的,是为分别调用三个路径下的工具做准备
adb.exe驱动调试命令工具
uiautomatorviewer.bat元素定位工具:目的在于对APP截图获取元素定位
aapt.exe应用分析工具:目的在于获取app包名和appActivity窗体
(5)安装JDK并配置环境变量 -
数据准备工作
(1)开启appium客户端,设置日志路径,启动服务
(2)启动pythoncharm,导入appium模块
(3)收集app操作相关信息
(4)usb链接手机,使用adb调试命令查看设备连接并启用开发者调试模式
(5)手机设置准备:打开调试开关,USB调试,USB调试(安全设置),关闭MIUI优化并重启
注1:USB调试(安全设置):MIUI系统会定期检测sim卡是否存在,若不存在sim卡,则自动关闭,造成调用失败
注2:关闭MIUI优化作用:此项主要影响apk安装,oppo无此问题,需根据手机品牌分别设置,如设置后仍无法安装 -
Pycharm启动App
def buge_driver(phonename):
with open('../Config/buge_caps.yaml','r',encoding='utf-8') as file:
data=yaml.load(file,Loader=yaml.FullLoader)
# 需安装app时,增加如下代码
# base_dir = os.path.dirname(os.path.dirname(__file__))
# app_path = os.path.join(base_dir, 'app', data[phonename]['app'])
# 'app': app_path, #添加到buge_caps中
buge_caps = {'platformName': data[phonename]['platformName'],
'platformVersion': data[phonename]['platformVersion'],
'deviceName': data[phonename]['deviceName'],
'appPackage': data[phonename]['appPackage'],
'appActivity': data[phonename]['appActivity'],
'noReset': data[phonename]['noReset']}
logging.info("程序启动...")
driver1 = webdriver.Remote(data[phonename]['url'],buge_caps)
return driver1
if __name__ == '__main__':
dri=buge_driver('mi9Se')
运行若出现异常,请排查代码报错及步骤2的数据准备工作,若均无问题,请参考如下解决办法
- App元素定位方法
(1)定位工具:采用appium进行定位
(2)定位元素示例
1> id定位,适用于resource-id为唯一标识时: 使用ID方法定位
2> text定位,适用于text唯一时使用:使用name方法定位,二种均可
3> desc定位,适用于content-desc唯一标识:使用content-desc方法定位
4> 对于resource-id/text/content-desc等均无法定位元素唯一性时,使用相对坐标系定位,但该方法会直接进行 点击操作
def get_tap(self,x1,y1):
# 函数作用: 相对坐标定位点击操作
# tap三个参数,分别是 x,y,z: x,y 用于确定坐标位置,z表示点击持续时间
x = self.driver.get_window_size()['width']
y = self.driver.get_window_size()['height']
#获取当前手机指定元素坐标系位置:xx,yy
xx=x1/1080 #1080:当前手机width
yy=y1/2211 #2211:当前手机height
#返回相对坐标,并进行点击
return self.driver.tap([(xx*x, yy*y)],2)
5> 针对当前页面某元素类型的ID或Name存在多个的情况,但不希望使用tap定位的情况,建议使用find_elements方法定位
- App元素操作方法
(1)点击操作
(2)坐标点击操作
(3)输入操作
(4)滑动操作
def swipeLeft(self):
# 函数作用:模拟屏幕滑动操作-->开始起始坐标(x,y),结束坐标(x.y),滑动持续时间t
logging.info('swipeLeft')
l = self.get_size()
x1 = int(l[0] * 0.9)
y1 = int(l[1] * 0.5)
x2 = int(l[0] * 0.1)
time.sleep(3)
self.swipe(x1, y1, x2, y1,500)
# self.swipe(500, 188, 500, 2138,200)
- App元素等待方法
(1) 强制等待
使用场景:针对页面广告等有强制等待倒计时的页面
time.sleep(3) #强制等待3秒
(2) 隐式等待
使用场景:针对页面跳转时,等待页面完全加载
driver1.implicitly_wait(8) #等待8秒,非强制等待,待页面元素加载完毕即结束等待,进行下一步操作
(3) 显示等待
针对页面内出现的不定时长画面遮挡而导致指定元素需要操作时,预置此条件以便继续操作,
如房间出现动态礼物或坐骑特效遮挡时
#等待指定元素出现,结束等待,进行下一步操作
WebDriverWait(self.driver, 20, 0.5).until(EC.presence_of_element_located((By.ID, "com.chinaesport.bugegaming:id/tv_confirm")),message="未找到元素:确定退出")
- Appium框架说明及操作演示:
- App测试概述:
(1) 概述
什么是App自动化?为什么要做App自动化?
App自动化是指给 Android或iOS上的软件应用程序做的自动化测试。
手工测试和自动化测试的对比如下:
手工测试优势:不可替代、发现更多bug、包含了人的想象力与理解力。注意,不是所有功能都需要自动化。
自动化测试优势:可重复、效率高,增加软件信任度。
App测试自动化的目的如下:
执行自动化测试只会发现很少的bug。
执行自动化冒烟测试或回归测试是用来验证系统状态,而不是找出更多bug。
-执行自动化测试可以让测试同事有更多的精力来关注复杂场景,做更多更深层次的测试。
-编写自动化测试过程中会发现一部分bug,发现后要及时记录。
(2) 风险分析
自动化测试的主要风险分析如下:
1>测试用例覆盖率(覆盖率决定测试效率,选择合适用例,应约占功能用例集的20%~50%)
2>测试结果准确度(准确度决定了测试有效性,应尽可能减少误报)。
3>自动化代码维护(维护决定了成本,数据关键字驱动自动化框架,代码应尽可能优化和少改动)。
4>版本开发和测试时间进度(当项目需求和功能较为稳定时,建议用自动化)。
5>开发对控件元素增修改的程度(需开发人员尽可能地用统一的类型元素,并且和UI设计一致,修改变动程度不大,测试人员可根据提供的元素提前介入,开发自动化脚本)。