栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Appium+Python+Unittests框架 实现设备通过APP进行自动化OTA升级操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Appium+Python+Unittests框架 实现设备通过APP进行自动化OTA升级操作

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号