Android自动化测试生成单元测试结果报告

 使用robotium进行Android应用进行自动化测试,之前用TMTS框架,但收集到的单元测试结果常常会少掉一些用例集。。穷则思变,Android的测试框架主要是通过InstrumentationTestRunner对被测应用进行控制与执行,因此可以对InstrumentationTestRunner进行扩展以完成测试结果收集,然后通过jenkins的Publish JUnit test result report插件得到结果报告。

  1.新建一个java package,新建一个java类

  源码来自开源项目:https://code.google.com/p/nbandroid-utils/

  源码中生成的TEST-all.xml结果文件位于/data/data/com.example/files目录下,要导出结果文件的话,需要手机拥有root权限,比较麻烦,因此下面修改了文件存放路径,有SD卡则文件位于SD卡的/robotium目录下


package com.example.test.instrumentation;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

import org.xmlpull.v1.XmlPullParserFactory;

import org.xmlpull.v1.XmlSerializer;

import android.content.Context;

import android.os.Bundle;

import android.os.Environment;

/**

* This test runner creates a TEST-all.xml in the files directory of the application under test. The output is compatible with that of the junitreport ant task, the format

* that is understood by Hudson. Currently this implementation does not implement the all aspects of the junitreport format, but enough for Hudson to parse the test results.

*/

public class InstrumentationTestRunner extends android.test.InstrumentationTestRunner {

private Writer mWriter;

private XmlSerializer mTestSuiteSerializer;

private long mTestStarted;

private static final String JUNIT_XML_FILE = "TEST-all.xml";

@Override

public void onStart() {

try{

File fileRobo = new File(getTestResultDir(getTargetContext()));

if(!fileRobo.exists()){

fileRobo.mkdir();

}

if(isSDCardAvaliable()){

File resultFile = new File(getTestResultDir(getTargetContext()),JUNIT_XML_FILE);

startJUnitOutput(new FileWriter(resultFile));

}else{

startJUnitOutput(new FileWriter(new File(getTargetContext().getFilesDir(), JUNIT_XML_FILE)));

}

}

catch(IOException e){

throw new RuntimeException(e);

}

super.onStart();

}

void startJUnitOutput(Writer writer) {

try {

mWriter = writer;

mTestSuiteSerializer = newSerializer(mWriter);

mTestSuiteSerializer.startDocument(null, null);

mTestSuiteSerializer.startTag(null, "testsuites");

mTestSuiteSerializer.startTag(null, "testsuite");

} catch (Exception e) {

throw new RuntimeException(e);

}

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-03 06:35:12

Android自动化测试生成单元测试结果报告的相关文章

《精通移动App测试实战:技术、工具和案例》一2.3 应用JUnit对Android项目进行单元测试

2.3 应用JUnit对Android项目进行单元测试 2.3.1 JUnit基于Android项目TestCase的应用 如果我们对基于Android系统项目开发有一定了解的话,相信一定能看出来,其核心代码是计算两个整数相加的函数.我们做单元测试当然也挑选其最核心的函数来进行测试.可以按照如下的步骤来创建一个基于Android项目的测试用例(TestCase). 第一步:选中"CalculatorOfTwoNum"项目下的"src"目录中的"com.yu

在Android中进行单元测试遇到的问题

问题1.Cannot connect to VM  socket closed 在使用JUnit进行测试的时候,遇到这个问题.网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还是本地JVM都会进行Socket通讯.发生这样的错误是由于这些软件会修改winsock,还会监听和占用一些端口,Socket通讯不上造成的. 我通过cmd →ping localhost ,发现localhost指向::1,这是因为我的系统是win7 ,它支持IPv6的原因.而Eclipse需要lo

Android短信群发 发送报告问题

问题描述 Android短信群发 发送报告问题 现在把所有的号码都保存到了AllNumbersList列表里,现在发送的话,只能是每条信息都接受状态.举例说明现在的效果是:每发一条信息(比如ABC),A的发送和回执状态Toast显示一次,然后B的再显示,然后再C的--依此类推...而需要的效果:所有信息发送成功后(如果发送的时候能显示进度最好,我想的是使用progressBar,不知道还有没有更好的办法?),显示为短信全部发送完毕,或者哪条没有发送成功把单条列出来.接受回执报告也是如此.不知道各

Android最佳Mock单元测试方案:Junit + Mockito + Powermock

本文旨在从实践出发,引导开发者在Android项目中进行Mock单元测试. 什么是单元测试 单元测试由一组独立的测试构成,每个测试针对软件中的一个单独的程序单元.单元测试并非检查程序单元之间是否能够合作良好,而是检查单个程序单元行为是否正确. 为什么要进行单元测试 在敏捷开发大行其道的今天,由于时间紧,任务重,过分依赖测试工程师以及下列原因,导致单元测试不被重视,在开发流程中处于一个可有可无的尴尬境地. 1. 浪费的时间太多 1. 软件开发人员不应参与单元测试 1. 我是很棒的程序员,不需要进行

Android下junit单元测试、logCat的使用

Android下junit单元测试 软件测试小知识: 根据测试是否知道源代码:黑盒测试:只关心程序执行的过程和结果白盒测试:根据源代码写测试方法或者测试用例. 根据测试的粒度: 方法测试:function test单元测试:unit test 集成测试:intergration test 根据测试的次数: 冒烟测试:smoke test(android 猴子) 压力测试:prssure testAndroid单元测试: 1.Android测试类要继承AndroidTestCase类 2.写测试方

简单谈谈android studio 的单元测试_Android

面对android studio Run 一次项目要等好几分钟的痛点,不得不研究一下android studio 的单元测试. 其实我的目的很简单,在不对视图进行操作的前提下,测试一些activity 的生命周期,或网络拉取数据的一些处理,比如解析 json 数据啊,做网络请求啊等等,也就是对 Model层的测试.这些不需要操作视图,但在没有单元测试环境下,比如我们网络请求一些数据,Log 打印看看是否请求成功,却又要 利用模拟器或真机Run 一次项目,花费好几分钟,这是不能容忍的. 于是乎,强

Android编程之单元测试实例分析_Android

本文实例讲述了Android编程之单元测试用法.分享给大家供大家参考,具体如下: 在实际开发中,开发android软件的过程需要不断地进行测试.使用Junint测试框架,是正规Android开发的必用技术,在Junint中可以得到组件,可以模拟发送事件和检测程序处理的正确性.单元测试是嵌入到项目中:也可以作为一个单独的项目争对某个具体项目进行测试. 第一步:首先在AndroidManifest.xml中加入下面红色代码: <manifest xmlns:android="http://sc

Android开发之Ruby实现Android自动化屏幕适配

背景:我相信对于Android开发者来说,屏幕适配一直是你心中的痛-,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本.下面来讲一下思路. 首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适配的尺寸

使用Junit对Android应用进行单元测试

在本文中,你将会学习到如何在Eclipse中创建Android JUnit的单元测试工程以及在不同的条件下创建及运行自动测试用例. 准备工作 本文假设读者已经有一定的Android基础知识,并且已经安装了Eclipse和Android SDK等开发工具.本文将指导读者如何将Android Junit框架应用到Android应用中去.本文还特别重点展示了如何测试Android中的Activity和如何识别程序中的错误. 本文的示例代码可以在http://code.google.com/p/simp