Android测试二----InstrumentationTestRunner运行测试用例机制
2015-08-10 22:17
691 查看
前面讲到am怎么启动cts的测试进程,接下来了解下测试用例是如何被运行的。
在Android的cts测试中,AndroidManifest.xml中的instrumentation实际配置的是InstrumentationCtsTestRunner,在该类中会做一些测试环境初始化操作。
我们这里直接从InstrumentationTestRunner开始讲:
1.InstrumentationTestRunner.java
首先进入onCreate方法:
这里getTargetContext拿到的是cts进程的上下文,getContext拿到的是测试用例所在包的context。
android中TestSuite相当于一个测试盒,里面可以有很多测试包、测试类,而这个TestSuite是通过TestSuiteBuilder来获取的。按照理解newTestSuiteBuilder对象的时候,第一个参数为当前类名,即InstrumentationTestRunner,表示生成的suite里面的测试用例都是跑在InstrumentationTestRunner中。第二个参数是类下载器,用来获得要测试的类。
分析相应的测试类中有哪些方法
这里就看到mTestRunner这个对象,android中其实就是通过它去运行测试用例的,上面就是对TestRunner设置一系列参数,让其能正确执行测试类中的测试用例。
另外,TestSuiteBuilder通过build()方法创建了相应的TestSuite
TestRunner设置自己要运行的Test
mTestCount记录了要运行的用例数量
最后执行start(),接着去运行onStart()
2.
增加TestRunner中的结果打印的监听,通过这些打印会生成cts报告
通过TestRunner中的runTest方法去执行相应的用例
3.AndroidTestRunner.java
在Android的cts测试中,AndroidManifest.xml中的instrumentation实际配置的是InstrumentationCtsTestRunner,在该类中会做一些测试环境初始化操作。
我们这里直接从InstrumentationTestRunner开始讲:
1.InstrumentationTestRunner.java
首先进入onCreate方法:
// Apk paths used to search for test classes when using TestSuiteBuilders. String[] apkPaths = {getTargetContext().getPackageCodePath(), getContext().getPackageCodePath()}; ClassPathPackageInfoSource.setApkPaths(apkPaths);
这里getTargetContext拿到的是cts进程的上下文,getContext拿到的是测试用例所在包的context。
TestSuiteBuilder testSuiteBuilder = new TestSuiteBuilder(getClass().getName(), getTargetContext().getClassLoader());
android中TestSuite相当于一个测试盒,里面可以有很多测试包、测试类,而这个TestSuite是通过TestSuiteBuilder来获取的。按照理解newTestSuiteBuilder对象的时候,第一个参数为当前类名,即InstrumentationTestRunner,表示生成的suite里面的测试用例都是跑在InstrumentationTestRunner中。第二个参数是类下载器,用来获得要测试的类。
parseTestClasses(testClassesArg, testSuiteBuilder);
分析相应的测试类中有哪些方法
mTestRunner = getAndroidTestRunner(); mTestRunner.setContext(getTargetContext()); mTestRunner.setInstrumentation(this); mTestRunner.setSkipExecution(logOnly); mTestRunner.setTest(testSuiteBuilder.build()); mTestCount = mTestRunner.getTestCases().size(); ...... start()
这里就看到mTestRunner这个对象,android中其实就是通过它去运行测试用例的,上面就是对TestRunner设置一系列参数,让其能正确执行测试类中的测试用例。
另外,TestSuiteBuilder通过build()方法创建了相应的TestSuite
TestRunner设置自己要运行的Test
mTestCount记录了要运行的用例数量
最后执行start(),接着去运行onStart()
2.
try { StringResultPrinter resultPrinter = new StringResultPrinter(writer); mTestRunner.addTestListener(resultPrinter); long startTime = System.currentTimeMillis(); mTestRunner.runTest(); long runTime = System.currentTimeMillis() - startTime; resultPrinter.print(mTestRunner.getTestResult(), runTime);
增加TestRunner中的结果打印的监听,通过这些打印会生成cts报告
通过TestRunner中的runTest方法去执行相应的用例
3.AndroidTestRunner.java
public void runTest(TestResult testResult) { mTestResult = testResult; for (TestListener testListener : mTestListeners) { mTestResult.addListener(testListener); } Context testContext = mInstrumentation == null ? mContext : mInstrumentation.getContext(); for (TestCase testCase : mTestCases) { setContextIfAndroidTestCase(testCase, mContext, testContext); setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation); setPerformanceWriterIfPerformanceCollectorTestCase(testCase, mPerfWriter); testCase.run(mTestResult); } }这里使用一个for循环,循环执行解析出来放在mTestCases中的测试用例, 同时我们会看到里面会根据测试用例的不同,调用不同的set方法进行设置, 然后才去执行run,结果放在mTestResult中。
相关文章推荐
- 快速掌握 Android Studio 中 Gradle 的使用方法
- 完美解决Android SDK Manager无法更新
- Android从SD卡加载大图裁剪为指定大小
- Android测试一----am启动应用流程
- android 声音抢焦点
- Ubuntu Kylin 14.04 64位系统安装Android Studio
- Android(java)学习笔记148:Eclipse中代码提示去掉@override,不然就报错!
- Android 如何获取view的宽高
- android view移动总结
- android meta-data的一个大坑--long类型数据
- Android JSON 解析库的使用 - Gson 和 fast-json
- Android 编程下的 EditView 阻止软键盘自动弹出__图片资源文件后缀不能为.ico
- Android中JNI的使用方法
- android ListView详解
- Android之Handler机制
- Android Synchronization Fences – An Introduction
- Android之事件传递机制
- android开发中遇到的问题汇总【八】
- Android View.onMeasure方法的理解
- AndroidStudio配置Androidannotation