Hi,各位前辈,通过Appium+Python+Unittests框架 实现简单的自动化操作,第一次进行操作,内容有待完善,欢迎各位提出宝贵建议,让我们共同学习!
环境配置:
python + pycharm;
appium;
JavaJDK;
adb;
android-sdk;
测试APP:派健康;
测试手机:Redmi K20 Pro;
1.获取设备信息,Appium与手机连接,并打开指定APP
def setUp(self) -> None:
self.desired_caps = {
# 被测手机的系统
"platformName": "Android",
# 被测手机的版本号
"platformVersion": "11",
# 被测手机名称
"deviceName": "Redmi_K20_Pro",
# 指定被测软件包名
"appPackage": "com.lstech.rehealth",
# 指定要打开的APP页面是哪一个
"appActivity": ".mainpage.MainPageActivity",
"automationName": "Uiautomator2",
# 设置apk的重置策略(noReset--不停止应用程序,不清除应用数据,不卸载apk)
"noReset": True,
# 设置命令的超时时间
"newCommandTimeout": 600000,
# 设置用于中文输入,appium默认不支持中文输入
"unicodeKeyboard": True,
"resetKeyboard": True,
}
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
2.通过APP进行自动化OTA升级操作(正常升级):
通过正常流程进行OTA升级,并验证每次升级是否成功。
def test_OTA_RP(self):
##开始进行OTA操作
self.Demo_01() #调用函数
#判断设备是否正常连接
try:
self.driver.find_element('xpath', '//*[@text="连接设备"]')
except NoSuchElementException:
print('正常连接')
time.sleep(3)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击 固件版本
time.sleep(3)
# 重复升级次数
b = 10
print("重复升级次数(正常升级):", b)
a = 0
while a < b:
time.sleep(1)
WebDriverWait(self.driver, 60, 1).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="立即升级"]')) # 点击立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click()
time.sleep(1)
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
a = a + 1;
print("第", a, "次升级")
else:
print('升级完成')
else:
print("断开连接")
3.通过APP进行自动化OTA升级操作(开关蓝牙):
当点击完升级后,把手机蓝牙关闭,并再次打开,来验证设备是否能够正常升级
def test_OTA_BT(self):
# ##开始进行OTA操作
self.Demo_01() #调用函数
time.sleep(3)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击 固件版本
time.sleep(3)
# 重复升级次数
b = 10
print("重复升级次数(断蓝牙升级 ):", b)
a = 0
while a < b:
time.sleep(1)
WebDriverWait(self.driver, 60, 1).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="立即升级"]')) # 点击立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click() # 点击立即升级
time.sleep(1)
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
time.sleep(2)
self.driver.swipe(574, 16, 574, 531) # 下拉出蓝牙框
self.driver.find_element('id', 'com.android.systemui:id/big_tile_1').click() # 关闭蓝牙
time.sleep(1)
self.driver.find_element('id', 'com.android.systemui:id/big_tile_1').click() # 打开蓝牙
self.driver.swipe(521, 2127, 521, 1813) # 回到派健康页面
time.sleep(2)
self.driver.find_element('xpath',
'//android.widget.TextView[@bounds="[0,96][172,240]"]').click() # 点击OTA页面 左上角 返回按钮
# 判断设备是否连接
try:
# 显示等待30s,每0.5秒检查一次
WebDriverWait(self.driver, 30, 0.5).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="连接设备"]')) # 检查设备是否连接正常
except NoSuchElementException:
print("连接成功")
else:
self.driver.find_element('xpath', '//*[@text="连接设备"]').click() # 点击连接设备
try:
# 显示等待10s,每0.5秒检查一次
time.sleep(0.5)
WebDriverWait(self.driver, 10, 0.5).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="去跳绳"]')) # 判断点击 连接设备后 设备是否恢复连接
except NoSuchElementException:
time.sleep(1)
self.driver.find_element('xpath', '//*[@text="连接设备"]').click() # 点击连接设备
time.sleep(2)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击固件版本
time.sleep(2)
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click() # 点击 立即升级
time.sleep(1)
# driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
try:
# 显示等待10s,每0.5秒检查一次
time.sleep(0.5)
WebDriverWait(self.driver, 5, 0.5).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="设备升级中,请勿充电"]'))
except NoSuchElementException:
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click() # 点击 立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
else:
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
else:
time.sleep(1.5)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击固件版本
time.sleep(2)
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click() # 点击 立即升级
try:
# 显示等待10s,每0.5秒检查一次
time.sleep(0.5)
WebDriverWait(self.driver, 5, 0.5).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="设备升级中,请勿充电"]'))
except NoSuchElementException:
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click() # 点击 立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
else:
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
a = a + 1;
print("第", a, "次升级")
else:
print('升级完成')
4.通过APP进行自动化OTA升级操作(杀进程升级):
当点击完升级后,把APP进程杀掉,并再次打开,来验证设备是否能够正常升级
def test_OTA_Close(self):
##开始进行OTA操作
self.Demo_01() #调用函数
#判断是否正常连接
try:
self.driver.find_element('xpath', '//*[@text="连接设备"]')
except NoSuchElementException:
print('杀进程升级')
time.sleep(3)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击 固件版本
time.sleep(3)
# 重复升级次数
b = 10
print("重复升级次数(杀进程升级):", b)
a = 0
while a < b:
time.sleep(1)
WebDriverWait(self.driver, 60, 1).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="立即升级"]')) # 点击立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click()
time.sleep(1)
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
time.sleep(6)
###杀进程
self.driver.quit()
# 重新打开APP
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)
#杀进程后,重新选择需要进行OTA的设备
self.Demo_01()
try:
self.driver.find_element('xpath', '//*[@text="连接设备"]')
except NoSuchElementException:
time.sleep(3)
self.driver.find_element('id', 'com.lstech.rehealth:id/rom_version_layout').click() # 点击 固件版本
time.sleep(1.5)
WebDriverWait(self.driver, 60, 1).until(
lambda diver: self.driver.find_element('xpath', '//*[@text="立即升级"]')) # 点击立即升级
self.driver.find_element('id', 'com.lstech.rehealth:id/fota_btn').click()
time.sleep(1)
self.driver.find_element('id', 'com.lstech.rehealth:id/lib_alertdialog_button1').click() # 点击 ‘确定’
a = a + 1;
print("第", a, "次升级")
else:
print('升级完成')
else:
print("断开连接")
5.封装的简单函数
def Demo_01(self):
##开始进行OTA操作
self.driver.find_element('id', 'com.lstech.rehealth:id/ll_bottom_me').click() # 点击 我 的页面
self.driver.swipe(683, 798, 683, 1330) # 下拉 我的设备
time.sleep(1)
self.driver.find_element('id', 'com.lstech.rehealth:id/device_image').click() # 点击需要进行OTA的设备 (需 判断设备是否正常连接)
6.通过HTMLTestRunner生成测试报告
import os
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
test_dir = 'T40L'
discover = unittest.defaultTestLoader.discover(start_dir='T40L', pattern="OTA_New.py")
if __name__ == "__main__":
report_dir = './test_report'
os.makedirs(report_dir, exist_ok=True)
now = time.strftime("%Y-%m-%d %H-%M-%S")
report_name = '{0}/{1}.html'.format(report_dir, now)
with open(report_name, 'wb')as f:
runner = HTMLTestRunner(stream=f, title="测试报告", description="本次测试内容包含--跳绳设备通过 派健康APP 进行OTA升级操作[包含:正常升级,开关蓝牙升级,杀进程升级]")
runner.run(discover)



