title: adb基本命令+appium
tags:

  • adb
  • android
  • appium
    categories:
  • 软件测试
    abbrlink: 4701
    date: 2020-03-30 10:49:04

adb and appium

本文主要介绍了adb常用命令,adb monkey测试常用指令用法,appium指令版与桌面版安装方法

appium利用图像识别进行测试的方法,后续补充

电脑重装了,重新整理了相关知识和安装措施

  1. 安装java并配置环境,不赘述,没有java玩个鸟

  2. 安装SDK,然后将SDK文件夹配置环境变量里(不直接添加到PATH里,而是直接添加字段 ANDROID_HOME)

  3. 在PATH里配置

    %ANDROID_HOME%\tools;

    %ANDROID_HOME%\platform-tools;

    %ANDROID_HOME%\build-tools\29.0.x;(具体看文件夹名字)

    (也可以直接将这三个文件夹搞到PATH里,花里胡哨的)

  4. 打开SDK Manage下载你需要的东东,注意,如果platforms-tools里没有东西,需要将SDK Tools删掉,然后千万不要关闭界面,左上角TAG选中obsolete显示出Tools,重新下载

  5. 将platform-tools里的adb复制替换模拟器的adb

  6. adb connect host:port -> adb devices abd不是外部或内部的话,环境变量没配对(模拟器打开)

  7. 直接安装桌面版(命令行版需要安装Node.js,具体措施见下方)

  8. appium会自动扫描到SDK和JAVA文件夹,没有的话手动Configure给配一个

如何查看abd要连接的地址和端口

在MEMU安装目录中搜索MEmu.memu-prev文件,找到NAT段,即为MEMU的adb连接地址

Appium进行类似于UIautomotor的页面定位测试(后补)

adb常用命令

command description
adb devices 显示连接的安卓设备
adb install -r path+xxx.apk 当前连接的(单个)设备安装apk
adb -s 127.x install -r xxx.apk 多个设备时指定设备安装apk
aapt dump badging path+apk 显示apk详细信息(包名,类名)
abd unistall package_name 卸载app
adb push xx.txt /shell_path/ 向android指定路径上传文件
adb pull filename /shell_path/ 从安卓设备获取文件
adb shell 进入shell模式,命令基本与Linux相同
adb shell am start -n package/class_name 运行app
adb kill/start -server 关闭/开启adb服务
adb connect 127.x+端口 与指定设备建立连接
adb disconnect/adb reboot 断开/重启设备

注意:包含path的路径出现找不到文件的原因主要有两种:

文件路径过长与文件路径中包含中文

adb forward tcp:8000 tcp:9000 PC端把8000端口的数据发到Android端的9000端口上

adb monkey测试

command description
adb shell monkey 233 执行搞怪测试233步
adb shell monkey –throttle 200 300 执行搞怪测试300步,间隔200ms
adb shell monkey -p package_name 对某个软件进行搞怪测试
adb shell monkey -s uint 233 seed种子标识
-v -v -v 显示详细等级,0~3
adb shell pm list package [-e] [“search”] 显示所有安装的包【包含字符串查找】
adb shell dumpsys window | findstr mCurrentFocus 获取当前打开的app包名

ep:adb shell monkey -p com.mobivans.onestrokecharge --throttle 100 233

对某个软件进行搞怪测试,间隔100ms,执行233步

adb shell monkey -v -v -v -p com.mobivans.onestrokecharge -s 999 --throttle 100 233

对某个软件进行测试,间隔100ms,执行233步,seed为999,三级显示等级

  • –ignore-timeouts ,忽略超时错误
  • –ignore-crashes ,忽略crash
  • –ignore-security-exceptions 忽略许可错误
  • –monitor-native-crashes,用于指定是否监视并报告应用程序发生崩溃的本地代码
  • –pct-touch ,触摸事件

重定向到电脑(日志) adb shell monkey -p package_name -v -v -v 200 > D:/xx/aa.log

