Macaca 线上广告的测试方法

曾晖斌 · 2017年12月29日 · 最后由 曾晖斌 回复于 2018年01月02日 · 4792 次阅读
本帖已被设为精华帖!

背景

其实在一些大的 app 接入广告基本都是接入图片 or 图文广告,基本不会接 H5 广告,原因呢,就是 H5 里面,广告主可以做很多你想不到的事,比如跳一个 xx 网站啊,在后台下载各种资源
之前我们的解决方案就是发现一个有问题的广告,抓数据,然后和广告平台说下,把对应的广告下了,搞的我们很被动,但你要赚别人钱,所以呢,会牺牲用户的体检,生活不易。其实问题是不知道这个对用户自己的影响有多大,要提前把一些问题暴露出来

这里分享的方法,主要是针对两点:
1、H5 广告渲染情况
2、H5 广告适配问题

原理:启动两个线程,一个线程做代理,负责把请求到广告数据保存下来,一个线程进行 UI 点击及截图,数据文件名和截图文件名一致,剩下的就是分析截图,找到有问题的截图,就可以找到对应的数据

方法

代理修改这位共享的代码:点击有喜
把请求压缩的字段去了,在 testProxy.java 中

 //删除要压缩传输,减少后期触压操作
httpRequest.headers().remove("Accept-Encoding");

再自己添加一些拦截广告数据的代码加下,在 HttpProxyServerHandle.java 类中

@Override
      public void afterResponse(Channel clientChannel, Channel proxyChannel,
          HttpContent httpContent,
          HttpProxyInterceptPipeline pipeline) throws Exception {

        String filePath = "logs/"+testProxy.bq+".log";
        String responseHeader = proxyChannel.remoteAddress().toString();
        String responseBody = httpContent.content().toString(Charset.forName("gb2312"));
      //判断是否含有广告数据,进行拦截
        if(responseHeader.startsWith("richman")){
            System.out.println(responseBody);
            if(responseBody.contains("practopbanad")){
                WriteStringToFile(filePath,responseBody);
          }
        }
        clientChannel.writeAndFlush(httpContent);
      }

这里使用回调的方法进行 ui 点击,简单的也可以使用 for、while 循环点击也是可以的

剩下就是截图分析的方法,目前还没有想好。

代码也放出来吧,有想法的随时可以沟通『点击我下载

共收到 2 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 12月30日 11:57

小白提个问题,如何判断是广告,这里只是举了个例子是吧: if(responseHeader.startsWith("richman")){
System.out.println(responseBody);
if(responseBody.contains("practopbanad")){
不同的广告主,搜索的关键字也是不同的,还需要添加其他的关键字对么?

我去催饭 回复

我们是采用 server 对 server 的端,广告是单独使用一个服务,如我的就是 richman 开头的就是广告相关的,再通过第二层判断,就知道是哪个位置的广告。

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册