• 【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现


    文章目录

    • 前言
    • 一、Appium介绍和安装
    • 二、python代码功能实现
    •       2.1 hello appium 参数详解
    •       2.2 在脚本内启动其他app
    •       2.3 获取app的包名和界面名
    •       2.4 关闭app和驱动对象
    •       2.5 安装和卸载以及是否安装app
    •       2.6 将应用置于后台
    • 总结


    前言


    一、Appium介绍和安装

    (1)Appium介绍

    Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于iOS和Android操作系统。原生的应用是指用android或iOS的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。

    重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试脚本。


    (2)Appium自动化测试环境搭建

    我们使用Appium和python来进行自动化测试,需要安装两个东西,一个是Appium的客户端,一个是Appium-python库。这两个需要安装的东西在加上手机就可以进行自动化测试,它们之间的关系是: python代码->Appium-python库-→> Appium ->手机。


    (3)Appium客户端安装

    Appium桌面客户端安装方式:

    1.运行appium-desktop-Setup-1.6.2.exe,默认安装即可

    2.启动客户端,按图片步骤1->2->3->4设置

    启动成功展示如下:


    (4)Appium-python库安装命令行安装(需要联网)

    pip3 insta11 Appium-python-client.


    二、python代码功能实现

    2.1 hello appium 参数详解

    (1)应用场景:
    在做app自动化的时候,我们肯定是针对某个产品、某个软件进行测试,那么我们一定是先让模拟器或真机帮我们打开这款软件才可以。所以接下来要学的就是如何打开某个应用程序。

    (2)需求:

    使用以下步骤可以打开模拟器中的《设置》应用程序

    (3)实现步骤:

    1.打开手机模拟器

    2.打开appium工具

    3.创建一个python项目,取名为hello_appium

    4.创建一个demo.py文件

    5.将下面代码直接复制,并运行即可

    1. from appium import webdriver
    2. desired_caps = dicto
    3. desired_caps['platformName "] = 'Android'
    4. desired_caps['platformversion'] = '5.1'
    5. desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    6. desired_caps['appPackage '] = 'com.android.settings'
    7. desired_caps[ 'appActivity'] = ".settings '
    8. driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)
    9. driver.quit()

    注意点:

    这段代码实际上配置了一些启动应用程序的相关参数。之后的其他项目也需要用到这个参数,可能有些参数配置的内容不同。为了方便我们后期课程会将这段代码叫做“前置代码”。


    参数详解:

    (1)应用场景

    如果后期项目不是测试《设置》应用程序,而是测试《短信》应用程序那么怎么打开《短信》应用程序呢?如果后期项目测试的模拟器或手机不再是5.1的版本,而是6.1的版本呢?

    相关配置的信息在学习之后都可以进行修改。

    (2)参数解释

    #导模块

    from appium import webdriver

    #创建一个字典,包装相应的启动参数

    desired_caps = dicto

    #需要连接的手机的平台(不限制大小写)

    desired_caps["platformName "] ='Android'

    # 需要连接的手机的版本号(比如5.2.1的版本可以填写5.2.1或5.2或5 ,以此类推)

    desired_caps['platformversion"] = "5.1'

    #需要连接的手机的设备号(andoird平台下,可以随便写,但是不能不写)

    desired_caps[ " deviceName'] = '192.168.56.101:5555 "

    #需要启动的程序的包名

    desired_caps[ ' apppackage'] = 'com.android.settings"

    #需要启动的程序的界面名

    desired_caps[ " appActivity'] = ".settings'

    #连接appium服务器

    driver = webdriver.Remote( 'http:/ /loca1host:4723/wd/hub', desired_caps)

    #退出

    driver.quit()


    2.2 在脚本内启动其他app

    (1)应用场景

    如果一个应用需要跳转到另外一个应用,就可以使用这个api进行应用的跳转,就像我们通过外卖应用下订单之后会跳转到支付应用一样。

    (2)方法名和参数

    #脚本内启动其他app

    #参数:

    #appPackage:要打开的程序的包名

    #appActivity:要打开的程序的界面名

    driver.start_activity(apppackage(包名),appActivity(界面名))

    (3)示例

    打开《设置》应用程序,等待三秒后跳转到《短信》应用程序

    代码实现:

    1.前置代码:打开《设置》应用程序

    from appium import webdriver
    desired_caps = dicto
    desired_caps['platformName "] = 'Android'
    desired_caps['platformversion'] = '5.1'
    desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    desired_caps['appPackage '] = 'com.android.settings'
    desired_caps[ 'appActivity'] = ".settings '
    driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)

    2.等待三秒后跳转到《短信》应用程序

    time.sleep(2)

    driver.start_activity( ' com.android.mms ', '.ui.conversationList')


    driver.quit()


    2.3 获取app的包名和界面名

     (1)应用场景

    当我们从一个应用跳转到另外一个应用的时候,想输出其包名、界面名或者想在报告中展现对应信息,我们就可以调用这个属性来进行获取.

    (2)属性名

    #获取包名

    driver.current_package

    #获取界面名

    driver.current_activity

    (3)示例

    打开《设置》应用程序后输出当前的包名和界面名。

    代码实现:

    1.前置代码:打开《设置》应用程序

    from appium import webdriver
    desired_caps = dicto
    desired_caps['platformName "] = 'Android'
    desired_caps['platformversion'] = '5.1'
    desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    desired_caps['appPackage '] = 'com.android.settings'
    desired_caps[ 'appActivity'] = ".settings '
    driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)

    2.输出当前的包名和界面名

    #打印当前应用设置包名

    print(drive.current_package)

    #打印当前应用设置界面名

    print(driver.current_activity)

    输出结果:


    2.4 关闭app和驱动对象

     (1)应用场景

    有的时候我们需要关闭某个应用程序后,再打开新的应用。

    (2)方法名

    #关闭当前操作的app,不会关闭驱动对象

    driver.close_app()

    #关闭驱动对象,同时关闭所有关联的app

    driver.quit()

    (3)示例

    打开《设置》,使用close_app()方法关闭,再尝试使用quit()方法,最后打印当前程序的包名,观察区别

    代码实现:

    1.前置代码:打开《设置》应用程序

    from appium import webdriver
    desired_caps = dicto
    desired_caps['platformName "] = 'Android'
    desired_caps['platformversion'] = '5.1'
    desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    desired_caps['appPackage '] = 'com.android.settings'
    desired_caps[ 'appActivity'] = ".settings '
    driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)

    2.使用close_app()方法关闭,再尝试使用quit()方法

    (1)close_app()方法关闭

    drive.close_app()

    print(drive.current_package)

    (2)使用quit()方法

    drive.quit()

    print(drive.current_package)

    3.输出当前的包名和界面名

    (1)close_app()方法关闭

    依然会输出包名

    (2)使用quit()方法关闭

    不会输出包名,会报错,查找不到驱动对象


    2.5 安装和卸载以及是否安装app

    (1)应用场景

    一些应用市场的软件可能会有一个按钮,如果某一个程序已经安装则卸载,如果没有安装则安装。

    (2)方法名

    #安装app

    #参数:

    #app_path: apk路径

    driver.install_app(app_path)


    #卸载app

    #参数:

    #app_id:应用程序包名

    driver.remove_app(app_id)


    #判断app是否已经安装

    #参数:

    #app_id:应用程序包名

    #返回值:

    #布尔类型,True为安装,Fa1se为没有安装

    driver.is_app_installed(app_id)

    (3)示例

    如果《安智市场》已经安装,则卸载《安智市场》,如果没有则安装

    代码实现:

    1.前置代码:打开《设置》应用程序

    from appium import webdriver
    desired_caps = dicto
    desired_caps['platformName "] = 'Android'
    desired_caps['platformversion'] = '5.1'
    desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    desired_caps['appPackage '] = 'com.android.settings'
    desired_caps[ 'appActivity'] = ".settings '
    driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)

    2.判断软件是否安装,安装了则卸载,未安装则安装。

    if driver.is_app_installed("cn.goapk.market"):

    #软件安装了则卸载

          driver.remove_app("cn.goapk.market")

    else:

    #软件未安装了则安装

          driver.install_app(" /users/Yoson/Desktop/anzhishichang.apk")

    #退出driver

    driver.quit()


    2.6 将应用置于后台

     (1)应用场景

    银行类app会在进入后台一定时间后,如果再回到前台也页面会重新输入密码,如果需要自动化测试这种功能,可以使用这个api进行测试

    (2)方法名

    # app放置到后台一定时间后再回到前台,模拟热启动

    #参数:

    #seconds:后台停留多少秒

    driver.background_app(seconds)

    (3)示例

    打开《设置》应用,进入后台5秒,再回到前台

    代码实现:

    1.前置代码:打开《设置》应用程序

    from appium import webdriver
    desired_caps = dicto
    desired_caps['platformName "] = 'Android'
    desired_caps['platformversion'] = '5.1'
    desired_caps[ " deviceName ' ] = '192.168.56.101:5555"
    desired_caps['appPackage '] = 'com.android.settings'
    desired_caps[ 'appActivity'] = ".settings '
    driver = webdriver.Remote('http:/ /loca7host:4723/wd/hub', desired_caps)


    2.进入后台5秒,再回到前台

    driver.background_app(5)

    time.sleep(3)

    drive.quit()

    注意点:
    热启动:表示进入后台回到前台。

    关机再开这种切断电源的行为可以叫做""冷启动”

    总结

  • 相关阅读:
    three.js之材质
    数码相机raw照片编辑Capture One Pro中文
    springboot+VUE+elementui医院设备仪器维修保养管理系统
    Mysql8.0 数据库表的基本操作
    SQL与关系数据库基本操作
    44 二叉搜索树中第K个小的元素
    Kafka组件的消费者流程解析,图文详解
    2022年C等级考试九月二级真题B:全在其中
    Springboot毕设项目线上影院系统ao90djava+VUE+Mybatis+Maven+Mysql+sprnig)
    【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)
  • 原文地址:https://blog.csdn.net/qq_64861334/article/details/139620385