异常信息

ANR application not response 应用程序不响应

命令行安装Appium

1、桌面版

1)直接下载运行安装文件

​ 下载地址:https://github.com/appium/appium-desktop/releases/

​ 内嵌了appium server和inspector(分析界面)工具的综合工具

2)安装Appium-Python-Client

​ pip install Appium-Python-Client

3)安装配置android sdk

​ 理论上这个不是必须的,如果你不想使用 Android 模拟器运行测试的话可以跳过,不过,建议安装;它自带的一些工具是你做 appium 测试必须要 用

2、cmd版

1)安装node

​ 下载地址https://nodejs.org/en/

​ 验证node –v和npm –v

2)安装appium(需要等待较长时间,耐心等待即可)

npm install -g** appium@1.8.1 **--registry=**https://registry.npm.taobao.org

查看appium版本:appium –v

3)安装appium-doctor:

npm install -g** appium-doctor **--registry=**https://registry.npm.taobao.org

4)检查appium是否安装成功:appium-doctor

5)启动appium服务:appium

6)停止appium服务:ctrl+c,输入y回车即可。

注:为appium服务重新指定ip和端口:appium -a 127.0.0.1 -p 4725

Appium定位

根据id

driver,find_element_by_id(\'xxx\') -> resource_id

Class_name

android里的class_name类似于web页面的tagname ,通常不是唯一的

driver.find_elements_by_class_name(\'android.widget.TextView\')

Accessibility_id

content-desc描述页面元素 -> driver.find_element_by_accessibility_id(\'文本\')

XPATH

与web端类似。但注意web端通过浏览器定位,XPATH一般是唯一的,但是app测试时通过相关软件生成的XPATH可能存在重复定位

xpath表达式中每个节点名是元素的class属性值 ep://android.widget.LinearLayout[@resource-id=\'com.mobivans\']

触点,滑动以及键盘输入 以及其他

driver.tap([(850,1080)],300)
# 五个坐标手指头,300ms
driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=800)
# 滑动
from appium.webdriver.extensions.android.nativekey import AndroidKey
# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)
from appium.webdriver.common.touch_action import TouchAction
# TouchAction -> ActionChain
actions = TouchAction(driver)
actions.long_press(element)
actions.perform()
# 打开通知栏
driver.open_notifications()

一个简单的例子(手动操作与定位)

from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
width,height = driver.get_window_size()[\'width\',\'height\']
action1,action2 = TouchAction(driver),TouchAction(driver)
zoom_action = MultiAction(driver)

Appium部分后续用到了再补充

Appium利用openCV进行测试

from appium import webdriver
import cv2,time,os
class App_test():
    def __init__(self):
        desired_caps {
            \'platformName\':\'Android\',
            \'platformVersion\':\'7.1.1\',
            \'deviceName\':\'P40\',
            \'appPackage\':\'com.movivans.onesrrokecharge\',
            \'appActivity\':\'com.stub.stub01.Stub01\'
        }
        self.driver = webdriver.Remote(\'http://127.0.0.1:4723/wd/hub\', desired_caps)
        time.sleep(1)
    def find_image(self,target):
        image_path = os.path.dirname(os.path.abspath(\'.\')) + r\'/source\'
        screen_path = os.path.dirname(os.path.abspath(\'.\')) + r\'/screen/screen.png\'
        self.driver.get_screenshot_as_file(screen_path)
        screen = cv2.imread(screen_path)
        template = cv2.imread(os.path.join(image_path,target))
        result = cv2.matchTemplate(screen,template,cv2_TM_CCORR_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
        if max_val < simiarity:
            return -1,-1
        y = max_lc[1] + int(template.shape[0]//2) 
        x = max_lc[0] + int(template.shape[1]//2)
        return x, y

版权声明:本文为WheelCode原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/WheelCode/p/14100844.html