标签: spoon

在Jenkins中执行测试时的"unknown-sdk"设备

在尝试运行测试时,我和Jenkins有一个奇怪的情况.

作业的配置明确指定在这个特定的avd上运行测试:" hudson_en-US_160_HVGA_android-18_armeabi-v7a ",但由于一些奇怪的原因,在构建过程中,找到了2个设备.其中一个设备是前一个设备,但另一个设备称为" unknown-sdk ".

在此输入图像描述

测试在特定的avd上成功执行,并在"unknown-sdk"上失败:

日志的相关部分:

[SR.runTests]在2个设备上执行检测套件.
[SR.runTests] [emulator-8215]开始执行.
[SR.runTests] [localhost:8216]开始执行.

在不知名的-sdk-localhost上运行am -w -r -e class com.smoke.tests.LoginTest com.muume.dev.test/android.support.test.runner.AndroidJUnitRunner:8216

2015-06-17 11:54:05 [SDR.printStream] [localhost:8216] STDOUT 11:54:05 I/InstrumentationResultParser:测试运行失败:'无法找到以下内容的检测信息:ComponentInfo {com.muume.dev.测试/ android.support.test.runner.AndroidJUnitRunner}

正如您所看到的,它检测到2个设备:emulator-8215,这是已知的avd,localhost-8216是未知的并导致问题.

我的问题是如何限制测试只运行一个单独的模拟器,以及"unknown-sdk-localhost"来自何处.

android jenkins spoon spoon-gradle-plugin

26
推荐指数
1
解决办法
404
查看次数

Android Gradle app:connectedCheck从依赖项运行测试

我有一些库项目有自己的测试.我不负责这个库项目并且不关心它的测试,但是,当我运行gradle :app:connectedCheck它时运行我的测试但它也运行依赖项的测试.有什么办法可以阻止这个吗?

我应该提一下,我的依赖关系不在app我所说的模块中.

编辑:更具体地说,我依赖的图书馆项目有非常长的测试,因为他们打算在凌晨2点在构建服务器上运行,所以我坐在这里等待油漆干燥只是为了让我真的很短试验.

EDIT2:我也尝试过使用Spoon.我现在已经安装它并可以运行单个类,但我想在一个包中运行所有内容.那可能吗?

编辑3:文件夹结构是无关紧要的,但这是一个非常非常详细的外观:

root
-some_library_project
-main_project
-settings.gradle
Run Code Online (Sandbox Code Playgroud)

main_project build.gradle看起来像这样.我应该提一下勺子目前什么都不做,但我的选择是开放的:

buildscript{
 repositories {
     jcenter()
 }
 dependencies{
     classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.10.+'
 }
}

apply plugin: 'com.android.application'
apply plugin: 'spoon'

