APP自动化测试Appium

1. APP测试所需环境的搭建

        三大环境:java、androidSDK和android模拟器

        android模拟器:模拟手机,便于可视化

        androidSDK:提供开发测试所需要的Android API类库

        Java:Android底层是c、c++,应用层语音是Java,所以需要安装java环境

2. adb概念

        adb全名android debug bridge,是一个调试工具

3. adb构成和工作原理

        adb由三部分构成:Client端、Daemon守护进程、Server端

        Client端:运行在开发机器中,即电脑端,用来发送adb命令

        Daemon守护进程:运行在调试设备中,手机或者模拟器,用来接受并执行adb命令

        Server端:运行在开发及其中,用来管理Client端和手机Daemon之间的通信

        工作原理:

                1.client端将命令发送给server端

                2.server端会将命令发送给daemon端

                3.daemon端执行命令

                4.将执行结果返回给server端

                5.server端将结果再返回给clien端

4. adb连接模拟器

        执行测试之前,需要在本机与模拟器之间建立连接

adb connect IP地址:端口号

5. 包名和界面名的概念

        包名(package):决定程序的唯一性(不是应用的名称)

        界面名(activity):也称启动名,程序当前界面

6. 获取包名与界面名

        mac/linux:

adb shell dumpsys window windows | grep mFocusedApp

         windows:

adb shell dumpsys window windows | findstr mFocusedApp
'''
如果发现出错则修改为:
adb shell dumpsys window windows | findstr "mFocusedApp"
'''

7. 文件传输——发送文件到手机

        将手机需要的数据在电脑上调整好,直接发送给手机

adb push 电脑的文件路径 手机的文件夹路径

8. 文件传输——从手机中拉取文件

        将手机产生的文件(数据库文件,日志文件)拉取到电脑

adb pull 手机的文件路径 电脑的文件夹路径

9. 获取app启动时间

adb shell am start -W 包名/启动名

返回参数说明:

        ThisTime:该界面(activity)启动耗时(毫秒)

        TotalTime:应用自身启动耗时=ThisTime+应用application等资源启动时间(毫秒)

        waitTime:系统启动应用耗时=TotalTime+系统资源启动时间(毫秒)

10. 获取手机日志

        使用步骤:1.打开需要测试的应用程序 2.找到触发BUG的位置 3.使用查看日志命令 4.触发BUG 5.获取日志信息

adb logcat

11. adb其他命令

        adb install 路径/xxx.apk:安装app到手机

        adb uninstall 包名:卸载手机上的app,需要指定包名

        adb devices:获取当前电脑已经连接设备获得对应的设备号

        adb shell:进入安卓手机内部的linux系统命令行中

        adb start-server:启动adb服务端,出bug时使用可以重启服务器,先关再启动

        adb kill-server:停止adb服务端,出bug时使用可以重启服务器,先关闭再启动

        adb --help:查看adb帮助,命令记不清楚时使用

12. 使用Appium连接模拟器

from appium import webdriver
desired_caps = {
    'platformName':'Android',
    'platformVersion':'9',
    'deviceName':'deviceName',
    'appPackage':'com.shark.jizhang',
    'appActivity':'com.shark.jizhang.module.main.MainActivity',
    'unicodeKeyboard':True,
    'resetKeyboard':True,
    'noReset':True,
    'newCommandTimeout':6000,
    'automationName':'UiAutomator2'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)

        参数说明:platfromName:需要连接手机的平台(不限制大小写)

                          platformVersion:需要连接手机的版本号(可以只写主版本号,如7.2写为7)

                          deviceName:需要连接手机的设备号(安卓平台下可以随便写,但不能为空)

                          appPackage:需要启动的应用程序的包名

                          appActivity:需要启动的程序的界面名

13. 在脚本内启动其他app

        如果一个应用需要跳转到另一个应用,就需要使用这个api进行应用跳转

driver.start_activity(appPackage,appActivity)

        从鲨鱼记账跳转到设置应用

