Robotium 介绍一下 Spoon------配合 Robotium 多设备分发测试,生成测试结果

剪烛 · September 22, 2014 · Last by Jhon replied at December 21, 2016 · 4183 hits
本帖已被设为精华帖!

最近群里有好几个人都问了robotium怎么生成报告,一般看见大家有这样几种做法:
1 改写InstrumentationTestRunner,替代原有的,测试过程中会把测试结果写在定义的目录--------网上有教程,但是我没有试验过
2 jenkins有自带的junit插件可以生成报告--------没试验成功
3 使用命令行发送测试命令,然后收集返回的结果,根据模板生成网页,恩,各种自定义的功能比如说统计,失败重跑都可以做--------我做过,劳心劳力,不会做页面还特丑。
恩,直到后来一位前同事给我介绍了这个工具,觉得是初用Robotium又不熟悉怎么生成报告的同学的福音,用法简单,效果显著,居家必备。
下面介绍一个用来介绍一个与robotium结合得特别好的用来多设备运行,并且生成网页报告的工具------spoon

先上github地址:
https://github.com/square/spoon
主页:
http://square.github.io/spoon/
sample地址:
http://square.github.io/spoon/sample/index.html(可能很慢)

打不开以上网址的福利:
源代码zip:
http://pan.baidu.com/s/1kTolyvX
runner jar:
http://pan.baidu.com/s/1jGIFEF8
client jar:
http://pan.baidu.com/s/1jG20AZ8

介绍:
spoon-runner
提供测试apk和被测apk后,spoon-runner可以同时在多台机器上运行测试apk包含的tests,tests运行结束后,spoon会对所有的结果和图片进行处理,并且生成一个静态的html文件(其实有很多html文件)
生成的结果html大概是这样的:

spoon-client
需要导入到robotium的测试工程中,它提供了截图的方法,通过这个方法,可以将图片生成到结果html中

使用方法:
1 spoon-client
需要将spoon-client jar导入到你的测试工程中,就像到robotium.jar包那样导入工程。
spoon-client jar可使用的方法有以下(该方法的第二个参数为自定义文件名):

Spoon.screenshot(activity, "initial_state");
/* Normal test code... */
Spoon.screenshot(activity, "after_login");

就是这样将你需要截图的地方嵌入这个方法,并写描述
2 spoon-runner
这是个在电脑上可运行的jar文件,就是用它来驱动测试并完成各种数据收集的工作的。它需要你提前将已经签名好的测试apk和被测apk文件。
以下示例一个最基础的启动方式

java -jar spoon-runner-1.0.0-jar-with-dependencies.jar --apk example-app.apk --test-apk example-tests.apk

它还提供这些更高级的设置(比如改变生成结果的地址):

Options:
--apk Application APK
--fail-on-failure Non-zero exit code on failure
--output Output path
--sdk Path to Android SDK
--test-apk Test application APK
--title Execution title
--class-name Test class name to run (fully-qualified)
--method-name Test method name to run (must also use --class-name)
--no-animations Disable animated gif generation
--size Only run test methods annotated by testSize (small, medium, large)
--adb-timeout Set maximum execution time per test in seconds (10min default)

还有一些类似maven的设置,请直接去github参照。

它有个很好玩的是,可以对截图进行顺序动态显示,好像是生成了GIF,很直观。
不过好像没有做统计相关的功能,恩,还有失败重跑这样的。不过我觉得初期可以用用,至少报告可以好看点。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 50 条回复 时间 点赞

获得成就,Robotium专精!

#1楼 @daydayup = ̄ω ̄=只是介绍

#3楼 @emilyli2013 恩恩,我也觉得亮点很多

不错,不过报告最好可以自己定制。我们的做法是在运行过程中,将过程数据生成XML。结束后,会有个站点自动解析这个xml,生成结果报告。包含错误log、截图、数据统计等信息。

#5楼 @mggao 嗯嗯,这个工具是对于数据统计这方面没做多少工作,优点是使用比较简单,对于刚入门使用robotium又不是很熟悉工具开发的同学会好一点,更高级一些的功能就需要自己定制了。

怎么发帖啊?

#7楼 @amwaydp 新注册用户要一天以后才能发帖,请先浏览下论坛的帖子,熟悉下发帖风格。

#2楼 @shixue33 大神,收徒弟吗

剪烛 #10 · January 19, 2015 作者

#9楼 @kesha0 Σ( ° △ °|||)︴我不是大神

java -jar spoon-runner-1.0.0-jar-with-dependencies.jar --apk example-app.apk --test-apk example-tests.apk 执行完这句,安装完两个APK后就终止了,不会自动运行,这是什么情况?

