• 【App自动化测试】(三)使用Appium进行自动化用例录制



    前言
    本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘


    ⁉️ 提醒:
    appium-desktop 版本>1.22后,appium inspctor和appium-desktop 分离,需要单独下载安装并进行相关配置。

    appium-inspector 下载地址:https://github.com/appium/appium-inspector/releases

    appium-inspector 安装教程:https://blog.csdn.net/delia_1/article/details/122247259

    1. Appium Inspctor 功能

    1. UI 分析
    2. 录制用例
    3. 元素查找测试
    4. Attcah 已有的 session
    5. 云测试

    2. Appium inspector 页面结构

    在这里插入图片描述
    功能键说明(与图中标记序号匹配):

    1. Native App Mode:原生应用模式
    2. Web/Hybrid App Mode:网页/混合应用模式
    3. SelectElements:选中元素,查看层级和属性
    4. Swipe By Coordinates:通过坐标点滑动
    5. Tap By Coordinates:通过坐标点点击
    6. Back:返回
    7. Refresh Source & Screenshot:刷新页面
    8. StartRecording:开始录制脚本
    9. Search for element:搜索元素
    10. Quit Session & Close Inspector:退出当前 Session

    3. 使用Appium Inspctor 进行用例录制

    3.1 获取 app 的信息

    1. 两种方法获取app入口:
    • 方法一:通过 logcat 日志获取
    #mac/Linux:  
    adb logcat ActivityManager:I | grep "cmp"
    
    #Windows:
    adb logcat ActivityManager:I | findstr "cmp" 
    
    #先执行命令,后启动目标应用
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    示例1:Windows系统下获取Api Demos的app入口
    在这里插入图片描述

    • 方法二:通过 aapt 获取
    #mac/Linux: 
    aapt dump badging 安装包路径  | grep launchable-activity
    
    #Windows: 
    aapt dump badging 安装包路径  | findstr launchable-activity
    
    • 1
    • 2
    • 3
    • 4
    • 5

    示例2:Windows系统下查看 Api Demos的app入口
    在这里插入图片描述
    2. App启动应用命令:

    adb shell am start -W -n <package-name>/<activity-name> -S
    
    • 1

    3.2 配置待测应用

    在这里插入图片描述

    • platformName:平台,Android/iOS

    • deviceName:设备名

      • 使用命令 adb devices 可以获取到设备名称
        在这里插入图片描述
    • appPackage:应用的包名

    • appActivity:应用的页面名 Activity

    • noReset: 防止清空缓存信息

    3.3 使用Appium Inspector进行自动化脚本录制

    3.3.1 操作步骤

    在这里插入图片描述

    1. 下载官方 Demo apk(https://github.com/appium-boneyard/sample-code

    2. 安装 API Demo.apk

    3. 录制用例:

      1. 待测应用配置好后,使用Appium Inspector连接移动端设备
      2. 连接成功后,点击录制按钮(图中1标记的按钮)
      3. 在Appium Inspector中,选中 【OS】元素,点击Tap按钮,进行点击操作,进入下个界面
      4. 选中【Morse Code】元素,点击Tap按钮,进行点击操作,进入下一个界面
      5. 选中输入框,点击Send Keys按钮,输入内容【测试人】
      6. 点击Appium Inspector上的Back按钮,返回上一个页面
      7. 再进行返回上一个页面的操作
      8. 最后返回到app首页

    3.3.2 自动化测试用例结构分析

    3.3.2.1 Appium Inspector生成用例脚本
    el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="OS")
    el1.click()
    el2 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="Morse Code")
    el2.click()
    el3 = driver.find_element(by=AppiumBy.ID, value="io.appium.android.apis:id/text")
    el3.send_keys("测试人")
    driver.back()
    driver.back()
    driver.back()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3.3.2.2 对Appium Inspector生成用例脚本进行优化
    1. 添加 capability 信息
    2. 初始化webdriver,添加setupteardown
    3. 添加隐式等待和noReset属性增强用例稳定性
    4. 添加断言

    注意

    • selenium 版本建议 3.141.0
    • appium-python-client 版本建议 1.2.0
    3.3.2.3 完整代码
    from appium import webdriver
    from appium.webdriver.common.appiumby import AppiumBy
    
    class TestXueQiu:
        def setup(self):
            # 创建一个字典
            desire_cap = {}
            # 平台
            desire_cap['platform'] = 'Android'
            # 设备名
            desire_cap['deviceName'] = '127.0.0.1:7555'
            # app 包名
            desire_cap['appPackage'] = 'io.appium.android.apis'
            # app 页面名
            desire_cap['appActivity'] = '.ApiDemos'
            desire_cap['noReset'] = 'true'
            self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
            self.driver.implicitly_wait(10)
    
        def teardown(self):
            # 回收session
            self.driver.quit()
    
        def test_api_demo(self):
            """
            1、打开 API demo apk
            2、点击 OS 控件
            3、点击 Morse Code 控件
            4、在搜索框中输入 测试人
            5、返回到第一页
            6、断言
            :return:
            """
            # 点击 OS 控件
            self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"OS").click()
            # 点击 Morse Code 控件
            self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Morse Code").click()
            # 输入`测试人`
            el=self.driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/text")
            el.clear()
            el.send_keys("测试人")
            # 返回到app首页
            self.driver.back()
            self.driver.back()
    	self.driver.back()
            # 选择元素进行断言
            result = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Accessibility")
            print(result.text)
            # 断言
            assert result.text == "Accessibility"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    文末说明:
    接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?

    快来跟我一起看,一篇文章让你了解三者的区别。😎
    ⬇⬇⬇⬇⬇⬇⬇
    👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?

  • 相关阅读:
    手把手教你CSP系列之style-src
    算法刷题:P1025 [NOIP2001 提高组] 数的划分
    uni-app之android离线自定义基座
    【计算机视觉 | 目标检测】术语理解5:Split Shuffle Block、Group Shuffle Block 和复杂非结构化室内场景
    GCC Rust获批将被纳入主线代码库,或将于GCC 13中与大家见面
    【数据结构与算法】分治算法的介绍和汉诺塔程序实现
    mac支持的硬盘格式 什么硬盘格式是mac和win支持的
    Scala基础【HelloWorld代码解析,变量和标识符】
    华为被迫开源!从认知到落地SpringBoot企业级实战手册(完整版)
    【C++】使用ort推理yolov10
  • 原文地址:https://blog.csdn.net/gjj920318/article/details/127996223