iOS 测试 Ant+JMeter+WebDriverAgent 游记

区曼 · 2016年07月05日 · 最后由 paul 回复于 2017年01月20日 · 2489 次阅读
本帖已被设为精华帖!

0. 前言

上周末看到了一篇 WebDriverAgent 踩坑记 , 把我导向了一个月前的 WebDriverAgent 简介 ,才看到我在那的评论被回复了。说起来我的提醒被匿名用户刷屏没看到,现在看到了就打算填个坑,小试一下。 而最近 Ant + JMeter + * 的模式有点火,于是我也来凑个热闹,多加一个 Ant。本文从社区里的其他文章里面吸收了不少经验,列在文中,感谢社区。

1. 安装

Ant, JMeter 都不需要安装,解压即用,非常方便。好消息是 JMeter3 发布,最实用的莫过于 jsonpath 了,提取 json 的 response 就方便多了。
WebDriverAgent 的安装也是比较简单的,安装官网https://github.com/facebook/WebDriverAgent README 即可,或者参看 https://testerhome.com/topics/4904 。记录一下我遇到的几个小问题:
* 直接 brew install carthage 的时候提示我需要 XCode7.3 ,搜索下载 carthage.pkg 安装成功解决了。
* 下载完 WebDriverAgent 项目后,执行 xcodebuild 命令提示找不到模拟器,手动启动了模拟器仍然不行,最后只好在 XCode 里面打开项目选择执行,就成功了。成功一次之后,以后就都可以用命令启动了,我写成了 start.sh,方便使用。
* 编译的过程中提示未知的编译选项 -Wno-double-promotion,打开 WebDriverAgent/XCTWebDriverAgentLib/Commands/FBCustomCommands.m 文件,去掉了最后的-Wno-double-promotion 选项,就这样解决了。

2. JMeter 脚本

我把 https://github.com/facebook/WebDriverAgent/wiki/Queries 里面提到的内容都转化成了取样器,放在 “工作台” 中了,需要的用什么方法只要复制一个出来改改就能用。xml 文件太长就不放代码了直接在尾部下载去吧。

被测端选用了 Appium 提供的 TestApp,简单地跑了几个加法和一个 Alert,也算走了一遍流程。有几点说明的:

  • 将 HOST、PORT、bundleId 等全局的配置放到了顶部方便修改和调整
  • WebDriverAgent 需要的 Header Content-Type: application/json直接放在的一个全局的请求头管理器里面了,后面不用再理会
  • HTTP 请求大部分是一样的,除了数据和 URI 以及部分超时设置,所以也做成全局的 HTTP 请求默认值了
  • 断言成功用正则判断响应里面status=0,有个坑就是如果查找元素失败,返回空数组但状态还是 0,需要注意
  • 如果已经安装 TestApp,用 bundleId 启动就好,否则直接用 *.app 来制定,切换取样器即可
  • 在 setUp 线程启动 App 获得 session 后,为了跨线程传递 session,用 BeanShell 将它放进了 properties 里了,可以在 tearDown 线程进行关闭
  • 启动 App 的过程有点长,需要将 HTTP 请求的 read 时间设置长一点避免超时
  • 本来应该使用 csv 来管理测试数据的,但为了少带文件并且涉及路径,这里用 forEach 代替了。应该用 csv+ 循环控制器才是好的实现

3. Ant 脚本和结果 style 文件

从下列文章里直接借鉴(抄袭)来的:
Jenkins+Jmeter+Ant 接口持续集成 https://testerhome.com/topics/5186
jmeter 报告扩展样式优化 (接口版+性能版) https://testerhome.com/topics/5252
对 Jenkins+ANT+Jmeter 接口测试的实践 https://testerhome.com/topics/5262
修改点:

  • 增加了 clean 过程,否则多次执行会将新结果 append 到旧结果中,造成混乱
  • 保持 JMeter 本身环境的纯净,不修改 JMeter 目录下的任何配置,而是将执行过程中的 properties 直接写到了 build.xml 中 ```xml <?xml version="1.0" encoding="UTF-8"?>


<!-- 需要改成自己本地的 Jmeter 目录-->


<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有 jmeter 脚本-->

<!-- jmeter 生成 jtl 格式的结果报告的路径-->

<!-- jmeter 生成 html 格式的结果报告的路径-->

<!-- jmeter 生成 html 格式的结果报告的模板-->

<!-- 生成的报告的前缀-->




































classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.html.dir}/report-summary.html"
style="${jmeter.result.style.dir}/jmeter-results-detail-report_21.xsl">



force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.result.style.dir}/jmeter-results-shanhe-me.xsl">
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->













4. 执行结果展示
====
Ant执行界面 
![](/photo/2016/9eba1a2ff3d930473ffcb344267b8e1c.png)

手机端动作
![](/photo/2016/38f52456a14776617ffe0f40fb9899e0.gif)

结果摘要(右上角可跳转到详情)
![](/photo/2016/2ec29b470692cfaf7b4b2e7cbea3726b.png)

结果详情
![](/photo/2016/7fa4d4f950f5d3f22893b37e63e03fa1.png)





5. 下载
====

下载地址: [Ant+JMeter+WebDriverAgent][wda_jmeter]
里面有一个python文件可以用来解析base64的截屏。
testplans里面有一个TestPlan.jmx1,用的是东哥的服务,重命名去掉最后的1也可以执行,拿去玩吧。




.

.

# UPDATE
JMeter与Appium的交互demo已完成,csv提供数据,预览如下
![](/photo/2016/13838ca7b7cd96d2eff7a26f5a4ad931.png)

下载地址: [JMeter+Appium][appium_jmeter]







共收到 14 条回复 时间 点赞
恒温 将本帖设为了精华贴 07月05日 23:51

get 姿势

思路很新颖,同时我比较感兴趣的是目前 WebDriverAgent 各个 api 的执行效率(响应时间)。

让我想到一个新玩法,搞个比较全的 WebDriverAgent api 测试集,然后分别在目前支持 iOS 9.3 的主要机型上跑一遍,看看 api 的性能如何,可以作为机型选型和以后 WebDriverAgent 性能优化的参考

@watman 很赞!jmeter 集成 appium 的,能也来一篇不?

大神啊,这个模式启发挺大的,我可以试试用 RF 也以这种模式玩玩

—— 来自 TesterHome 官方 安卓客户端

区曼 #10 · 2016年07月06日 Author

@chenhengjie123 响应时间是 JMeter 的分内事,在 summary 表里面有汇总也有每条执行的具体时间

# Samples Failures Success Rate Average Time Min Time Max Time
47 1 97.87% 996 ms 61 ms 2128 ms

@lihuazhang Appium 和这个差不多,已 UPDATE,补上了下载链接
(更新时间:2016年7月8日22 点)

#6 楼 @watman 嗯,我主要感兴趣的是通过这种方式了解不同请求在不同配置机器上的耗时,这样就能出一个 benchmark 之类的东西,更有针对性地进行测试机型选型和脚本优化了。

mark 一下

—— 来自 TesterHome 官方 安卓客户端

好好好,收藏了

—— 来自 TesterHome 官方 安卓客户端

瞬间 get,感谢分享

感谢分享


我是 jmeter 3.0 的 直接用会报这些错误 我里面有这些文件啊 需要我修改吗

已解决 不用了

#13 楼 @304764691 缺少 jmeter-results-shanhe-me.xsl 文件,下载链接:http://files.cnblogs.com/files/yangxia-test/jmeter.results.shanhe.me.rar,放在 I:\jmeter-cs\test\report\style 目录下

@watman 你好,附件藐视挂了,能重新更新下吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册