from appium import webdriver
import time
desired_caps = {
    'platformName':'Android',
    'platformVersion':'9',
    'deviceName':'deviceName',
    'appPackage':'com.shark.jizhang',
    'appActivity':'com.shark.jizhang.module.main.MainActivity',
    'unicodeKeyboard':True,
    'resetKeyboard':True,
    'noReset':True,
    'newCommandTimeout':6000,
    'automationName':'UiAutomator2'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(10)
time.sleep(3)
driver.start_activity('com.android.settings','.Settings')

14. 获取app的包名和界面名

        包名:通过driver对象调用current_package属性

        界面名:通过driver对象调用current_activity属性

15. 关闭app和驱动对象

        driver.close_app():关闭当前操作的app,不会关闭驱动对象

        driver.quit():关闭当前的app,同时关闭驱动对象

16. 安装、卸载以及查看是否安装app

        安装:driver.install_app(路径),路径指本地电脑app的安装包的路径地址

        卸载:driver.remove_app(包名)

        查看是否安装:driver.is_app_installed(包名)

17. 将应用置于后台

        driver.background_app(seconds):seconds表示在后台停留多少秒

18. UIAutomatorVirwer的使用及注意事项

        文件路径:android-sdk/tools/uiautomatorviewer.bat

        想要查看具体信息点击左上角第二个按钮

        注意点:1.命令行窗口不能关闭 2.如果闪退,则将jdk换成1.8版本 3.点击第二个按钮出错的时候,可以重启adb,adb kill-server;adb start-server,还出要将adb与模拟器重新连接 

        如果发现以下错误,则是由于android版本高于8导致,需要更换该文件,或者建议直接使用Appium。

19. Appium连接模拟器UI界面

        点击右上角放大镜

         依次将python文件中的desired_caps的键值对填入对应位置

20. 移动端元素的获取

        三种方式:id、class name和xpath,但由于Appium直接提供xpath路径,因此大多数都是使用xpath来定位的

21. 滑动和拖动事件

        swipe滑动事件:从一个位置滑动到另一个位置

driver.swipe(start_x,start_y,end_x,end_y,duration=None)

        参数说明:start_x:起点x轴坐标

                          start_y:起点y轴坐标

                          end_x:终点x轴坐标

                          end_y:终点y轴坐标

                          duration:滑动这个操作一共持续的时间长度,单位:ms

        scroll/drag_and_drop滑动事件:从一个元素滑动到另一个元素

start_element = driver.find_element_by_xpath()
end_element = driver.find_element_by_xpath()
driver.scroll(start_element,end_element)
driver.drag_and_drop(start_element,end_element)

        参数说明:start_element:启示元素位置

                          end_element:结束元素位置

        scroll和drag_and_drop两者区别:scroll有惯性,drag_and_drop没有

22. TouchAction之轻敲

        关键方法:tap(element,x,y,count=1)

from appium.webdriver.common.touch_action import TouchAction
element = driver.find_element_by_xpath('')
TouchAction().tap(element).perform()

        注:element和xy只能输入一个,并且输入xy时,需要tap(x=,y=)不能省略;想要多次点击时,可以对count参数进行设置

23. TouchAction之按下和抬起

#按下
TouchAction(driver).press(element/x,y).perform()
#抬起
TouchAction(driver).release().perform()

24. TouchAction之等待

TouchAction(driver).wait(ms=0).perform()

25. TouchAction之长按

TouchAction(driver).long_press(element/x,y,duration).release().perform()

26. TouchAction之移动

TouchAction(driver).move_to(element/x,y).perform()

27. 手机分辨率及截图

#获取分辨率
driver.get_window_size() #返回字典,通过键值对取值
#截图
driver.get_screenshot_as_file(path) #path指的是文件存放路径及文件名

28. 获取和设置手机网络

#获取手机网络类型
driver.network_connection
#设置手机网络类型
driver.set_network_connection(connectionType)
'''
connnectionType可以从下图中0,1,2,4,6中选取数字
也可以从库中加载
from appium.webdriver.connectiontype import ConnectionType
'''

29. 发送键到设备

driver.press_keycode(keycode,metastat=None)

        参数说明:keycode代表发送设备的关键代码,可以百度关键词android keycode查到

                          metastat:一般为默认值

30. 操作通知栏

#打开通知栏
driver.open_notifications()
'''
由于没有提供关闭通知栏指令,我们可以使用返回键关闭
driver.press_keycode(4)
'''
  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值