【金阳光测试】Android自动化测试第一季第零讲--预备知识

百度传课:

http://www.chuanke.com/v1983382-106000-218422.html

http://www.chuanke.com/v1983382-106000-218423.html


一、需要具备的能力:

1、在测试行业呆过一年以上(必须)

2、独立编写java或者c++等项目一年以上(必须)

3、熟练掌握具备业界开源的自动化工具并用在工作中(monkey、monkeyrunner、robotium、UiAutomator) (必须)

4、用python等语言独立写过自动化脚本(必须)


以下为不是必选项:

1、会简单的Linux命令

2、会android应用简单开发

3、会Eclipse插件开发


二、题外话—面试题目

腾讯笔试题目

1、如何测试分布式ATM机?     这个针对一些大系统的题目,集群部署

2、使用一个数组实现三个堆站,要求有效的使用数组得存储空间,可以使用其它的数据结构。

涉及到一个测试人员对整个系统的了解   包括前段的负载均衡到主备应用等

3、编写一个脚本,统计log文件中首个单词出现的次数,如:error:xxx

waring:xxx

error:xxx

waring:xxx

 

(阿里巴巴2面的部分面试题目)

1、robotium源码架构实现?

2、Robotium的工具怎么根据id找到脚本id(脚本id和架构映射原理)?

3、MonkeyRunner和Uiautomator原理

4、你们怎么做电量测试(如何做到app进程级别)

5、影响手机电量因素列举一下

6、稳定性和压力怎么做?

7、Robotium Webview怎么实现

8、怎么让系统不休眠:1通过PowerManager来精细控制 具体函数请指出 2 在View中设置FLAG_KEEP_SCREEN_ON。

 

百度1面题目

1、我测试他们客户端 日文输入法我们不认识日文 怎么用自动化解决

2、不用变量交换两个数

3、调脚本 怎么并行和串行调bat批处理

4、怎么解决 控件和点触屏自动化(要我规划自动化方案)

5、用户装了百度客户端 你怎么实现自动化

6、我们自动化 要验证功能准确性还有性能、还有ui界面。一个自动化脚本验证多个,难道一个自动化脚本只验证一条用例?

7、怎么实现 监控内存 在eclipse显示 pss是什么意思

8、ANS出现怎么解决

9、进程和线程、handler和runnable 还有广播和服务

10、Robotium和monkeyrunner区别

11、Radiobox和checkbox自动化脚本怎么复用(考的是正交法)

12、GC原理

13、android性能自动化怎么做

14、电量对比测试

15、android安全自动化怎么做

16、有个客户装了百度客户端,你怎么规划灰度测试版本自动化

17、ui线程阻塞 怎么复现查log

 

三、业界自动化框架介绍

 

1、基于坐标点触屏:Monkeyrunner、北京播思自研工具

2、基于随机流的单元测试:CTS、Monkey

3、基于元素图形对比:SeeTest、I-test

4、腾讯Bita和GT(性能测试工具)

5、百度云和Itestin、阿里巴巴TMTS

6、基于控件信息:Robutium+Junit4框架、东舟Smart-Robot、美国风河公司的:wind test managerment、

7、 NativeDriver和Selenium(已经被UiAutomaor取代)

 

四、ADB详解

http://developer.android.com/tools/help/adb.html

A、学习官方文档

ADB(Android Debug Bridge),调试桥接,是一种命令行工具,能够和模拟器的实例或者所连接的设备进行通信的东西,主要有三个部分组成:

1、 客户端--可以通过adb命令从shell中调用客户端。其他Android像ADT插件和DDMS那样的工具也可以创建adb客户端。

2、 服务器,TCP/IP 端口:5037 --服务器管理客户端和运行在模拟器和真机的adb后台程序之间的通信。

3、 守护进程

可以在<sdk>/platform-tools/目录下找到adb工具。

当打开一个adbclient时,该client首先check是否存在运行的adb server进程。如果不存在该进程,将开启该server进程。当一切准备就绪,它会绑定到5037端口,并且监听来自adb client的命令—所有的adb clients使用5037端口来和adb server通信。

如果装了腾讯管家、360手机管家等软件后,可能导致5037端口被占用,adb不能使用,需要将其kill掉。

 一些基本命令介绍:

(1)    安装apk

adb install  C:\Users\Administrator\Desktop\QQyinle_155.apk


(2)    卸载apk


(3)    将文件push到/data/local/tmp下


(4)    将文件pull到PC端




自己翻译了下表格:

