Android测试二----InstrumentationTestRunner运行测试用例机制
来源:互联网 发布:网络舆情监测 编辑:程序博客网 时间:2024/06/07 11:06
前面讲到am怎么启动cts的测试进程,接下来了解下测试用例是如何被运行的。
在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中。
0 0
- Android测试二----InstrumentationTestRunner运行测试用例机制
- Android InstrumentationTestRunner 链接整理(白盒测试)
- android-----事件分发机制测试系列(二)
- android基础知识12:android自动化测试06—Instrumentation 05 InstrumentationTestRunner
- android 移植 ffmpeg (二) 测试用例
- android 移植 ffmpeg (二) 测试用例
- 用Android InstrumentationTestRunner 执行单个case
- Android测试(二) Monkey
- Android 自动化测试二
- Android测试(二)
- Android自动化测试之Robotium<二>:用例分析
- Gradle for Android-运行测试
- Vuforia for Android 运行测试
- android测试之二:monkey测试
- Android 测试用例
- Android测试用例-异步测试
- Android测试用例简单测试
- Elastos测试框架搭建--测试用例运行流程
- java基础入门
- spring 事务的配置方式
- 多值域相加
- 栈的链式存储实现
- UIlabel自适应高度和UITableViewCell自适应高度
- Android测试二----InstrumentationTestRunner运行测试用例机制
- JDBC及eclipse连接数据库
- Kth Smallest Element in a BST
- hdu 1558 并查集+线段相交
- 2015 深圳杯数模 B: DNA分子序列- RK算法
- 如何判断链表中是否有环
- strong,weak, retain, assign的区别
- sonarQube代码质量管理
- 【线段树】【NOI 1999】【cogs 284】内存分配