android {
    compileSdkVersion 20
    buildToolsVersion '20.0.0'

 defaultConfig {
    applicationId "com.something.main_project"
    minSdkVersion 17
    targetSdkVersion 20
    versionCode 1
    versionName "1.0"

    testPackageName "com.something.main_project.test"
    testInstrumentationRunner "android.test.InstrumentationTestRunner"

 }

 signingConfigs {
    debug {
        storeFile file("debug.keystore")
    }

    release {
        storeFile file("release.keystore")
        storePassword "something"
        keyAlias "something"
        keyPassword "something"
    }
 }

 buildTypes {
    release {
        runProguard false …
Run Code Online (Sandbox Code Playgroud)

android gradle spoon

14
推荐指数
1
解决办法
5506
查看次数


RuntimeException:无法创建输出目录:/ storage/emulated/0/app_spoon-screenshots

我正在使用Spoon 2.0.0快照使用gradle-spoon-plugin为Android UI测试设置Spoon .我的项目是使用Android Gradle插件3.0.1设置的.

通过截屏时spoonRule.screenshot(activity, "hello"),我得到了这个RuntimeException:

java.lang.RuntimeException: Unable to create output dir: /storage/emulated/0/app_spoon-screenshots
at com.squareup.spoon.SpoonRule.createDir(SpoonRule.java:167)
at com.squareup.spoon.SpoonRule.createDir(SpoonRule.java:164)
at com.squareup.spoon.SpoonRule.createDir(SpoonRule.java:164)
at com.squareup.spoon.SpoonRule.obtainDirectory(SpoonRule.java:108)
at com.squareup.spoon.SpoonRule.screenshot(SpoonRule.java:66)
Run Code Online (Sandbox Code Playgroud)

如果我在Nexus 4 API 19仿真器上运行它,但它在Pixel 2 API 27仿真器上无法正常工作.权限已从19变为27,所以这并非完全出乎意料.

我已经尝试了当前可用的大部分建议,包括在我的androidTest目录中添加一个清单,用于授予读写外部存储(使用和不使用maxSdkVersion):

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="tv.twitch.android.test">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>

    <uses-sdk tools:overrideLibrary="android.support.test.uiautomator.v18"/>

</manifest>
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都看到这些权限被合并到我的应用程序AndroidManifest的最终清单中(不确定如何检查测试应用程序的清单).

我已经尝试通过UIAutomator向应用和测试包授予权限:

val device = UiDevice.getInstance(getInstrumentation())
device.executeShellCommand("pm grant tv.twitch.android.test android.permission.READ_EXTERNAL_STORAGE")
device.executeShellCommand("pm grant tv.twitch.android.debug android.permission.READ_EXTERNAL_STORAGE")
device.executeShellCommand("pm grant tv.twitch.android.test android.permission.WRITE_EXTERNAL_STORAGE")
device.executeShellCommand("pm grant tv.twitch.android.debug android.permission.WRITE_EXTERNAL_STORAGE")
Run Code Online (Sandbox Code Playgroud)

这将输出一个Permission …

android ui-testing spoon barista

9
推荐指数
1
解决办法
1158
查看次数

Android上的参数化检测测试

我正在尝试为每次测试运行时更改意图ActivityInstrumentationTestCase2的特定Activity位置编写一个批量检测测试(使用).我可以通过一次测试来完成这项工作,然后循环使用新意图停止并重新启动Activity,但这不是我想要的.一个原因是它们确实应该是单独的测试运行.另一个原因是,我正在使用Spoon在测试结束时生成报告,报告将正确地认为我只运行了一次测试.

我想要的是将单个测试视为可能无限多的测试,并在每次测试运行时将数据传递给测试.

遗憾的是,您无法使用Theories,因为它会导致RunmentationException,其中InstrumentationTestRunner无法找到我的测试.有人有运气吗?

junit instrumentation android spoon

7
推荐指数
1
解决办法
739
查看次数

Android检测代码覆盖率报告,包括所有应用程序模块

我有一个包含多个库模块的Android项目.在应用程序模块中,我有一些测试应用程序主要功能的测试测试,我想在运行这些测试时记录代码覆盖率.

运行gradle任务"createDebugCoverageReport"时,会生成coverage报告(coverage.ec文件和html报告),但它显示只覆盖应用程序模块中的类,甚至还使用了库模块中的类.

我还尝试用勺子 - gradle-plugin使用Spoon记录测试覆盖率.在这种情况下,覆盖率报告仅覆盖应用程序模块中的类.

在运行检测测试时,有没有办法获得所有库模块的代码覆盖率?

我已经在每个模块中添加了以下内容:

debug {
  testCoverageEnabled true
}
Run Code Online (Sandbox Code Playgroud)

android code-coverage spoon android-instrumentation spoon-gradle-plugin

6
推荐指数
0
解决办法
425
查看次数

使用Espresso和Spoon运行特定测试

我正在使用EspressoSpoon进行我的Android测试.我对这些非常满意.我唯一的问题是我正在尝试运行特定的测试.我在勺子网站上发现了这个:

gradle spoon -PspoonClassName = fully.qualified.TestCase

但我不能让这个工作.它仍然运行我所有的测试.有什么建议?我这样运行命令:

gradle spoon -PStressTest = com.espresso.websocket

StressTest我的班级在哪里,com.espresso.websocket是我的包裹.

android android-testing spoon android-espresso

5
推荐指数
1
解决办法
3007
查看次数

为Spoon Gradle Plugin设置applicationApk和instrumentationApk

我想设置.apk文件,用于使用SpoonGradlePlugin运行我的测试.

我可以通过gradle文件以编程方式设置可用的属性:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonExtension.groovy

但我的项目有各种口味和名称,我想测试它们.通过当前设置,我得到:

* What went wrong:
A problem was found with the configuration of task ':app:spoonDebugAndroidTest'.
> File '/Users/F1sherKK/Dev/MyApp-Android/app/build/outputs/apk/app-debug.apk' specified for property 'applicationApk' does not exist.
Run Code Online (Sandbox Code Playgroud)

我的构建名称是:

app-debug-androidTest-unaligned.apk
MyApp-debugA-1.2.3-201.apk
MyApp-debugB-1.2.3-201.apk
MyApp-debugC-1.2.3-201.apk
Run Code Online (Sandbox Code Playgroud)

这就是为什么我想在gradle代码中设置我的.apk - 或者控制台.到目前为止我发现Spoon Gradle插件中有可用的字段:

https://github.com/stanfy/spoon-gradle-plugin/blob/master/src/main/groovy/com/stanfy/spoon/gradle/SpoonRunTask.groovy

名字:

  /** Instrumentation APK. */
  @InputFile
  File instrumentationApk

  /** Application APK. */
  @InputFile
  File applicationApk
Run Code Online (Sandbox Code Playgroud)

但我不能在SpoonExtension.groovy中访问gradle中的属性.

有没有办法设置这些字段?

//编辑 - 添加了一些尝试:这是我的基础配置:

spoon {
    debug = true
    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    } …
Run Code Online (Sandbox Code Playgroud)

groovy android gradle spoon android-instrumentation

5
推荐指数
2
解决办法
1416
查看次数

使用Spoon/Espresso通过命令行传递变量(android-test-kit)

我正在用Spoon进行Espresso测试.如何在运行时将值传递给我的测试?我做的事情是这样过,但我没有一个在我的咖啡测试.那么,我应该如何传递它们呢?onCreate


目前我通过命令运行我的测试:

gradle勺子

android android-testing spoon

4
推荐指数
1
解决办法
821
查看次数

通过spoon-gradle插件从特定包运行仪器测试

我正在使用Roman Mazur 的勺子gradle插件。我能够一次运行所有测试,但我无法指定要启动的“组”测试。目前我的勺子设置看起来像这样:

spoon {
    debug = true

    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    }

    adbTimeout = 60 * 60;
}
Run Code Online (Sandbox Code Playgroud)

我的测试位于包中:

在此处输入图片说明

我的目标是创建单独的 gradle 任务,这些任务依赖于勺子分别从每个包启动测试。Roman 给了我们参数instrumentationArgs,它应该能够编辑勺子内的一些属性。

正如我在勺子的主 git 上看到的那样,你可以指定包,勺子运行器应该在其中查找你的测试,示例如下:

--e package=com.mypackage.unit_tests
Run Code Online (Sandbox Code Playgroud)

所以我的想法是把这个属性放到 instrumentationArgs 中。因此,我创建了这样的勺子任务:

task spoonAuthFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests.AuthFlowTests"]
        noAnimations = true;
    }
}

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"]
        noAnimations = true; …
