移动测试-Appium

移动测试

1.概念

1.定义:测试手机程序。

2.测试方面

  • 功能测试:查看功能是否正常。
  • 安装卸载测试
  • 升级测试
  • 兼容性测试:Android系统版本、厂商二次开发版本、不同的分辨率、不同的网络。
  • 网络切换、中断测试
  • 使用中来电、短信
  • 横竖屏切换
  • 健壮性:耗电量、流量消耗、崩溃恢复。

2. ADB

1.定义:Android Debug Bridge,既包含ADB服务,也包含与服务对应的Client。

2.作用:通过命令行去操作手机。

adb shell dumpsys window windows | findstr mFocusedApp

3.入门案例:等待5秒后关闭系统设置界面

步骤:打开模拟器系统设置页面 -> 启动appium -> 运行 demo01.py

from appium import webdriver
import time
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
desired_caps["platformVersion"] = "7.1"
# adb shell dumpsys window windows | findstr mFocusedApp
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
time.sleep(5)
# 关闭app
driver.close_app()
# 释放资源
driver.quit()

3.操作

基础API

①driver:

close_app()# 关闭打开的应用
quit()# 断开连接
install_app('apk在电脑上的绝对路径')# 安装应用
remove_app('应用的包名')# 卸载应用
is_app_installed('应用的包名')# 判断应用是否安装
push_file(目标位置,base64编码内容)
pull_file(来源位置)# 返回值是base64编码内容
page_source# 获取界面xml源码
find_element/find_elements
current_package# 获取当前操作的应用的包名
current_activity# 获取当前操作的界面的名称

②element:

text# 获取元素文本内容
click()# 点击元素对应位置
get_attribute(属性名称)# 获取属性值
location# 获取元素左上角的坐标(相对于屏幕左上角)
size# 获取元素的宽高(返回字典类型)
元素定位

Android SDK提供工具

可用于查找页面控件和鼠标位置。

from appium import webdriver
import time
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
# adb devices
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
# adb shell getprop ro.build.version.release
desired_caps["platformVersion"] = "7.1"
# adb shell dumpsys window windows | findstr mFocusedApp
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
# print(driver.page_source) 打印该页面所有资源
# 点击文本属性为显示的元素(注意:不是文本)
driver.find_element_by_xpath("//*[@text='显示']").click()
time.sleep(3)
# 关闭app
driver.close_app()
# 释放资源
driver.quit()
输入文本
send_keys("文本内容")
# 新版本不需要输入以下内容,可直接支持中文。若不支持时,可以在连接设备时加上以下配置
desired_caps['unicodeKeyboard'] = True# unicode设置
desired_caps['resetKeyboard'] = True# 键盘设置

clear()# 清除文本内容
from appium import webdriver
import time
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
# adb devices
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
# adb shell getprop ro.build.version.release
desired_caps["platformVersion"] = "7.1"
# adb shell dumpsys window windows | findstr mFocusedApp
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
time.sleep(1)

# 点击搜索框
driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/search']").click()
time.sleep(1)
driver.find_element_by_xpath("//*[@resource-id='android:id/search_src_text']").send_keys("abc")

# 关闭app
driver.close_app()
# 释放资源
driver.quit()
模拟手势

滑动

swipe(self, start_x: int, start_y: int, end_x: int, end_y: int, duration: int = 0)

duration默认600毫秒。滑动存在“惯性”,会根据按下、抬起位置及总时间,滚动不一样的距离。

滚动

scroll(origin_el,destination_el,duration)

不需要手动获取位置,直接传递元素。手机的分辨率不会造成影响。

from appium import webdriver
import time
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
# adb devices
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
# adb shell getprop ro.build.version.release
desired_caps["platformVersion"] = "7.1"
# adb shell dumpsys window windows | findstr mFocusedApp
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
time.sleep(1)
# 滑动 driver.swipe(270, 640, 270, 320)
# 滚动
el1 = driver.find_element_by_xpath("//*[@text='通知']")
el2 = driver.find_element_by_xpath("//*[@text='WLAN']")
driver.scroll(el1, el2)
time.sleep(1)
# 关闭app
driver.close_app()
# 释放资源
driver.quit()

拖拽

按下 -> 等待一定时间 -> 移动 -> 松手

drag_and_drop(origin_el,destination_el)

TouchAction

比较复杂的、连续的触摸行为,如图案解锁屏幕。

创建TouchAction对象,传递driver参数 -> 添加动作 -> 执行操作perform()

press(self,el,x,y,pressure)# 按下,el和xy必须传递其中之一,pressure是ios专用
long_press(self,el,x,y,duration=1000)
move_to(self,el,x,y)# 移动
wait(self,ms)# 等待
release()# 松手
tap(self,el,x,y,count = 1)#轻敲/点击,count=2可以模拟双击

TouchAction 模拟滑动

from appium import webdriver
import time
from appium.webdriver.common.touch_action import TouchAction
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
# adb devices
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
# adb shell getprop ro.build.version.release
desired_caps["platformVersion"] = "7.1"
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
time.sleep(1)

# 实例化TouchAction 此处wait必不可少,wait(0)是使用默认600毫秒
action = TouchAction(driver)
action.press(driver.find_element_by_xpath("//*[@text='通知']")).wait(500).move_to(driver.find_element_by_xpath("//*[@text='WLAN']"))
action.release()
# 执行
action.perform()
time.sleep(1)