Category Command Description Conmments
Target Device -d adb命令指向唯一连接着的USB设备 如果连接着多个USB设备,将返回一个错误提示
-e adb命令指向唯一正在运行的模拟器实例 如果发现多个模拟器实例正在运行,将返回一个错误提示
-s <serialNumber> adb命令执行一个特定模拟器/真机,需要提及adb-assigned serial number(例如:emulator-5556) 参见:Directing Commands to a Specific Emulator/Device Instance
General devices 打印所有已连接的模拟器/真机列表 参见:Querying for Emulator/Device Instances
help 打印adb命令列表
version 打印adb版本号
Debug logcat [option] [filter-specs] 打印log数据到屏幕
bugreport 打印dumsys,dumpstate,logcat数据到屏幕,
jdwp 在已有的设备上打印一串JDWP进程 可以使用forward jdwp:<pid> port-forwarding规范来连接一个指定的JDWP进程。比如:adb forward tcp:8000 jdwp:472 jdb -attach localhost:8000
Data install <path-to-apk> 将一个安卓应用(.apk应用的全路径)安装到模拟器/真机
pull <remote> <local> 从模拟器/真机中将一个指定文件复制电脑本地
push <local> <remote> 从电脑将指定的文件复制到模拟器/真机
target Device forward <local> <remote> Forwards socket connections from a specified local port to a specified remote port on the emulator/device instance. 端口标准可以使用以下方案:
tcp: <portnum>
local: <UNIX domain socket name>
dev: <character device name>
jdpw: <pid>
ppp <tty> [parm]... Run PPP over USB.
<tty> — the tty for PPP stream. For example dev:/dev/omap_csmi_ttyl.
[parm]... — zero or more PPP/PPPD options, such as defaultroute, local, notty, etc.

Note that you should not automatically start a PPP connection.
Scripting get-serialno 打印adb实例序列号 参见:Querying for Emulator/Device Instances
get-state 打印模拟器/真机的adb状态
wai-for-device 直到设备online才执行—等到实例状态为device 和其他adb命令对比可以预先考虑这个命令,这个用例中,发出其他命令之前adb将等待直到模拟器/真机连接上。举例如下:
adb wait-for-device shell getprop

记录:该命令不会引发adb to wait除非整个系统准备完毕了。为此,对比其他需要一整个准备完毕命令的系统的命令,不必预先考虑这个。比如说,install要求只有在系统准备完毕之后才可用的安卓包管理器。一旦模拟器或者真机连接到了adb server,如下命令
adb wait-for-device install <app>.apk
将发出install命令,但在安卓系统必须是已经准备完毕之前发出install命令,将会得到错误结果。
Server start-server 确认adb server进程是否运行,如果没有运行就开启它
kill-server 终止adb server进程
server shell 在目标模拟器/真机上开启一个remote shell 参见:Issuing Shell Commands
shell [shellCommand] 在目标模拟器/真机中发送一个shell命令,之后推出remote shell

另外,在Android4.4及以上版本,支持录像的工具:Recordering a devicescreen,基本命令如下:

开始录制命令:adbshell screenrecord /sdcard/demo.mp4

说明:录制手机屏幕,视频格式为mp4,存放到手机sd卡里,默认录制时间为180s
限制录制时间:

参数: --time-limit

adbshell screenrecord  --time-limit 10 /sdcard/demo.mp4

说明:限制视频录制时间为10s,如果不限制,默认180s
指定视频分辨率大小:

参数: --size

adbshell screenrecord --size 1280*720 /sdcard/demo.mp4

说明:录制视频,分辨率为1280*720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小
指定视频的比特率

参数: --bit-rate

adbshell screenrecord --bit-rate 6000000 /sdcard/demo.mp4

说明:指定视频的比特率为6Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率

B、AndroidDebugBridge源码详解

ADB的源码位置:

D:\Program Files\adt-bundle-windows-x86-20130717\sdk\tools\lib\ddmlib.jar

 

在stackoverflow上的一个问答如下:

链接:http://stackoverflow.com/questions/17381324/how-to-tell-if-android-device-detected-by-adb

提问内容:


解答如下:

By using ddmlib.jar, which is also used byEclipse plugins, you can monitor the device connect/disconnect event. Theddmlib is usually found in the tools/lib directory in Android SDK. But there isno the official documents about how to use it. Below is the code example. Youhave to include the ddmlib.jar and change the adb location according to yourenvironment.

import java.io.IOException;
 
import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.AndroidDebugBridge.IDeviceChangeListener;
import com.android.ddmlib.IDevice;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
       AndroidDebugBridge.init(false);
 
       AndroidDebugBridge debugBridge = AndroidDebugBridge.createBridge("D:\\android-sdk\\platform-tools\\adb.exe", true);
       if (debugBridge == null) {
           System.err.println("Invalid ADB location.");
           System.exit(1);
       }
 
       AndroidDebugBridge.addDeviceChangeListener(new IDeviceChangeListener() {
 
           @Override
           public void deviceChanged(IDevice device, int arg1) {
                // not implement
           }
 
           @Override
           public void deviceConnected(IDevice device) {
                System.out.println(String.format("%sconnected"
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值