adb基本命令+appium
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利用图像识别进行测试的方法,后续补充
电脑重装了,重新整理了相关知识和安装措施
-
安装java并配置环境,不赘述,没有java玩个鸟
-
安装SDK,然后将SDK文件夹配置环境变量里(不直接添加到PATH里,而是直接添加字段 ANDROID_HOME)
-
在PATH里配置
%ANDROID_HOME%\tools;
%ANDROID_HOME%\platform-tools;
%ANDROID_HOME%\build-tools\29.0.x;(具体看文件夹名字)
(也可以直接将这三个文件夹搞到PATH里,花里胡哨的)
-
打开SDK Manage下载你需要的东东,注意,如果platforms-tools里没有东西,需要将SDK Tools删掉,然后千万不要关闭界面,左上角TAG选中obsolete显示出Tools,重新下载
-
将platform-tools里的adb复制替换模拟器的adb
-
adb connect host:port -> adb devices
abd不是外部或内部的话,环境变量没配对(模拟器打开) -
直接安装桌面版(命令行版需要安装Node.js,具体措施见下方)
-
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