Run Code Online (Sandbox Code Playgroud)

java android spoon android-instrumentation

4
推荐指数
1
解决办法
2086
查看次数

Android:UI协作(Jenkins + Spoon +?)

我非常喜欢Android自动测试的想法.
我尝试过Spoon,它可以在不同的设备上预览UI的当前状态.
问题是如何与团队(开发人员/ UI/UX)有效地共享它.

我想要的是:构建服务器(Jenkins)触发Robotium + Spoon测试,它获取每个屏幕的屏幕截图,然后构建服务器将Spoon的结果发布到一些web-app(?),在那里我们可以看到所有的Spoon报告按日期分组,我们可以在每个截图上留下评论.
什么网络应用程序符合我的需求?

user-interface android robotium jenkins spoon

3
推荐指数
1
解决办法
1233
查看次数

应用程序选择器 - Android Espresso单元在打开外部URL后测试中断

我有一个带有登录屏幕的Android应用程序,其中还包含一个忘记密码按钮,可以将您带到网站以获得进一步的帮助.我正在使用Spoon和Espresso进行测试,具有以下简单的测试功能:

@Test
public void testForgotPassword()
{
    onView(withId(R.id.login_forgot_password)).perform(click());

    intended(allOf(
            hasAction(Intent.ACTION_VIEW),
            hasData(BuildConfig.FORGOT_PW_URL)));
}
Run Code Online (Sandbox Code Playgroud)

此测试通过正常,并在屏幕上显示"使用浏览器/ chrome对话框完成操作",这是此设备的正确行为.到目前为止都很好.但是,只要该对话框保留在那里,任何后续测试都无法打开应用程序,在长时间停顿并且测试失败后返回异常.

如何更新测试以主动摆脱对话框,或者确保我可以继续进行剩余的单元测试?

完整的例外情况供您参考:

2016-04-21 17:37:04 [STRL.testFailed] failed java.lang.RuntimeException: Could not launch intent Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=nl.test.example/.ui.activity.login.LoginActivity_ } within 45 seconds. Perhaps the main thread has not gone idle within a reasonable amount of time? There could be an animation or something constantly repainting the screen. Or the activity is doing network calls on creation? See the threaddump logs. For your reference the last time the event queue …
Run Code Online (Sandbox Code Playgroud)

android unit-testing spoon android-espresso

3
推荐指数
1
解决办法
1219
查看次数