当前位置:
首页 > Python基础教程 >
-
《自拍教程47》Python_adb重启设备100次
做Android手机/电视机/车载系统稳定性测试,
需要进行100次的系统重启,确保启动过程中,不出现卡死起不来,
或者起来后Home界面异常等情况。
还有涉及首次使用开机激活界面的测试,要确保每次系统重启,
只要设备没激活,就得每次都弹出激活界面。
准备阶段
- adb reboot 或者adb shell reboot 命令, 可以实现手机软重启
- adb wait-for-device可以实现等待,等待重启后的手机重新adb连接
- os.system可以调用以上 adb 命令行工具
-
100次,需要一个for循环语句。
Python批处理脚本形式
Python只需要用os.system()函数,
即可快速实现调用各类命令行命令。
# coding=utf-8
import os
for i in range(1, 101):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系统第%s轮软重启中...请稍候!" % i)
os.system("pause")
os.system("pause"),建议尽量加上,其含义是暂停程序执行,
等待用户查看脚本执行结果,避免运行完毕后直接自动关闭脚本执行cmd窗口。
Python面向过程函数形式
找到可以封装成一个函数块的小代码块儿, 用函数封装起来.
函数的命名一般建议用"动词", 所以我们命名为: "reboot",
封装好后, reboot()函数调用即可。
# coding=utf-8
import os
def reboot(): # 封装
for i in range(1, 101):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系统第%s轮软重启中...请稍候!" % i)
reboot() # 调用
os.system("pause")
以上是最简单的函数,即将代码块打个包,用一个函数封装起来。
另外一种形式如下:
# coding=utf-8
import os
def reboot(cycle): # 封装
for i in range(1, cycle + 1):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系统第%s轮软重启中...请稍候!" % i)
reboot(100) # 调用并传参
os.system("pause")
以上这种是更高端的,带参数输入的函数形式的函数,
其可以控制重启次数,想重启100次,直接传参100即可。
Python面向对象类形式
-
以"一切皆可归类"的思想, 先抽象化出一个类来,
类名一般建议用"名词", 所以我们命名为"Rebooter",
代表重启器, 且一般要驼峰式(首字母大写)来规范类的命名。 -
养成良好的类的初始化(__init__)的习惯,
初始化过程中, 可以pass(什么都不做)。 -
这个Rebooter类, 目前只需要一个重启的函数(动作功能)就足够了,
函数的命名一般建议用"动词", 所以我们命名为: "reboot" 。 -
类是一个抽象的事物, 必须实例化成具体的对象后,
才能进行调用, 所以我们实例化并命名成了r_obj, 表明是一个对象. - 实例化成具体对象后, 对象就可以调用reboot这个函数了。
# coding=utf-8
import os
class Rebooter():
def __init__(self):
pass
def reboot(self, cycle):
for i in range(1, cycle):
os.system("adb wait-for-device")
os.system("adb reboot")
print("系统第%s轮软重启中...请稍候!" % i)
r_obj = Rebooter() # 实例化一个对象
r_obj.reboot(100) # 用对象来调用函数。
os.system("pause")
代码运行方式
确保Android设备,通过USB与电脑连接了,
以上代码的3种实现形式都可以直接运行,
比如保存为adb_reboot_100.py并放在桌面,
每次需要截图的时候,双击运行adb_reboot_100.py,
就可以开始执行脚本了。
脚本优化方向
实际自动化测试中,肯定不止这么简单,还需要考虑:
- 设备找到后,要考虑用demsg命令截取系统启动的kernel log
- 系统起来后,还需要考虑adb logcat截取App层的log。
- 系统起来后,还需要考虑adb shell screencap截取Home界面的图片。
- 每一轮都需要命名一个文件夹,里边的log的命名都需要有时间戳等。
-
软重启是指通过命令实现重启,
硬重启是通过抠电池或者拔掉切断电源后再上电,实现断电后重启。
如何用Python实现硬重启呢? 后续课程会讲到。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式