软件测试/测试开发丨学习笔记之App自动化用例录制、结构分析

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:App自动化 用例录制、结构分析 L1 - 学习笔记 - 测试人社区

1、自动化用例录制

目录

Appium Inspctor 功能介绍

用例录制

获取 app 的信息

配置待测应用

验证是否启动成功:

Appium inspector 页面结构

功能键

示例

  1. 下载官方 Demo apk(https://github.com/appium/appium/tree/master/sample-code/apps)
  2. 安装 API Demo.apk

示例-录制用例

  1. 打开 API Demo 应用
  2. 点击 OS,进入下个界面
  3. 点击【Morse Code】
  4. 输入内容【ceshiren.com】
  5. 返回上一个页面
  6. 返回上一个页面
  7. 关闭应用

2、自动化测试用例结构分析

desktop 生成用例脚本

el1 = driver.find_element_by_accessibility_id("OS")
el1.click()
el2 = driver.find_element_by_accessibility_id("Morse Code")
el2.click()
el3 = driver.find_element_by_id("io.appium.android.apis:id/text")
el3.clear()
el3.send_keys("ceshiren.com")
driver.back()
driver.back()

用例脚本优化

完整代码

import time
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy


class TestXueQiu:
    def setup(self):
        desire_cap = {}
        # 平台
        desire_cap['platform'] = 'Android'
        # 设备名
        desire_cap['deviceName'] = 'emulator'
        # app 包名
        desire_cap['appPackage'] = 'io.appium.android.apis'
        # app 页面名
        desire_cap['appActivity'] = '.ApiDemos'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
        self.driver.implicitly_wait(10)

    def teardown(self):
        time.sleep(3)
        # 退出应用
        self.driver.quit()

    def test_api_demo(self):
        """
        1、打开 API demo apk
        2、点击 OS 控件
        3、点击 Morse Code 控件
        4、在搜索框中输入 ceshiren.com
        5、返回到第一页
        6、断言
        :return:
        """
        # 点击 OS 控件
        self.driver.find_element_by_accessibility_id("OS").click()
        # 点击 Morse Code 控件
        self.driver.find_element_by_accessibility_id("Morse Code").click()
        # 输入`ceshiren.com`
        self.driver.find_element_by_id("io.appium.android.apis:id/text").clear()
        self.driver.find_element_by_id("io.appium.android.apis:id/text").send_keys("ceshiren.com")
        # 返回第一页
        self.driver.back()
        self.driver.back()
        self.driver.back()
        # 选择元素进行断言
        result = self.driver.find_element(MobileBy.XPATH,"//*[@resource-id='android:id/text1'][1]")
        print(result.text)
        # 断言
        assert result.text == "Access'ibility"
# 导入 pip install appium-python-client
from appium import webdriver

# 创建一个字典,desirecapbility
caps = {}
caps["platformName"] = "Android"
# Android 包名和页面名,获取命令:
# mac/linux: adb logcat ActivityManager:I | grep "cmp"
# windows: adb logcat ActivityManager:I | findstr "cmp"
caps["appPackage"] = "io.appium.android.apis"
caps["appActivity"] = ".ApiDemos"
caps["deviceName"] = "emulator-5554"
# 创建driver ,与appium server建立连接,返回一个 session
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)

el1 = driver.find_element_by_accessibility_id("OS")
el1.click()
el2 = driver.find_element_by_accessibility_id("Morse Code")
el2.click()
el3 = driver.find_element_by_id("io.appium.android.apis:id/text")
el3.clear()
el3.send_keys("ceshiren.com")
driver.back()
# 返回
driver.back()
# 回收session
driver.quit()
# 导入 pip install appium-python-client
from time import sleep

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy


