1、自动化用例录制
目录
- Appium Inspctor 功能介绍
- Appium Inspctor 用法介绍
Appium Inspctor 功能介绍
- UI 分析
- 录制用例
- 元素查找测试
- Attcah 已有的 session
- 云测试
用例录制
- 获取 app 的信息
- 配置待测应用
获取 app 的信息
-
app 入口,两种方式获取:
-
1、通过 logcat 日志获取
- Mac/Linux:
adb logcat ActivityManager:I | grep “cmp"
- Windows:
adb logcat ActivityManager:I | findstr "cmp"
- Mac/Linux:
-
2、通过 aapt 获取
- Mac/Linux:
aapt dump badging wework.apk | grep launchable-activity
- Windows:
aapt dump badging wework.apk | findstr launchable-activity
- Mac/Linux:
-
-
启动应用命令
adb shell am start -W -n <package-name>/<activity-name> -S
配置待测应用
platformName
:平台,Android/iOSdeviceName
:设备名appPackage
:应用的包名appActivity
:应用的页面名 ActivitynoReset
: 防止清空缓存信息
验证是否启动成功:
Appium inspector 页面结构
功能键
SelectElements
:选中元素,查看层级和属性Swipe By Coordinates
:通过坐标点滑动Tap By Coordinates
:通过坐标点点击Back
:返回Refresh Source & Screenshot
:刷新页面StartRecording
:开始录制脚本Search for element
:搜索元素Copy XML Source to Clipboard
:复制 xml 结构Quit Session & Close Inspector
:退出当前 Session
示例
- 下载官方 Demo apk(github.com/appium/appi…
- 安装 API Demo.apk
示例-录制用例
- 打开 API Demo 应用
- 点击 OS,进入下个界面
- 点击【Morse Code】
- 输入内容【ceshiren.com】
- 返回上一个页面
- 返回上一个页面
- 关闭应用
2、自动化测试用例结构分析
desktop 生成用例脚本
el1
:点击OS
,进入下一个页面- 调用点击方法
el2
:点击Morse Code
- 调用
sendkeys
方法,输入ceshiren.com
- 返回
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()
用例脚本优化
-
添加 capability 信息
-
初始化
webdriver
,添加setup
和teardown
-
添加隐式等待和
noReset
属性增强用例稳定性 -
添加断言
-
注意
- selenium 版本建议 3.141.0
- appium-python-client 版本建议 1.2.0
完整代码
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 含义
- capability 参数介绍
Capability 简介
-
功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序
-
形式:键值对的集合,键对应设置的名称,值对应设置的值
-
主要分为三部分
- 公共部分
- ios 部分
- android 部分
Session
- Appium 的客户端和服务端之间进行通信的前提
- 通过
Desired Capabilities
建立会话
公共部分参数配置
Android 部分特有参数配置
iOS 独有
Desire capability 参数示例
- API Demo 启动页配置
{
"platformName": "android",
"deviceName": "emulator-5554",
"appPackage": "io.appium.android.apis",
"appActivity": ".ApiDemos"
}
配置优化
- 添加参数,提高用例的稳定性
{
"noReset": "true", // 不清空缓存信息
"dontStopAppOnReset": "true", // 首次启动的时候,不停止app
"skipDeviceInitialization": "true", // 跳过安装,权限设置等操作
"unicodeKeyBoard": "true" // 输入中文
}
4、app 自动化控制
目录
- 启动
- 数据清理
- 关闭
启动
- 启动应用
- 方式一:
webdriver.remote("url",desirecapability)
- 方式二:
launch_app()
将应用启动起来
# 方式一:
self.driver = webdriver.Remote\
("http://127.0.0.1:4723/wd/hub", desire_cap)
# 方式二:
self.driver.launch_app()
数据清理
-
清空输入框内容
clear()
self.driver.find_element_by_accessibility_id('SomeAccessibilityID').clear()
关闭
-
退出app
quit()
self.driver.quit()
最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】
全套资料获取方式:点击下方小卡片自行领取即可