剪烛 #12 · February 28, 2015 作者

#11楼 @zhou 1 是否有错误信息输出呢?
2 用instrumentation调用命令可以调起测试吗?

生成的报告会乱码怎么办?

像这样的junit.framework.AssertionFailedError: ����Ⱥ�Ի��� expected: but was:

#13楼 @bajao 浏览器自己改字符编码为GBK即可

#14楼 @bajao 乱码请修改浏览器 字符编码为GBK

Nexus 7-Android 5.1.1截图报错怎么破,是跟Android5.1.1系统有关吗:
Caused by: java.lang.IllegalAccessException: Unable to create output dir: /storage/emulated/0/app_spoon-screenshots
Android 4.4.4的设备无此问题。

#17楼 @yuweixx spoon源码中对5.0及以上的系统是做了处理的,但还是有问题~~

rivate static File obtainScreenshotDirectory(Context context, String testClassName,
String testMethodName) throws IllegalAccessException {
File screenshotsDir;
if (Build.VERSION.SDK_INT >= 21) {
// Use external storage.
screenshotsDir = new File(getExternalStorageDirectory(), "app_" + SPOON_SCREENSHOTS);
} else {
// Use internal storage.
screenshotsDir = context.getDir(SPOON_SCREENSHOTS, MODE_WORLD_READABLE);
}

#18楼 @yuweixx 搞定了,被测程序中需加入

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

赞。。

@shixue33 有没有碰到截图失败的,就是没有截到图片,也没创建app_spoon_screenshots 文件夹。
我写的代码

spoon.screenshot(solo.getCurrentActivity(), "aa"+counts);

#21楼 @best1196 有设置了读写sd卡的权限吗?

这玩意儿最大的亮点是多设备执行Instrumentation test,我用的fork

剪烛 #24 · October 24, 2015 作者

#23楼 @shenkai600 多设备执行是个亮点,但我觉得gif显示测试过程是很新奇的功能(_)

#24楼 @shixue33 我这边也试过这种方案,但是测试用例执行超过15个之后程序crash,测试进程也相应中断,美女有好的解决方案吗 呵呵

剪烛 #26 · November 03, 2015 作者

#25楼 @huadashao520 具体是什么情况?必崩?检查脚本了吗?错误信息提示什么?

#26楼 @shixue33 其实就是这个帖子提到的问题 https://testerhome.com/topics/3149

LZ,我是在Android studio上使用Robotium进行自动化测试的,测试apk该如何生成,是新建一个moudle,build生成apk这样吗?但是我在命令行上运行显示运行了0 test...如果不用spoon的话测试用例是可以正常运行的。
测试新手,希望楼主能看到并帮忙解答下问题,多谢了!

剪烛 #29 · July 18, 2016 作者

#28楼 @surprise 使用非正式签名生成的apk包就可以了

#15楼 @young 感谢,目前看下spoon还是比较方便的

#16楼 @young 每次修改好麻烦,有没有浏览器能强制每次都以GBK打开?

设置了浏览器编码还是乱码,日志也是乱码,截图第二个参数填什么呀。文件路径??

剪烛 #35 · November 14, 2016 作者

#32楼 @Jhon 应该是截图的自定义文件名

@shixue33 秒回啊,厉害。

@shixue33 试了下,第二个参数,我填的的是一个绝对路径的文件名,D:\test\apk\spoon-output\image 但是报错了

#32楼 @Jhon 英文也是乱码?用的什么浏览器?
截图你是指 Spoon.screenshot(activity, "initial_state"); 中的 "initial_state"吗?

@yuweixx 截图对的,指的是initial_state,这个是什么鬼,

#39楼 @Jhon 这个是截图保存时的文件名

@yuweixx 噢噢。“xxx.jpg”就可以对嘛,我用的chrome浏览器

#41楼 @Jhon 不用带.jpg

#39楼 @Jhon 你图中的乱码应该不是啥重要信息,不用太在意

@yuweixx 我日志中的中文是乱码,看日志不好分析

#44楼 @Jhon 你用IE-GB2312试试

@yuweixx
日志就这个鬼样子,非常不利于分析日志


大家如果遇到报告乱码,可以这样解决,我用的是chrome,点击工具,选择编码,然后选择gbk 或则中文都试试,然后发现果真有用。之前设置错了地方,哈哈

@yuweixx Spoon 可以运行espresso 测试项目嘛???好像espresso 要基于源码。

#48楼 @Jhon Distributing instrumentation tests to all your Androids.
理论上支持所有基于instrumentation的Android测试框架。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up