测试铁晔 发表于 2018-5-21 16:15:39

基于Python的Android自动化测试脚本

基于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()





海海豚 发表于 2018-5-21 17:37:42

谢谢分享~

sspku@1101 发表于 2018-5-30 13:24:30

用像素定位能准确么
页: [1]
查看完整版本: 基于Python的Android自动化测试脚本