android gradle + junit + jacoco 集成jenkins,sonar系统

来源:互联网 发布:js插件的写法 编辑:程序博客网 时间:2024/05/16 09:34

首先gradle 文件配置如下:

apply plugin: 'jacoco'android {    compileSdkVersion 25    buildToolsVersion "25.0.3"    defaultConfig {        applicationId "com.javaandroidunittestdemo"        minSdkVersion 23        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }debug{            testCoverageEnabled true        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.+'    testCompile 'junit:junit:4.12'}jacoco{ toolVersion = "0.7.7.201606060606"} task jacocoTestReport(type: JacocoReport,dependsOn:"testDebugUnitTest") {    def coverageSourceDirs = [            "src"    ]    group = "Reporting"    description = "Generate Jacoco coverage reports after running tests."//ignoreFailures = true    jacoco {        reportsDir = file("../report/test-results/")    }def utilTest = '/build/jacoco/testDebugUnitTest.exec'executionData = fileTree(utilTest)    reports {           xml{               enabled true               //Following value is a file               destination "${buildDir}/reports/jacoco/xml/jacoco.xml"             }             csv.enabled false             html{                 enabled true                 //Following value is a folder                 destination "${buildDir}/reports/jacoco/html"             }    }    classDirectories = fileTree(            dir: "./build/intermediates/classes/debug",            excludes: ['**/R.class',                       '**/R$*.class',                       '**/*$ViewInjector*.*',                       '**/BuildConfig.*',                       '**/Manifest*.*']    )    sourceDirectories = files(coverageSourceDirs)    additionalSourceDirs = files(coverageSourceDirs)    }

注意:这个 

debug{            testCoverageEnabled true        }

一定要打开,因为我们对debug进行单元测试。


在jenkins上我们配置gradle script:


然后配置sonar-scanner:


指明 jacoco.exec文件和 test-result文件路径。


有的用户直接在gradle 脚本里面添加build.



这样就是直接执行用户的 gradle脚本。


但是用户有时候在脚本里面配置了其他测试:

def coverageSourceDirs = [        '../epa_new_android/src/main/java']task jacocoTestReport(type: JacocoReport, dependsOn: ["testDebugUnitTest", "connectedDebugAndroidTest"]) {    doFirst {        delete('../report/testUnitTest.exec')        delete('../report/androidTestUnitTest.ec')//        File file1 = new File('../report/test-results/jacocoTestReport');//        file1.deleteDir();        delete('../report/test-results/')    }    jacoco {        reportsDir = file("../report/test-results/")    }    group = "Reporting"    description = "Generate Jacoco coverage reports"    classDirectories = fileTree(            dir: '/build/intermediates/classes/debug',            excludes: ['**/R.class',                       '**/R$*.class',                       '**/*$ViewInjector*.*',                       '**/BuildConfig.*',                       '**/Manifest*.*']    )    def utilTest = '/build/jacoco/testDebugUnitTest.exec'    def androidTestDir = '/build/outputs/code-coverage/connected/'    def androidTest    def androidTestFileName;    FileTree iotTree = fileTree(dir: androidTestDir, includes: ['*.ec'])    iotTree.each {        File file ->            androidTestFileName = file.name            androidTest = file.path    }    additionalSourceDirs = files(coverageSourceDirs)    sourceDirectories = files(coverageSourceDirs)    executionData = files(utilTest, androidTest)    reports {        xml.enabled = true        html.enabled = true    }    doLast {        copy {            from utilTest            into '../report'            rename("testDebugUnitTest.exec", 'testUnitTest.exec')        }        copy {            from androidTest            into '../report'            rename(androidTestFileName, 'androidTestUnitTest.ec')        }        copy {            from "/build/test-results"            into '../report/test-results/unittest'        }    }}
connectedDebugAndroidTest是关于模拟机的测试,这样在执行build gradle 之前需要改造。










阅读全文
0 0