# 关闭app
driver.close_app()
# 释放资源
driver.quit()

设置解锁图案Z

# 滑动绘制解锁图案
from appium import webdriver
import time
from appium.webdriver.common.touch_action import TouchAction
# 连接移动设备所需参数
desired_caps = {}
# 当前要测试的设备名称
# adb devices
desired_caps["deviceName"] = "127.0.0.1:62001"
# 系统
desired_caps["platformName"] = "Android"
# 系统版本
# adb shell getprop ro.build.version.release
desired_caps["platformVersion"] = "7.1"
# adb shell dumpsys window windows | findstr mFocusedApp
# 要启动的app的名称(唯一标识:包名)
desired_caps["appPackage"] = "com.android.settings"
# 要启动的app的哪个界面
desired_caps["appActivity"] = ".Settings"
# 连接手机
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)
time.sleep(1)

# 滑动界面到可以看到安全栏
action = TouchAction(driver)
action.press(driver.find_element_by_xpath("//*[@text='声音']")).wait(500)
action.move_to(driver.find_element_by_xpath("//*[@text='WLAN']"))
action.release()
action.perform()
time.sleep(1)
# 点击安全栏
driver.find_element_by_xpath("//*[@text='安全']").click()
time.sleep(1)
# 点击屏幕锁定栏
driver.find_element_by_xpath("//*[@text='屏幕锁定']").click()
time.sleep(1)
# 点击图案栏
driver.find_element_by_xpath("//*[@text='图案']").click()
time.sleep(1)

# 绘制解锁图案Z
action.press(x=105, y=450).wait(200)
action.move_to(x=270, y=450).wait(200)
action.move_to(x=435, y=450).wait(200)
action.move_to(x=270, y=615).wait(200)
action.move_to(x=105, y=780).wait(200)
action.move_to(x=270, y=780).wait(200)
action.move_to(x=435, y=780).wait(200)
action.release()
action.perform()

# 关闭app
driver.close_app()
# 释放资源
driver.quit()
driver的其他操作
.device_time# 获取手机时间
.get_window_size()# 获取屏幕大小
.network_connection# 获取手机网络信息 1飞行模式 2wifi 4移动数据 6=2+4
.set_network_connection(数字)# 设置手机网络信息
.keyevent(按键数字)# 点击按键
.get_screenshot_as_file/save_screenshot(图片路径)# 截屏
.open_notifications()# 打开通知栏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python-Appium自动化测试是一种基于Python语言和Appium框架的自动化测试方法,用于测试移动应用程序的功能和性能。它可以模拟用户在移动设备上的操作,如点击、滑动、输入等,以验证应用程序的正确性和稳定性。同时,Python-Appium自动化测试还可以生成测试报告和日志,帮助开发人员快速定位和解决问题。 ### 回答2: Python-Appium自动化测试是使用Python开发语言与Appium工具结合实现的一种移动应用自动化测试方法。Appium是一个跨平台的开源自动化测试框架,可用于Android和iOS应用测试,同时它也支持多种编程语言,其中包括Python。Python作为一种易学易用的脚本语言,对于自动化测试方面来说,有着很好的应用场景。 Appium的优势在于它实现了"一次编写,随处运行"的理念,即一套测试脚本可以同时运行在Android、iOS甚至是Windows平台的设备上,提高了测试效率和覆盖率,同时也减轻了测试人员的工作量。此外,Appium还具有很好的可扩展性和兼容性,可以支持多种测试框架的集成。 在Python-Appium自动化测试中,主要需要掌握Appium的API接口,通过Python脚本实现对应用的UI元素进行定位、控制、操作和验证等测试动作。通过使用Python编写测试用例,可以在测试过程中调用Appium的API接口,实现自动化测试,进而提高效率,减少测试成本。 总结起来,Python-Appium自动化测试是一项非常有意义和优越性的技能,能够帮助测试人员更加高效地完成移动应用自动化测试任务,更好地提升开发效率和质量。然而,在学习和应用Python-Appium自动化测试技术时,也需要充分考虑到应用的安全性和稳定性,以确保测试结果的准确性和可信度。 ### 回答3: Python-Appium自动化测试是使用Python编程语言和Appium测试框架来进行自动化测试的一种方法。Appium是一个开源的跨平台的移动应用自动化测试框架,可以实现在不同的移动操作系统(如iOS和Android)上进行测试。而Python是一个简单易学的编程语言,也是非常流行的测试工具之一。因此,使用Python-Appium自动化测试是一种非常强大且易于操作的自动化测试方法。 Python-Appium自动化测试的主要优势在于它可以提高测试效率和精度。由于测试人员不需要手动执行测试,他们可以通过编写测试脚本来自动执行测试。这些脚本可以被重复使用,可以快速地测试不同的场景,并且可以在不同的设备和操作系统上进行测试。 另外,Python-Appium自动化测试还可以提高测试的精度。因为这种自动化测试方法是由计算机执行的,所以它不会因为人为疏忽或者错误而产生测试错误。它可以帮助测试人员减少任何可能的误差,并且可以帮助他们快速识别出与应用程序相关的问题,从而更快地修复这些问题。 总的来说,在Python-Appium自动化测试方面有很多的应用场景,它可以帮助测试人员和开发者快速且准确地识别出与应用程序相关的问题,从而帮助他们更快地修复这些问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值