• appium自动化测试实战


    一、Appium的介绍    

           Appium是一款开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。

    1、 使用appium进行自动化测试的好处

           Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

           Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架.Appium实现了真正的跨平台自动化测试。(本文主要介绍Python的用法)

    2、Appium架构

          Appium 是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等. 

          Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以Appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。

          下面直接开始正题,进行移动端自动化测试实战。

    二、Appium实战(以真机为例)

           aapt dump badging D:XXX.apk  获取安装包的所有信息

           adb devices(查看手机是否连接到电脑)

           adb shell pm list packages:列出所有的包名,找到所查看包的包名。

           adb shell dumpsys package com.android.XXX:查看某个包的具体信息

           其它:

           adb devices:查看Android设备是否连接到电脑。

           adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

           adb shell dumpsys activity activities

           adb shell pm list packages:列出所有的包名。

           adb shell dumpsys package:列出所有的安装应用的信息

           adb shell dumpsys package com.android.XXX:查看某个包的具体信息

           adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

           adb logcat | grep ActivityManager:查看当前正在运行的Activity

           adb logcat | grep Displayed:查看当前正在运行的Activity

    1、 连接真机或者模拟器(此处以真机为例)

           连接手机时注意选择手机的开发者模式,cmd打开命令行窗口,输入adb devices获取到设备的deviceName。

          

    2.获取Activity

           cmd打开命令行窗口,输入aapt dump badging D:XXX.apk(xxx指安装包名,D:是指路径)直接查看需要测试app安装包的具体信息。

          

           标记的就是包名,继续往下拖拽,可以找到activity的信息。

          

           这里的红圈就可以看到activity的信息。这两个值,在appium脚本中都需要提前获取到,所以需要提前介绍这个获取方法。如果你觉得在cmd里面不好看,你可以把cmd信息导出到一个txt文件,例如 aapt dump badging shoujibaidu.apk > 123.txt 回车后,会在桌面生成一个123.txt文件,你可以打开,通过查询找到这些信息。通过上面的方法,只要我们有android SDK环境,那么我们就可以获取到任意一个包的包名和Activity信息。

    3.启动Appium 

         1)  双击桌面上的appium图标打开,点击Android Settings进行设置。

        

         2)将上方获取到的真机的deviceName填入 ,选择platformName和platformVersion

        

          3)将服务的session配置成可重写(非必要的配置)

          

          配置好后,点击右上角的启动按钮进行启动即可。

          

            启动成功,下一步该写代码了。

    4、将上方得到的设备和安装包信息写入脚本中

    desired_caps = {
        'platformName': 'Android',
        'deviceName':'8TB6V4ZPZ54LPJ5P',
        'platformVersion': '5.1',
        'app': PATH(r'D:shell_customer-debug.apk'),
        'appPackage': 'com.jyibb.shell_customer',
        'appActivity': 'com.jyibb.module_launch_customer.SplashActivity',    # 'unicodeKeyboard': 'True',#此两行是为了解决字符输入不正确的问题
        # 'resetKeyboard': 'True'   #运行完成后重置软键盘的状态
    }

    5、查找app定位元素

          启动Android SDK中的一个神器可以查找app的定位元素进行脚本的编写。在Android SDK中的tools中有一个uiautomatorviewer.bat,如下图所示:

         

          点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分别是打开本地文件、dump页面、dump压缩格式的页面、保存;启动后点击左上角第三个图标进行真机界面的呈现。

          

          第一次连接会比较慢,耐心等候一下,连接好后以后就快了。我这里以百度界面为例。

        

         这是连接真机后的界面显示。这样就可以根据id、class、text等定位元素进行定位了。

    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    driver.find_element_by_id("com.baidu.searchbox:id/baidu_searchbox").click()
    driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").clear()
    driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").send_keys('appium测试')
    
    driver.find_element_by_id("float_search_or_cancel").click()
    driver.find_element_by_id("floating_action_button").click()
    
    driver.quit()

    三.下方直接上完整代码,以我自己的app为例

    #coding:utf-8
    
    from appium import webdriver
    import time,os
    
    PATH = lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))
    
    #设备及安装包信息
    desired_caps = {
        'platformName': 'Android',
        'deviceName':'8TB6V4ZPZ54LPJ5P',
        'platformVersion': '5.1',
        'app': PATH(r'D:shell_customer-debug.apk'),
        'appPackage': 'com.jyibb.shell_customer',
        'appActivity': 'com.jyibb.module_launch_customer.SplashActivity',
        # 'unicodeKeyboard': 'True',
        # 'resetKeyboard': 'True'
    }
    
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    time.sleep(5)#等待时间可根据自己的情况进行添加
    
    driver.find_element_by_id("com.jyibb.shell_customer:id/layout_main_header_mine").click()
    time.sleep(5)
    
    driver.find_element_by_id("com.jyibb.shell_customer:id/login_phone_number_p").send_keys('15000000000')
    driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").click()
    driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").send_keys("111111q")
    
    time.sleep(5)
    driver.find_element_by_id("com.jyibb.shell_customer:id/bt_login_p").click()

          至此运行脚本即可进行自动化测试。

      

          

  • 相关阅读:
    SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
    SPOJ GSS3 Can you answer these queries III ——线段树
    SPOJ GSS2 Can you answer these queries II ——线段树
    SPOJ GSS1 Can you answer these queries I ——线段树
    BZOJ 2178 圆的面积并 ——Simpson积分
    SPOJ CIRU The area of the union of circles ——Simpson积分
    HDU 1724 Ellipse ——Simpson积分
    HDU 1071 The area ——微积分
    HDU 4609 3-idiots ——FFT
    BZOJ 2194 快速傅立叶之二 ——FFT
  • 原文地址:https://www.cnblogs.com/glumer/p/8487622.html
Copyright © 2020-2023  润新知