“钩子”技术在白盒测试中的应用

来源:互联网 发布:nginx ab压力测试 编辑:程序博客网 时间:2024/05/22 12:49

“钩子”技术在白盒测试中的应用

一、什么是hook技术?

提到钩子技术相信大家多少不会感觉陌生,Windows操作系统是建立在事件驱动机制之上的,系统各个部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。HOOK本身是Windows操作系统中非常重要的一个系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此可以完成一些普通应用程序难以实现的特殊功能。

二、hook技术的原理

在看应用之前让我们了解一下hook技术的基本原理。我们在白盒测试使用的detoursDetours是一个在x86平台上截获任意Win32函数调用的工具库。中断代码可以在运行时动态加载。Detours使用一个无条件转移指令来替换目 标函数的最初几条指令,将控制流转移到一个用户提供的截获函数。


借用detour函数调用图可以看出来,本应该由start发送消息给target的消息被“钩子”拦截,经过detour函数的处理再发送给target端或直接返回给start


三、hook技术的应用

我们在做白盒测试的时候经常会遇见在测试一个接口的时候其它的接口、或者是外部文件等。之前我们在测试这个接口的时候会进行大量的环境初始化、文件或者词库的加载。而真正用来测试当前接口的代码之后几行。

纳尼?我们把大量的时间用在了环境初始化上啦!

还有我们需要对一个全局的变量进行赋值的时候,通常只能找到getValue接口,开发就是不给我提供setValue接口,或者提供setValue接口但是private的,omg,肿么办?

给大家举一个小例子:

我们在测试一个url初始化的接口时,发现这个接口依赖一个下载接口。我们在测试这个接口的时候要对下载接口中的大量参数进行初始化。还有我们这条测试的成功与否要依赖当时的网络情况,这样不稳定的接口测试用例是不能接受的。


我们首先需要编写一个桩函数,它和目标函数有着相同的参数,但是没有任何逻辑,只返回你需要的接口。(本例:true or false)再使用hook技术把访问目标函数的都强制指向我们事先提供好的桩函数上。这样做便达到了我们的测试目的。

四、其他方法

Hook技术可能只是白盒测试中常用使用的方法之一。他可以方便的解决上面提及的相关问题。StubMock也是我们常用的方法,之后我们也会结合一些小例子和大家分享一下我们白盒测试常用小技巧。同时我们也希望你能把你工作中使用的技巧反馈给我们。^_^



原文链接

如需转载该篇文章,请注明来自“搜狗测试”


0 0
原创粉丝点击