AWS 设备场是不是支持带有 serenity BDD 和 Gradle 的 Appium?

Posted

技术标签:

【中文标题】AWS 设备场是不是支持带有 serenity BDD 和 Gradle 的 Appium?【英文标题】:Does AWS device farm supports Appium with serenity BDD & Gradle?AWS 设备场是否支持带有 serenity BDD 和 Gradle 的 Appium? 【发布时间】:2019-02-16 20:44:04 【问题描述】:

我想使用 AWS Device Farm 进行移动应用程序测试,但根据他们的文档,我看不到对 Appium with Serenity BDD & Gradle 的任何支持。

我已经看到 AWS 设备场支持以下内容

测试类型配置

Appium JUnit
Appium TestNG
Built-in: Explorer
Built-in: Fuzz
Calabash

谁能确认设备场是否支持Appium with Serenity BDD & Gradle?我在他们的论坛中找不到这个答案。

如果支持,还可以分享一些例子吗?

谢谢

Vamc

【问题讨论】:

你找到anwser了吗? 还没有@alansiqueira27 【参考方案1】:

我相信在 Device Farm 中安排运行时,使用 custom environments 选项应该可以做到这一点。诚然,我没有平静的经验,但这里是使用黄瓜测试的博客。

https://aws.amazon.com/blogs/mobile/testing-mobile-apps-with-cucumber-and-appium-through-testng-on-aws-device-farm/

看起来宁静与黄瓜相似或延伸,因此理论上这可能有效。

[编辑]

以下是一些简短的 gradle 构建任务,它们应该有助于为 Device Farm 创建测试包。

注意:这假设依赖项在 build.gradle 文件中的结构如下:

dependencies 

    testCompile(
            'net.serenity-bdd:serenity-junit:2.0.18',
            'net.serenity-bdd:serenity-cucumber:1.9.20',
            'org.assertj:assertj-core:3.11.1',
            'ch.qos.logback:logback-classic:1.2.3',
            'io.github.bonigarcia:webdrivermanager:3.0.0'
    )

示例 build.gradle 代码

//source: https://***.com/a/27455099/8016330
task getDeps(type: Copy) 
    from sourceSets.test.runtimeClasspath
    // if you need this from the dependencies in the build.gradle then it should be : 
    // from sourceSets.main.runtimeClasspath
    into 'build/libs/dependency-jars'


//packaging tests task which is generated from sample using gradle init
task packageTests(type: Jar) 
    dependsOn getDeps
    from sourceSets.test.output
    classifier = 'tests'


//create zip archive
//source: https://***.com/a/36883221/8016330
task zip(type: Zip) 
    dependsOn packageTests
    from 'build/libs/'
    include '*'
    include '*/*' //to include contents of a folder present inside dependency-jars directory
    archiveName 'zip-with-dependencies.zip'
    destinationDir(file('build/libs/'))

那么您应该可以使用以下命令创建 zip 文件:

./gradlew clean zip

注意:您需要使用 clean 命令,否则它会将之前的 zip 存档打包到新的 zip 存档中。

-詹姆斯

【讨论】:

谢谢你的回答,但我看到你分享的那个链接上有黄瓜和testNG,它是maven。我对 gradle 很平静,这对我不起作用,因为我尝试在 build.gradle 上使用设备场配置并且不支持设备场插件。 所以更多的是如何打包测试还是 Gradle 插件的问题?应该可以使用 Gradle 打包测试,但我需要花更多时间来编写解决方案。看起来 Gradle 也有自动转换 guides.gradle.org/migrating-from-maven/#automated_conversion 所以我们可以在 maven 项目中运行 Gradle init,这可能会创建所需的任务 看起来它是 gradle 插件的问题,因为当我重建项目时,抛出错误 The android or android-library has not been applied yet Open File 其中打开的文件是一个链接,点击导航到 build.gradle 上的 apply plugin: 'devicefarm' 行而且我正在使用带有 gradle 的 serenity 框架,它使用 serenity-junit 和 serenity-cucumber,我不在我的脚本中使用 @Test。只是从评论中不清楚,因为我的项目已经是一个 gradle 项目,你是说创建一个 maven 项目并运行 gradle init 对吗? 我认为这可能是一个选择是的。但是,听起来这是插件的问题。我会尝试更多地尝试它,然后告诉你我发现了什么。 @vamc 我刚刚更新了答案(抱歉耽搁了)。让我知道这是否有帮助【参考方案2】:

从上面的答案中,我能够构建没有依赖项文件夹的 zip 文件,因此我努力找出如何按照设备场的预期构建具有依赖项的 zip 文件。这是在 build.gradle 文件中添加依赖项的方法,通过上述任务(从上面复制),我们可以看到在 zip 文件中添加了依赖项文件夹。

    dependencies     
            runtime group: 'net.serenity-bdd', name: 'serenity-junit', version: '2.0.18'
            runtime group: 'net.serenity-bdd', name: 'serenity-cucumber', version: '1.9.20'
            runtime group: 'net.serenity-bdd', name: 'serenity-reports-configuration', version: '1.9.43'
            runtime group: 'org.assertj', name: 'assertj-core', version: '3.11.1'
            runtime group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
            runtime group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '3.0.0' 
        

dependencies 

    testCompile(
            'net.serenity-bdd:serenity-junit:2.0.18',
            'net.serenity-bdd:serenity-cucumber:1.9.20',
            'org.assertj:assertj-core:3.11.1',
            'ch.qos.logback:logback-classic:1.2.3',
            'io.github.bonigarcia:webdrivermanager:3.0.0'
    )


task getDeps(type: Copy) 
    from sourceSets.main.runtimeClasspath
    into 'build/libs/dependency-jars'


//packaging tests task which is generated from sample using gradle init
task packageTests(type: Jar) 
    dependsOn getDeps
    from sourceSets.test.output
    classifier = 'tests'


//create zip archive
task zip(type: Zip) 
    dependsOn packageTests
    from 'build/libs/'
    include '*'
    include '*/*' //to include contents of a folder present inside dependency-jars directory
    archiveName 'zip-with-dependencies.zip'
    destinationDir(file('build/libs/'))

【讨论】:

以上是关于AWS 设备场是不是支持带有 serenity BDD 和 Gradle 的 Appium?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AWS 设备场打开和关闭通知面板

AWS 设备场似乎忽略了 TestNG 注释

每次设备连接并发送数据时,是不是使用带有 aws-iot (wss) 的自定义授权方创建一个新设备?

无法读取 aws 设备场中的属性文件

是否可以将空手道与 AWS 设备场一起用于 Android 和 iOS 测试?

如何在aws设备场中为android espresso每次测试运行后清除设备数据