|
基于Python的Android自动化测试脚本
由于工作需要,需要完成很多大量的重复工作去测试软件的性能问题,例如这次完成的人脸识别的优化,
为了测试效率和内存使用情况,需要不停的重复添加,选择,输入姓名,点击注册等等操作,虽然无脑,
但是做多了让人很头疼的。所以我写了下面这个脚本。
需求
首先我们需要明确下需求目标,我们的需求很简单,就是使用python脚本完成需要我们自己完成的很多
重复的操作,即便中间存在一定的重复操作之外,但是整体操作是完全重复和符合规则的。
设计思路
我的设计思路很简单,就是用Python使用 ADB 命令,模拟人为的点击输入等操作。
流程
1.进入主界面后,点击添加按钮
2.进入图片选择界面后判断是否要向下滑动
3.如果需要滑动 则滑动一定距离后再判断
4.顺序点击需要注册的图片
5.如果检测到有人脸,会弹出弹窗,则输入用户名,点击注册
6.如果未检测到人脸,点击重新选择按钮,重复操作。
实现
- import os
- import time
- count_select = 0
- count_swipe = 0
- # 点击事件
- def click(x, y):
- cmd = "adb shell input tap {x1} {y1}".format(
- x1=x,
- y1=y
- )
- os.system(cmd)
- # 添加点击事件 只在主界面时点击添加按钮进行人脸添加
- def click_add():
- click(1218, 30)
- time.sleep(1)
- swipe()
- # 确认按钮添加,即在识别到人脸后,进行的操作
- def click_ok():
- click(400, 640)
- # 睡眠2秒 防止添加人脸时进行比对的人脸过多导致的延迟等
- time.sleep(2)
- main()
- # 点击重新注册
- def click_re():
- click(1152, 785)
- time.sleep(1) # 等待一秒使图片加载完成
- swipe()
- # 输入用户名
- def input_name():
- os.system("adb shell input text 1")
- click_ok()
- # 点击相册中对应的图片进行注册操作
- def click_register():
- global count_swipe
- global count_select
- if count_select == 0: # 第一个
- count_select = count_select + 1
- click(160, 150)
- elif count_select == 1:
- count_select = count_select + 1
- click(500, 150)
- elif count_select == 2:
- count_select = count_select + 1
- click(810, 150)
- elif count_select == 3:
- count_select = count_select + 1
- click(1125, 150)
- elif count_select == 4:
- count_select = count_select + 1
- click(160, 475)
- elif count_select == 5:
- count_select = count_select + 1
- click(500, 475)
- elif count_select == 6:
- count_select = count_select + 1
- click(810, 475)
- elif count_select == 7:
- count_select = count_select + 1
- click(1125, 475)
- elif count_select == 8:
- count_select = 0
- count_swipe = count_swipe + 1
- # 一屏幕结束,进行下一次循环操作
- swipe()
- if count_select != 0:
- screen_xml()
- # 滑动屏幕 根据屏幕数判断需要滑动的次数
- def swipe():
- count_swipe_finish = count_swipe
- if count_swipe_finish > 0:
- for i in range(0, count_swipe_finish): # 循环滑动
- os.system("adb shell input swipe 100 410 100 5")
- click_register()
- # 获取当前名目的所有控件布局 并写入到xml文件中
- def screen_xml():
- os.system("adb shell uiautomator dump /sdcard/ui.xml")
- time.sleep(3)
- read_xml()
- # 读取xml文件,判断是否存在"重新选择"的按钮,如果不存在 则表明有人脸
- def read_xml():
- os.system("adb pull /sdcard/ui.xml .")
- f = open("./ui.xml", "r", encoding="UTF-8")
- s = f.read()
- if s.find("id/res_tv_to_gallery") == -1:
- print("有人脸")
- input_name()
- else:
- print("无人脸")
- click_re()
- def main():
- click_add()
- main()
复制代码
|
|