2024年最全黑盒测试中关键截图如何打点(1),2024年最新来来来

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

 */
@Override
public int appEarlyNotResponding(String s, int i, String s1) throws RemoteException {
    return 0;
}

/**
 *  应用产生ANR时回调此方法,
 * Return 0 时显示 "应用停止响应" 弹窗。
 * Return 1 时不做任何操作,等待应用恢复正常;
 * Return -1 时结束产生ANR的应用.
 */
@Override
public int appNotResponding(String processName, int pid, 
    String processStats) throws RemoteException {
    return -1;
}

/**
* 系统停止响应时回调此方法,可以在这个方法里面对设备进行些恢复工作         
*/
@Override
public int systemNotResponding(String msg) throws RemoteException {
    return 0;
}

};


**进程变化监听**


由于ActivityController服务存在被干扰的情况,我们需要其他服务进行辅助判断,通过ActivityManager注册IProcessObserver可以获取进程变化的回调,特别是在onForegroundActivitiesChanged方法内可以判断是否触发页面切换。


**通过IProcessObserver可以实现的功能:**


\*\*①. \*\*在onForegroundActivitiesChanged方法内监听页面变化;


\*\*②. \*\*在onProcessStateChanged和onProcessDied方法内可以统计App的线程生命周期;


\*\*③. \*\*可以统计app运行期间创建的线程信息;


\*\*④. \*\*该服务被不同进程注册时,相互间互不影响;


**缺点:**


\*\*①. \*\*没有直观信息,需要使用uid进行关联,处理复杂;



IProcessObserver mProcessObserver = new IProcessObserver.Stub() {
//与用户交互的Activity发生变化时foregroundActivities为true,否则foregroundActivities为false
//uid产生该活动的应用标识,可以用包信息匹配到具体的应用
//pid 当前活动的线程/进城ID
@Override
public void onForegroundActivitiesChanged(int pid, int uid,
boolean foregroundActivities) throws RemoteException {
if(foregroundActivities) {
//
}
}

//活动状态发生变化时调用,在此方案内实际意义不大
@Override
public void onProcessStateChanged(int pid, int uid, int importance) 
    throws RemoteException {
}
//结束时调用
@Override
public void onProcessDied(int pid, int uid) throws RemoteException {
}

};


**综合应用**


**上面两种方案各有优劣,我们可以将他们整合在一个流程内实现较为完善的截图机制:**


**①.** 首先我们的服务主要依赖于ActivityController进行页面变化的感知,以便于获取详细的信息和精确控制;


\*\*②. \*\*我们注册IProcessObserver进行辅助验证,当页面发生变化时我们进行截屏,并通过ActivityController最后一次接收事件的时间判断其服务状态,如果服务状态异常,那么我们重新注册ActivityController服务;


\*\*③. \*\*开始监控页面时我们初始化一个定时器,可以定时(2S)截取屏幕,将当前截图Bitmap与上一次的截图Bitmap做图像匹配,如果图片相似度小于0.8,那么可以认定页面发生了变化,如果5S内没有保存过页面信息,那么需要重新初始化ActivityController服务。


**Root设备的特殊方案**


Android系统是基于Linux系统的移动操作系统。它们可以通过getevent命令输出键盘和屏幕事件,包括响应事件的坐标区域和键盘key值。但是Android系统基于安全考虑,大部分真机系统是没有权限执行getevent命令的,它不会输出任何有效信息,但是华为手机(荣耀20 i)上却可以正常使用。这是一个非常危险的权限,大家自己的手机还是不要开启开发者模式了!



/dev/input/event2: EV_ABS ABS_MT_POSITION_X 0000024b
/dev/input/event2: EV_ABS ABS_MT_POSITION_Y 0000065d
/dev/input/event2: EV_ABS ABS_MT_PRESSURE 000000f5
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID 00000000
/dev/input/event2: EV_ABS ABS_MT_TOUCH_MAJOR 000000a5
/dev/input/event2: EV_ABS ABS_MT_TOUCH_MINOR 00000087
/dev/input/event2: EV_ABS ABS_MT_ORIENTATION ffffffc6
/dev/input/event2: EV_ABS ABS_MT_BLOB_ID 00000002
/dev/input/event2: EV_SYN SYN_MT_REPORT 00000000
/dev/input/event2: EV_KEY BTN_TOUCH DOWN
/dev/input/event2: EV_SYN SYN_REPORT 00000000
/dev/input/event2: EV_ABS ABS_MT_POSITION_X 0000024b
/dev/input/event2: EV_ABS ABS_MT_POSITION_Y 0000065c
/dev/input/event2: EV_ABS ABS_MT_PRESSURE 00000067
/dev/input/event2: EV_ABS ABS_MT_TRACKING_ID 00000000
/dev/input/event2: EV_ABS ABS_MT_TOUCH_MAJOR 000000b4
/dev/input/event2: EV_ABS ABS_MT_TOUCH_MINOR 000000a5
/dev/input/event2: EV_ABS ABS_MT_ORIENTATION ffffffc1
/dev/input/event2: EV_ABS ABS_MT_BLOB_ID 00000002
/dev/input/event2: EV_SYN SYN_MT_REPORT 00000000
/dev/input/event2: EV_SYN SYN_REPORT 00000000
/dev/input/event2: EV_SYN SYN_MT_REPORT 00000000
/dev/input/event2: EV_KEY BTN_TOUCH UP
/dev/input/event2: EV_SYN SYN_REPORT 00000000


\*\*ABS\_MT\_POSITION\_X \*\*屏幕的横坐标,后面一列是坐标的十六进制数据


\*\*ABS\_MT\_POSITION\_Y \*\*屏幕纵坐标,后面一列是坐标的十六进制数据


**BTN\_TOUCH** 代表屏幕事件,后面如果是DOWN则代表按下,后面如果是UP代表抬起


我们可以根据ABS\_MT\_POSITION\_X和ABS\_MT\_POSITION\_Y信息和BTN\_TOUCH为DOWN的事件计算响应按下事件的屏幕位置,然后通过BTN\_TOUCH为UP的事件计算抬起的屏幕位置,然后用按下和抬起的坐标差来判断该时间是点击还是滑动,然后我们可以进行屏幕截图,甚至在截图上绘制事件的轨迹。


**最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:**




![img](https://img-blog.csdnimg.cn/img_convert/939f5ab6ce170fefccce651ec04ba875.png)
![img](https://img-blog.csdnimg.cn/img_convert/01cc1df89158bbc03b76b47c4730f3e4.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值