Appium基础篇3-第一个appium自动化脚本之自动安装apk包到手机

时间:2024-03-22 08:59:25

这篇,我们开始来一个实战练习,如何通过appium自动把电脑上一个安卓程序包给安装到一台安卓手机中。在写脚本之前,我们需要统一下方法和工具。我们知道Appium和selenium一样都支持Java和Python,当然还有其他几个语言。那么,我们选择哪个语言来写我们的自动化测试脚本?Java还是Python?我也是第一次学习appium在安卓上的app自动化测试。Java和Python我都会,至少用来写脚本没有问题。我在写第一个例子之前,我搜索查询了一下,国内和国外,关于Python+Selenium的****,几乎没有,文章确实有,但是没有系统性的学习系列。反而Java+Appium很多资料,视频资料也有。所以,我觉得采用Python语言来写Appium的安卓端自动化测试脚本。


1.安装Appium client for python

       我们已经确定了Python来写Appium脚本,那么我们需要下载一个Appium Client for Python语言。下载方法和简单,直接在电脑打开cmd界面,这里我们用Python3,输入命令:python -m pip install Appium-Python-Client,回车就自动开始安装,安装过程很快,不到十秒结束。安装了这个,我们才可以在脚本中写导入包语句,例如 from appium import webdriver,看到这个是不是很熟悉,所以,如果学习了Selenium,会更好加速学习appium自动化测试。


2.编程环境安装

       这里,我还是采用Pycharm这个Python主流的IDE工具。虽然,这里是学习,每次学习一个API或者自动化一个场景,我们只需要写一个demo文件,运行测试一下,但是我还是建立了一个项目的结构,以后迟早会转移到自动化框架设计上来。例如,我把apk包放在了当前项目根目录下的app文件夹。需要去下载一个手机百度,安卓端的apk包。

Appium基础篇3-第一个appium自动化脚本之自动安装apk包到手机

       一开始,我只在demo这个包下写脚本来练习appium的自动化测试,其他的目录如果没有提到,就全部默认是空文件或者空包,暂时不用去管。


3. 第一个脚本:自动化安装apk包到手机

[python] view plain copy
  1. import os  
  2. from appium import webdriver  
  3.   
  4. apk_path = os.path.abspath(os.path.join(os.path.dirname(__file__),"..")) #获取当前项目的根路径  
  5.   
  6. desired_caps ={}  
  7. desired_caps['platformName'] = 'Android' #设备系统  
  8. desired_caps['platformVersion'] = '6.0.1' #设备系统版本  
  9. desired_caps['deviceName'] = 'KIW-AL10' #设备名称  
  10. # 测试apk包的路径  
  11. desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'  
  12. # 应用程序的包名  
  13. #desired_caps['appPackage'] = 'com.baidu.searchbox'    
  14. #desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'  
  15. #如果设置的是app包的路径,则不需要配appPackage和appActivity,同理反之  
  16.   
  17. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app  

       上面的desired_caps是一个字典,一开始定义一个空字典,然后根据键和值,设置了多个参数,这些参数就组成了一个字典对象。为什么需要这个字典参数对象呢?因为,需要手机发送一些手机参数给Appium服务器,这样Appium服务器才能处理请求,才能和手机中的程序联系起来。

       windows上的appium是一个服务器,启动后之后,如果是第一次运行上面脚本,appium会在你手机里安装两个软件,一个是Appium Settings, 一个unlock。Appium Settings是一个client端,负责解释和执行Windows端appium的命令,而unlock只是一个用来唤醒手机屏幕,解锁的功能。第一次运行上面脚本,时间有点慢,因为先要安装Appium Settings和Unlock到你手机上,然后执行ADB命令去安装shoujibaidu.apk包,最后启动这个手机百度。启动过程,安卓上会弹出权限请求,例如sd卡读取权限,地理位置获取权限,这些,你需要手动去点击同意。目前,没有更好方法去自动化处理这个权限弹窗,因为这个不是一个app或者浏览器上的alert弹窗,所以,appium暂时不支持自动化这样操作。


4.查看Appium服务运行日志

       运行脚本结束,我们点击windows上Appium界面的stop server按钮,看到日志文件,当然可以到处到一个xxxx.log文件,用notepad++来看日志。日志太多,这里简单来看一些,我们很容易看懂的内容。

4.1 Appium创建一个连接session

[plain] view plain copy
  1. [info] [Appium] Welcome to Appium v1.6.5  
  2. [info] [Appium] Appium REST http interface listener started on 0.0.0.0:4723[info] [HTTP] --> POST /wd/hub/session {"capabilities":{"firstMatch":[],  
  3. "alwaysMatch":{"platformName":"Android","platformVersion":"6.0.1","deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\  
  4. appium_android_framework\\app\\shoujibaidu.apk"}},"desiredCapabilities":{"platformName":"Android","platformVersion":"6.0.1",  
  5. "deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk"}}  
  6. [debug] [MJSONWP] Calling AppiumDriver.createSession() with args: [{"platformName":"Android","platformVersion":"6.0.1",  
  7. "deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk"},null,{"firstMatch":[],  
  8. "alwaysMatch":{"platformName":"Android","platformVersion":"6.0.1","deviceName":"KIW-AL10","app":"C:\\Users\\Administrator\\PycharmProjects\\  
  9. appium_android_framework\\app\\shoujibaidu.apk"}}]  
  10. [debug] [BaseDriver] Event 'newSessionRequested' logged at 1504948606634 (17:16:46 GMT+0800 (中国标准时间))  
  11. [info] [Appium] Creating new AndroidDriver (v1.20.0) session  
  12. [info] [Appium] Capabilities:  
  13. [info] [Appium]   platformName: 'Android'  
  14. [info] [Appium]   platformVersion: '6.0.1'  
  15. [info] [Appium]   deviceName: 'KIW-AL10'  
  16. [info] [Appium]   app: 'C:\\Users\\Administrator\\PycharmProjects\\appium_android_framework\\app\\shoujibaidu.apk'  
  17. [debug] [AndroidDriver] AndroidDriver version: 1.20.0  
  18. [info] [BaseDriver] Session created with session id: f61bbf84-4eba-4500-b3f3-5a810117e323  
  19. [debug] [AndroidDriver] Getting Java version[info] [AndroidDriver] Java version is: 1.8.0_121  
  20. [info] [ADB] Checking whether adb is present  
  21. [info] [ADB] Using adb.exe from C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe  
  22. [info] [AndroidDriver] Retrieving device list  
  23. [debug] [ADB] Trying to find a connected android device  
  24. [debug] [ADB] Getting connected devices...[debug] [ADB] 1 device(s) connected  
  25. [info] [AndroidDriver] Looking for a device with Android '6.0.1'  
  26. [debug] [ADB] Setting device id to WPV0216912000686  
  27. [info] [ADB] Getting device platform version  
  28. [debug] [ADB] Getting connected devices...  
  29. [debug] [ADB] 1 device(s) connected  
       上面从启动Appium服务,然后读取Capablilities参数,然后验证ADB是否安装,验证apk包是否放在设置的路径下,然后成功连接手机。后面的日志,也是一堆通过ADB命令来获取手机设备信息和安装和卸载apk包。