如何在 AWS Device Farm 中运行 maven 命令

Posted

技术标签:

【中文标题】如何在 AWS Device Farm 中运行 maven 命令【英文标题】:How to run maven command in AWS Device Farm 【发布时间】:2019-10-05 22:47:51 【问题描述】:

我正在尝试使用 maven 在设备场中运行我的 java 移动项目。 当我在本地机器上的正确目录中运行此命令时,它可以工作:

 mvn test -D "cucumber.options="src/test/java/cucumber/features" --glue 
cucumber.steps --tags @InstallApp"

我将此命令放在 aws 设备场中的 yaml 文件中,但它不起作用。 这是我得到的错误:

        [DeviceFarm] echo "Start Appium TestNG test"
     Start Appium TestNG test
    [DeviceFarm] mvn test -D 
    "cucumber.options="src/test/java/cucumber/features" --glue 
cucumber.steps 
    --tags @InstallApp"
    [INFO] Scanning for projects...
    [INFO] BUILD FAILURE
    [ERROR] The goal you specified requires a project to execute but there 
     is 
     no POM in this directory (/tmp/scratchncneoU.scratch/test- 
 packageO6o8s7). 
  Please verify you invoked Maven from the correct directory. -> [Help 1]

如何在设备场中运行这个 maven 命令? pom在哪里?

谢谢

在 yaml 文件中输入此命令后: [DeviceFarm] java -Dappium.screenshots.dir=$DEVICEFARM_SCREENSHOT_PATH -D"cucumber.options="classpath:features" --glue cucumber.steps --tags @InstallApp" org.testng.TestNG -testjar *-tests.jar - d $DEVICEFARM_LOG_DIR/test-output -verbose 10

我收到以下错误:虽然我的 pom 中有这个,但在 jar 文件中找不到 testng.xml:

<directory>$project.basedir/src/test/java/cucumber</directory>
            </testResource>
        </testResources>  

会是什么?

【问题讨论】:

【参考方案1】:

mvn 命令失败,因为您的部署包不包含整个项目。从当前部署包的声音来看,您应该能够使用此命令执行您想要的操作:

- java -Dappium.screenshots.dir=$DEVICEFARM_SCREENSHOT_PATH -D"cucumber.options="src/test/java/cucumber/features" --glue cucumber.steps --tags @InstallApp" org.testng.TestNG -testjar *-tests.jar -d $DEVICEFARM_LOG_DIR/test-output -verbose 10

否则,如果您想使用 maven,则需要压缩整个项目并包含它的 pom.xml。例如使用sample cucumber java tests

git clone https://github.com/aws-samples/aws-device-farm-appium-cucumber-tests-for-sample-app.git
zip -r deployment_package.zip aws-device-farm-appium-cucumber-tests-for-sample-app

那么你应该可以在testspec.yml文件中使用maven了。例如,我可以为示例运行以下命令:mvn clean test 在转到项目目录后,我必须导出目标目录才能得到结果。

  test:
    commands:
      # Your test package is downloaded in $DEVICEFARM_TEST_PACKAGE_PATH so we first change directory to that path.
      - echo "Navigate to test package directory"
      - cd $DEVICEFARM_TEST_PACKAGE_PATH/aws-device-farm-appium-cucumber-tests-for-sample-app
      - mvn clean test
...
artifacts:
  # By default, Device Farm will collect your artifacts from following directories
  - $DEVICEFARM_TEST_PACKAGE_PATH/aws-device-farm-appium-cucumber-tests-for-sample-app/target
  - $DEVICEFARM_LOG_DIR

但是,您需要将 zip 文件作为 APPIUM_NODE 测试类型上传,以避免出现测试包解析器。

HTH

-詹姆斯

【讨论】:

这不是错误,应该是警告。您需要将其包含在 jar 中。查看此支持文章,它应该对此有所帮助。 aws.amazon.com/premiumsupport/knowledge-center/… 我想我已经在这里回答了这个问题,实际上***.com/questions/56150150/… 将 testng.xml 放入 src/test/resources 在我的情况下不起作用。不知道为什么,但有可能与我的 pom 中有这个事实有关: $project.basedir/src/test/java/cucumber 是的,如果您使用测试资源标签,那么它将覆盖超级 pom.xml 中的默认路径,因此只需创建一个新的 testResource 标签并放入 src/test/resources 路径跨度> 所以你的意思是我应该创建另一个 testResource 并将它放在同一个 testResources 中?所以我会有 2 个 testResource 标签?这样它们都将包含在 jar 中?

以上是关于如何在 AWS Device Farm 中运行 maven 命令的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Device Farm、Saucelabs、Firebase 测试实验室等中运行 Flutter 集成测试

如何使用 Android 获得 AWS Device Farm 测试的代码覆盖率?

AWS Device Farm 的 XCTest 单元和 UI 测试

Amazon Device Farm 的 KIF .xctest 目录

AWS Device Farm 上的 ruby​​-appium-cucumber 问题

如何在 AWS Device Farm CLI 上的设备池中添加单个设备?