• 不好意思 各位,最近忙其他东西,也没时间来回复一些问题, 我统一答复一下把:
    首先纠正我上面的回帖的两个问题:

    1. 部署在 linux 上
    2. gcov 阻塞 ui 这段时间其实还在完善这个工程: 1.服务器是用来接收手机 gcda 文件的,这个暂时只能部署到 mac 机器,而且是装了 xcode 的 ,因为发文章的时候,我其实还是思路阶段,没有实践到那步,但现在看来是需要 xcode 才能打开 ios 的.h 和.m 文件,很大一个坑,不过迁移到 mac 机器上也很快; 2.gcov 阻塞问题被我使用了 gcd 的信号量机制解决,现在对于测试人员来说,基本没有感觉,但我们工程3000多个源文件需要统计,所以如果使用 zip 压缩,理论上更好,但超过了 afnetworking 这个网络库的最大文件限制;所以还是决定用一个一 个的发送方式 3.期间考虑使用并发来发送,结果 cpu 直接飚升到200%,太费经了,最后就单线程后台异步的方式处理,3000多个文件20s 内也能发完 ,对 ui 没影响,我觉得现在是比较满意的方式 接下来阐述一下流程:
    3. ios 增加一个 pods,这个 pods 就两个文件,一个.h 和一个.m 。文件的内容就是找到 document 下的 gcda 文件,然后调用 gcov_flush 把缓存 gcda 刷新到磁盘,第三步,使用 gcd 的方式发送这些文件到你的 web 服务器
    4. web 服务器很简单,接受这些文件,然后根据传过来的参数:版本号,udid 等,在服务器端创建目录和保存文件 3》后台写一个命令行工具(我暂时是用 shell 做的),找到相应的源代码和 gcno 文件,和 gcda 聚合在一个目录,然后用 lcov 来生成报告就可; 由于现在我们打包是用的开发的 jenkis 服务器机器,它不准我们在上面部署我们的 web 服务器和 gcov 和 lcov,所以我使用了 ssh 主动推送了它上面的编译器信息(.ipa,gcno,源代码)到我的 mac 机器上,我遇到了一个比较难的问题,就是这样产生的 gcno 文件,它里面的源代码路径会指定为 jenkis 上的目录,你需要在本地创建一个一抹一样的目录,来保存源代码信息;这样把上面的流程就完全自动化串了起来, 我本以为可以交差了,但我们领导还想做行的差异性覆盖率信息,我这几天忙着搞 git diff 的东西 怎么和 lcov 结合,被整的死去活来,但如果解决了上述几个步骤 ,基本上也能达到一键自动化生成覆盖率信息的目标了;
  • 很简单,这类协议怎么都是 https 或 http 的,使用 fiddler 或其他抓包工具,我建议你用 mitmvdump 抓取发送聊天的那个接口,因为可以自动化满足你的要求,然后 hook 住,修改发送次数为 int 的最大位,如果还不满足,可以用 python 的分布式到你局域网的其他机器,帮你发送,如果你服务器没有流控,压暴都是必然的;

  • 这个功能刚好和我的实现方式一致:
    第一步:我采用 linux 作为后台,部署了 xcodecoverage,同时会将编译主机的原文件代码 gcno 拷贝过来,这个可以在 jenkis 里面写 shell 实现;
    第二步:用嵌码的方式来收集和发送每个版本每台手机的覆盖率信息,既然用到了 pod ,何不继续加几行代码: 在 pod 里面实现一个接口,用于gcovflush(), 和找到覆盖率文件发送;同时由于是 debug ,我们的开发在调试面板上实现了接口,所以你可以在调试面板上加开关实现是否需要采集和发送覆盖率的开关;做好不要在4g下发送的防护,否则,大家知道的.....。
    第三步 linux 后台用 python flask(你也可以添加 java http 接口)实现一个简单的 web 服务器,接受文件,和展示 index.html 这个覆盖率信息;

    这样你通过 xcodecoverage 就能自动统计每台手机当天完成的覆盖率,同时也能合并产生当前版本的总的覆盖率;

    其中第二步最坑,由于文件太多,如果用 http zip 传输,会崩溃;放弃
    如果实现 ftp 客户段传输,发现传不进文件,可能是使用 iphone 的原因;
    所以只能启用后台线程一个一个的发送,你可以尝试 gcd 异步机制 ,启动多个线程共同完成工作;
    当然 gcovflush() 只能在主线程刷新,刷新期间会较慢,此时会阻塞 ui ,不过这点时间对于测试人员来说还是值得的;
    过段时间会在 github 上上传这些代码,不过最近还在解决从前端 web 自动配置增量信息,而手机只发送那些增量相关的覆盖率信息到 linux 后台收集和展现的过程,如果能解决第二步就能完美解决,因为采用 ftp 传输,可以先在 linux 上以文件的形式保存传输过来的增量模块,手机 pod 接口主动下载该文件做参考传输,这样你就能和 git diff 这些版本比对工具完美结合,成为一个覆盖率自动化工程了,希望能帮到大家;