• python+appium+真机测试


    appium环境搭建

    • 操作系统: Windows 10
    • 被测平台: Android真机
    • appium服务器: appium Desktop
    • appium客户端: python-client
    • 测试的APP:小米计算器

    安装Android SDK

    在安装Android开发环境之前,需要先安装JAVA的开发环境!

    Android SDK已经不再提供完整的独立下载,需要通过Android Studio安装:

    Android Studio下载地址:https://developer.android.google.cn/studio

    这里以windows版本为例,下载好了打开安装程序,记得勾选Android Virtual Device,然后选择安装路径并安装

    首次启动Android Studio会弹出提示框,如图所示:

    提示Android Studio没有检查到Android SDK,因为我们没有单独安装和配置Android SDK,所以单击“Cancel”按钮,继续安装。

    勾选【Android SDK】 和【Android SDK Platform】选项,并通过【Android SDK Location】选择SDK的安装路径。

    之后点击【Finish】开始下载安装SDK,整个过程比较漫长,需要等待一段时间。

    安装完成后,就可以创建Android项目,因为用真机,所以在这就不讲模拟器的设置了。

    配置Android 环境变量

    在我的电脑右键菜单中选择【属性】→【高级系统设置】→【高级】→【环境变量】→【系统变量】下的【新建】按钮,添加ANDROID_HOME:

    变量名: ANDROID_HOME

    变量值: D:AndroidSDK # SDK的安装位置

    单击【path】变量名,点击【编辑】按钮,追加如下配置:

    %ANDROID_HOME%platform-tools

    %ANDROID_HOME% ools

    %ANDROID_HOME%uild-tools29.0.3 # 后面的版本自己去目录看下,不要照抄

    配置完成后在命令行输入命令adb,能正常执行就好了

    安装appium Desktop

    appium为c/s架构,Server主要用来监听我们的移动设备,接收Client(客户端)发来的JSON请求,解析后驱动移动设备运行测试脚本。

    Github下载地址:https://github.com/appium/appium-desktop

    进入网站后,找到标题Download Appium Desktop下,点击Release链接就可以看到各个版本的安装包了。

    下载完了后进行傻瓜式安装就好了。

    安装python的appium测试库

    appium client支持多种编程语言,这里以python为例,通过pip命令安装:

    pip install Appium-Python-Client

    至此自动化测试环境就完成了。

    测试准备和编写脚本

    开发者模式

    首先USB手机连接电脑,手机进入开发者模式(不同品牌手机操作方法不同),在开发者选项中开启USB调试。

    在windows命令行中使用adb devices 查看设备连接情况,在List of devices attached下能看到一个实例ID说明监听成功:

    此时windows命令行输入adb install D:com.miui.calculator.apk可以安装小米计算器APP

    注意APK的所在路径和文件名

    appium Desktop

    打开appium客户端,点击【start server】启动appium server:

    菜单栏选择【File】下的【New Session Window】进行配置:

    如何获取app的appPackage名和appActivity名?
    打开windows命令行,输入命令aapt dump badging D:/com.miui.calculator.apk可以获取到,如下图所示

    JSON配置信息:

    {
      "platformName": "Android",	# 测试的平台,安卓或者ios
      "platformVersion": "10",		# 系统版本,此处代表安卓10
      "deviceName": "OnePlus 7 pro",	# 设备名称,填手机型号就行,随便填也可
      "app": "D:/com.miui.calculator.apk",	# app的安装包的位置
      "appPackage": "com.miui.calculator",	# app的包名
      "appActivity": "com.miui.calculator.cal.CalculatorActivity"	# app的activity名
    }
    

    简单配置完成后,点击右下角的【start session】

    可以看到测试机打开了小米计算器

    元素定位

    如图,可以看到进入小米计算器的APP画面,并且出现了权限设置的问题。

    这些权限按钮什么的都是可以定位到的,现在在appium手机画面预览中点击【同意】按钮,右边会出现元素的各种属性。

    可以看到id和xpath定位等,这个操作跟selenium定位一样,优先使用id就好,没有id就使用其他定位方式。

    这时候在测试机上点击【同意】按钮,测试机进入了小米计算器,此时appium的画面还没有变,因为需要点击上面的【refresh】按钮来实时获取手机的画面,然后根据需求找出各个按钮的定位就可以编写测试脚本了。

    编写脚本

    现在来写一个简单的脚本操作一下小米计算器,计算5×9=45是否正确:

    from appium import webdriver
    from time import sleep
    
    # 配置信息,字典类型,直接复用上面的json就好
    desired_caps = {
        "platformName": "Android",
        "platformVersion": "10",
        "deviceName": "OnePlus 7 pro",
        "app": "D:/com.miui.calculator.apk",
        "appPackage": "com.miui.calculator",
        "appActivity": "com.miui.calculator.cal.CalculatorActivity"
    }
    # 传入appium server的host+path,还有配置信息
    driver = webdriver.Remote(command_executor='http://localhost:4723/wd/hub',
                              desired_capabilities=desired_caps)
    sleep(3)
    # 同意读取手机状态和身份
    driver.find_element_by_id('android:id/button1').click()
    # 同意获取电话权限
    driver.find_element_by_id('com.android.permissioncontroller:id/permission_allow_button').click()
    # 点击5
    driver.find_element_by_id('com.miui.calculator:id/btn_5_s').click()
    # 点击乘号
    driver.find_element_by_id('com.miui.calculator:id/btn_mul_s').click()
    # 点击9
    driver.find_element_by_id('com.miui.calculator:id/btn_9_s').click()
    # 点击等号
    driver.find_element_by_id('com.miui.calculator:id/btn_equal_s').click()
    # 判断结果是否等于45
    result = driver.find_element_by_id('com.miui.calculator:id/result').text
    if result == '= 45':
        print('正确')
    else:
        print('错误')
    
    sleep(3)
    # 退出测试
    driver.quit()
    
    

    运行脚本的效果:

  • 相关阅读:
    如何将一个PDF文件里的图片批量导出
    (二十二)golang--时间和日期相关函数
    (二十一)golang--字符串中的函数
    (二十)golang--变量的作用域
    (十九)golang--函数参数的传递方式
    (十八)golang--defer关键字
    (十七)golang--闭包(简单明了)
    (十六)golang--匿名函数
    (十五)golang--init函数
    【自然语言处理】双语数据预处理
  • 原文地址:https://www.cnblogs.com/milesma/p/12345928.html
Copyright © 2020-2023  润新知