算算时间,还是去年开始学习的robotium,元旦请了一天假,总共玩了四天,期间一点东西都没有看,不过感觉还是比较充实,从毕业到现在也快半年了,没怎么好好玩Dota,也没怎么和朋友好好聚一聚,总算这四天把这些事情都做了一遍,总之心满意足,开心快乐就是极好的!
说回robotium,算一算时间其实也没看多久,加上今天也就整四天吧!不过总归在群里朋友的帮助下,加上可爱的程序员同事的帮助,还算是可以正常的写下一些自动化测试的语句。不过毕竟还是一只菜鸟,希望这篇博客可以给还在寻找入门的朋友一点帮助,说的不好的地方也希望朋友们可以给我留言加以指正。
本篇既然是总结,就不正儿八经的从头说起了,先把我的代码贴出来
package com.yolanda.cs10.test; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.Smoke; import com.robotium.solo.Solo; import com.yolanda.cs10.activity.LoginActivity; import junit.framework.TestCase; public class testcase extends ActivityInstrumentationTestCase2<LoginActivity> { private Solo solo; public testcase(){ super("com.example.hello",LoginActivity.class); } protected void setUp() throws Exception { solo = new Solo(getInstrumentation(),getActivity()); } @Smoke public void test1(){ solo.clickOnButton("登录"); solo.sleep(2000); solo.enterText(0, "130********"); solo.clickOnButton("登录"); } protected void tearDown() throws Exception { try { /*使用this.solo.finish()会无法运行第二个case*/ this.solo.finishOpenedActivities(); } catch (Throwable e) { // TODO: handle exception getActivity().finish(); super.tearDown(); } } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yolanda.cs10.test" android:versionCode="12" android:versionName="2.1.3" > <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="19" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.yolanda.cs10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <uses-library android:name="android.test.runner" /> </application> </manifest>
第一个代码是我的执行代码,当然里面只有一小段真正的测试用例,不过放在我这里已经足够了。第二个是Junit中的xml文件,在这里也有讲一下的必要。下面就结合着这些代码来讲一讲我遇到的一些问题。
首先,对于没有任何java和eclipse经验基础的朋友(我就是),肯定会不明白com.example.hello和LoginActivity是什么意思。。这样的话建议去我要自学网看一看Android开发的视频,不要很深入,看点相关的就可以了。com.example.hello就是你要测试的程序的一个包名,LoginActivity就是你要测试的具体哪个页面,这里面我有两个要说的:其一是很多大神看到我这个包名然后再看看我最开始写的包名会发现,这个com.example.hello根本不属于我要测试的项目中的东西,但是很奇怪,我写这个包名还是可以正常的运行我的测试代码,希望有知道的朋友可以告知一声,其二就是一个吐槽了,网络上找到的代码全是使用的MainActivity,最开始学习的时候傻傻分不清楚,也每个都用MainActivity,结果每次都给我报空指针异常(至于是不是因为调用Activity的问题我也不太确定),我真是醉了,后来才知道,你想要测试哪个Activity里的东西就要调用哪个Activity,不然就会出错,不过现在总算是明白了。不过我在网上找到的资料里面有说这个空指针是因为依赖库没有导入的问题,但是我确实已经导入,但是依然每次都报空指针,不知道有没有大神确定的知道这个空指针发生的原因。
再来说说第二个,就是不能找到solo类。其实这个问题在网上有很多资料,我这里也说一下,相当于给自己的一个整理吧。
1.右键点击你的测试工程(cstest)
2.找到Build Path
3.再点击它的子目录下的Add External
4.选择你下载的robotium-solo包,导入
5.重复1,2后在Build Path下面点击它子目录的Configure Build Path
6.点击Libraries后,在界面的右侧点击Add Libraries,弹出的界面中选中Junit->Junit3完成
7.回到Order and Export界面,选中robotium-solo和Junit3两个包,点击OK
完成上面的步骤就可以解决不能找到solo类的问题了。当然添加Junit3这个步骤可能和这个问题不搭边,不过不添加会产生什么影响我也不太清楚。
第三个问题,是一些配置上的问题,就算作一类吧。java代码里可能也有人注意到我的注释了。最开始在网上找到资料的时候,结束代码是这个样子的this.solo.finish(),但是每次都会碰到无法运行第二个case这个问题,在群里朋友的帮助下,总算是知道要使用this.solo.finishOpenedActivities();这段代码才能顺利的将第二个case顺利的运行起来。然后还有一个xml里面的配置如果不把这段代码加进去
android:versionCode="12"
android:versionName="2.1.3" 如果不把这段代码加进去,程序也会报一个版本不支持的错误。
暂时就这么多了
接下来准备先把robotium的API熟悉一下,当然也是边练边学,然后还需要找一下生成测试报告的资料,学习一下robotium生成测试报告的方法。。这两个搞完了然后完整的把整个测试运行一遍。
原文:http://www.cnblogs.com/MrYuandeblog/p/4201378.html