AWS Device Farm - 脚本中的额外数据路径

时间:2017-08-09 12:15:14

标签: appium

My Appium脚本完美地处理本地但移动到aws设备场,由于一个类文件而返回解析错误。 我正在尝试从此类文件中的excel文件导入数据。我认为错误是因为excel文件的路径。

我将数据excel文件作为额外数据上传到aws但我找不到位置。

public static void changeCity() throws InterruptedException{
try{
    File src = new File("data1.xls");
    Workbook wb = Workbook.getWorkbook(src);
    Sheet sh1 = wb.getSheet(0);
    Sheet bugzillaUpdation = wb.getSheet("UtilityCredentials"); 

请帮我解决这个问题。

@jmp

我使用junit并将位置设为 File src = new File("/acme-android-appium/src/test/resources/data1.xls");

我不清楚你上面说的XML文件。能否解释一下我们如何在脚本中找到文件。

请查看附件图片。

project explorer

2 个答案:

答案 0 :(得分:1)

我在AWS Device Farm团队工作。

要阅读.xlsx.csv文件,可以使用以下两种方法:

  1. 确保将Excel文件置于src/test/resources/com/yourexcelfile.xlsx/csv
  2. 这会将文件放在com文件夹下的测试jar文件中。
  3. 确认后,您应该可以使用以下两个代码段中的一个来阅读该文件:
  4. 没有任何外部库:

    java.net.URL resource = ClassLoader.getSystemResource("/com/yourexcelfile.xlsx");
    File file = new File(resource.toURI());
    FileInputStream input = new FileInputStream(file);
    

    OR

    如果您使用Apache POI API读取Excel文件:

    InputStream ins = getClass().getResourceAsStream(“/com/yourexcelfile.xlsx”);
    workbook = new XSSFWorkbook(ins);
    sheet = workbook.getSheetAt(1);
    ins.close();
    

    希望这有帮助。

答案 1 :(得分:0)

如果您尝试将该文件放在项目的src / test / java / resources /中会发生什么?这样就可以使用jar和设备场构建它可能会引用它。

[更新]

自己尝试使用awslabs github page [1]中的示例项目。我还可以选择创建一个包含此xml的testng.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
    <test name="test">
        <classes>
            <class name="file.FindFile"/>
        </classes>
    </test>
</suite>

此文件位于/Referenceapp-Appium-Test/src/test/resources/testng.xml中,并使用此插件从pom.xml引用:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
    <suiteXmlFiles>
        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
    </suiteXmlFiles>
    </configuration>
</plugin>

此处使用testng.xml仅运行特定测试,而不是示例项目中的所有测试。对于FYI知识,它是可选的。

然后我在同一目录中创建了一个test.csv文件,并创建了一个新的包'file',其中包含一个测试类'FindFile':

package file;

import java.io.File;

import org.testng.annotations.Test;

import Pages.BasePage;
import io.appium.java_client.AppiumDriver;

public class FindFile extends BasePage {
     protected FindFile(AppiumDriver driver) {
        super(driver);
        // TODO Auto-generated constructor stub
    }

     @Test
    public static void changeCity() throws InterruptedException{
            try{
                File src = new File("/Referenceapp-Appium-Test/src/test/resources/test.csv");
                System.out.println("File found!!!");
            }catch(Exception e){
                System.out.println(e);
            }
        }
}

因此,当我在设备场中使用随机apk执行此操作时,我只执行了FindFile.java中的测试。当我查看appium java输出时,我在那里看到了println,这就是我知道它的工作原理。

[TestNG] RUNNING: Suite: "Command line test" containing "1" Tests (config: null)
[TestNG] INVOKING: "Command line test" - file.FindFile.changeCity()
[Invoker 1121172875] Invoking file.FindFile.changeCity
File found!!!
[TestNG] PASSED: "Command line test" - file.FindFile.changeCity() finished in 35 ms
===== Invoked methods
    FindFile.changeCity()[pri:0, instance:null]  <static>
=====
Creating /tmp/scratchLT6UDz.scratch/resultsm_f_bN/Command line suite/Command line test.html
Creating /tmp/scratchLT6UDz.scratch/resultsm_f_bN/Command line suite/Command line test.xml
PASSED: changeCity

希望能帮助

最好的问候

詹姆斯

[1] https://github.com/awslabs/aws-device-farm-appium-tests-for-sample-app