class TestAppDemo:
    def setup(self):
        # 创建一个字典,desirecapbility
        caps = {}
        caps["platformName"] = "Android"
        # Android 包名和页面名,获取命令:
        # mac/linux: adb logcat ActivityManager:I | grep "cmp"
        # windows: adb logcat ActivityManager:I | findstr "cmp"
        caps["appPackage"] = "io.appium.android.apis"
        caps["appActivity"] = ".ApiDemos"
        caps["deviceName"] = "emulator-5554"
        caps["noReset"] = "true"

        # 创建driver ,与appium server建立连接,返回一个 session
        # driver 变成self.driver 由局部变量变成实例变量,就可以在其它的方法中引用这个实例变量了
        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        self.driver.implicitly_wait(5)

    def teardown(self):
        # 回收session
        self.driver.quit()

    def test_input(self):
        # el1 = self.driver.find_element_by_accessibility_id("OS")
        el1 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "OS")
        el1.click()
        # el2 = self.driver.find_element_by_accessibility_id("Morse Code")
        el2 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Morse Code")
        el2.click()
        # el3 = self.driver.find_element_by_id("io.appium.android.apis:id/text")
        el3 = self.driver.find_element(AppiumBy.ID, "io.appium.android.apis:id/text")
        # 清除原有的内容
        el3.clear()
        el3.send_keys("ceshiren.com")
        el3.clear()
        # 手动制造关闭应用
        sleep(5)
        # 启动应用, 热启动,会进入到app 的首页
        self.driver.launch_app()
        result = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Accessibility").text
        # 断言
        assert result == "Accessibility"

3、capability 配置参数解析

目录

Capability 简介

Session

公共部分参数配置

描述

platformName

使用的手机操作系统

iOS,Android,或者 Firefox0S

platformVersion

手机操作系统的版本

例如 7.1, 4.4

deviceName

使用的手机或模拟器类型

iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等等…. 在 iOS 上,使用 Instruments的 instruments -s devices 命令可返回一个有效的设备的列表。在 Andorid 上虽然这个参数目前已被忽略,但仍然需要添加上该参数

automationName

使用哪个自动化引擎

android默认使用uiautomator2,ios默认使用XCUTest

noReset

在当前 session 下不会重置应用的状态。默认值为 false

true, false

udid

连接的真实设备的唯一设备编号 (Unique device identifier)

例如 1ae203187fc012g

Android 部分特有参数配置

描述

appActivity

Activity 的名字是指从你的包中所要启动的 Android acticity。他通常需要再前面添加. (例如 使用 .MainActivity 代替 MainActivity)

MainActivity, .Settings

appPackage

运行的 Android 应用的包名

com.example.android.myApp, com.android.settings

appWaitActivity

用于等待启动的 Android Activity 名称

SplashActivity

unicodeKeyboard

启用 Unicode 输入,默认为 false

true or false

resetKeyboard


true or false

dontStopAppOnReset

首次启动的时候,不停止 app

true or false

skipDeviceInitialization

跳过安装,权限设置等操作

true or false

iOS 独有

描述

bundleId

被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。

例如 io.appium.TestApp

autoAcceptAlerts

当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择接受( Accept )。默认值 false

true 或者 false

showIOSLog

是否在 appium 日志中显示从设备捕获的任何日志。默认 false

true or false

Desire capability 参数示例

{
  "platformName": "android",
  "deviceName": "emulator-5554",
  "appPackage": "io.appium.android.apis",
  "appActivity": ".ApiDemos"
}

配置优化

{
  "noReset": "true", // 不清空缓存信息
  "dontStopAppOnReset": "true", // 首次启动的时候,不停止app
  "skipDeviceInitialization": "true", // 跳过安装,权限设置等操作
  "unicodeKeyBoard": "true" // 输入中文
}

4、app 自动化控制

目录

启动

# 方式一:
self.driver = webdriver.Remote
("http://127.0.0.1:4723/wd/hub", desire_cap)

# 方式二:
self.driver.launch_app()

数据清理

self.driver.find_element_by_accessibility_id('SomeAccessibilityID').clear()

关闭

self.driver.quit()
展开阅读全文

页面更新:2024-05-01

标签:测试   断言   示例   控件   元素   命令   参数   结构   页面   方式   设备   软件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top