背景
你是否遇到过这样的测试场景:
垃圾需要达到2G!
Wifi必要有有风险!
CPU占用率达到70%以上!
日流量使用占用套餐的一半!
你的QQ必须要有风险!
不仅仅测试如此,连开发想fixbug都难以模拟对应的场景
通常我们的测试是像下图这样子的,测试响应插件时依赖事件插件的触发:
恰好我们FT的天然属性需要将各个FT的异常逻辑通知到管家小浮窗,所以需要学习如何使用病毒软件,构造风险wifi,构造垃圾……劳心劳力。
PiTest插件
PiTest插件是手机管家早年维护的一个基于junit3框架的测试插件,迫于测试条件无奈,只能把这个年久失修的插件利用起来。手机管家已经实现各个功能模块的插件化,PiTest插件和其他功能插件一样,能够在插件之间发送和处理请求。
我们在测试过程中通常人为构造用户事件作为输入等待手机给出响应,事实上我们可以直接使用接口调用发送请求来代替用户事件的输入。通过PiTest插件直接向我们需要测试的插件发送请求,解放双手,也为自动化测试创造了条件。
1、如何选择接口?
首先我们需要了解插件之间通信的接口,如下图管家插件异步通信接口(部门截图),同步接口几乎没有使用了。
如何选择正确的接口:
1、确定请求处理是在前台还是后台;
2、确定是请求插件还是请求host,通常可以查看响应请求时调用的接口,反推发送请求所需要的接口。
例子:桌面助手(小浮窗)插件中需要处理流量插件请求,更新自身的tips,我们要做的是用PiTest插件给桌面助手发送流量异常请求,模拟流量事件。
1、首先从插件业务判断,小浮窗提示的处理应该在后台,再从后台处理代码逻辑中来证实我们的推测。
2、 可以看到我们需要“流量状态变化”在外部异步请求接口中得到处理,所以我们要模拟的“流量变化”也需要从PiTest插件中发送一个异步请求到小浮窗插件。
3、 经过以上两步,我们可以确定“发送异步后台请求小浮窗插件”就能帮我们完成”流量状态”的模拟。
2、如何选择参数?
要知道我们需要发送什么参数不如先看看插件接受到请求后需要哪些参数,所以,直接收到请求插件的具体处理逻辑,提取出参数就是我们发送请求需要的参数。
接着上面例子:
从处理请求的方法我中我们清楚看到在bundle中取得了三个参数,所以我们就发送这三个参数就可以了,所以我们的测试用例也包含了这三个参数:
3、如何运行用例?
配置测试用例:
创建config.xml文件,按照如下模板填写测试用例,拖到SD卡根目录。
运行插件:
进入管家,从本地包插件列表入口中找到就“测试插件”,点击接口测试,一键运行测试用例
4、与手工模拟场景比较
编号 | 事件 | 手工模拟方法 |
---|---|---|
1 | 病毒危险 | 安装病毒app |
2 | 帐号风险 | 从后台下发一个QQ风险 |
3 | 异常软件提醒 | 各种搞手机,使得cpu爆满 |
5 | 勋章墙 | 获取一个勋章墙 |
6 | wifi安全风险 | 设置热点,配置风险wifi |
7 | 内存超过阀值 | 内存工具,撑满内存 |
8 | 日流量超额 | 设置流量超额提醒为很低的值 |
9 | xm垃圾可清理 | 运行脚本对手机写垃圾文件 |
10 | X款软件更新 | 安装多款非最新的app |
11 | 发现免费WiFi | 连接wifi,断开wifi |
优点
1、 对测试同学:纯手工配以完成以上场景需要花费>1h,而通过PiTest插件配置已有用例来完成测试只需要3min即可完成所有事件,测试效率提高90%。
2、 对开发同学:fix bug时可认真调试,不必要花精力在模拟场景。且很多场景是瞬时的,一次消耗,fix bug则需要多次调试,再也不需要多次构造异常场景。
缺点
当然,PiTest插件的方法也有所不足:
1、 门槛高,必须对所测试的模块代码逻辑较清晰的情况下才能编写测试用例。
2、 前期投入加大,编写测试用例费时。
3、 不利于在合作方同事之间推广,只能写好用例,让合作方同事修改配置文件来测试。
总结
这里我们只是用了插件之间通信的办法来模拟异常场景的请求。然而PiTest插件实际上是一个自动化接口测试插件,返回测试员自动化测试的结果。由于现在桌面浮窗框架不具备做自动化测试的条件(需要有执行结果返回),所以我们选择作为测试辅助工具。
Q&A
1、是不是所有的接口都能这样测试呢?
当然不是,我们只能对提供了对外访问的接口才能测试,具体是否有接口可以从meriSDK中看,比如桌面助手的接口:
2、PiTest插件的结构看不懂,怎么破?
每个插件都要遵循管家的插件接入标准才能在框架中被加载且生效,所以这一套机制可以咨询开发童鞋,我们更多的应该关心插件中需要自己维护的部分,即测试用例。简单看看现在PiTest插件代码结构: