当前位置: 首页 > 知识库问答 >
问题:

如何简化testng XML文件中参数的传递?

呼延升
2023-03-14

我有一个testng XML文件,它在下面这样的组中运行Selenium测试。我想从JSON或其他类型的文件中传递参数名称和值中的所有浏览器信息集,这样,如果我为另一个测试添加配置,就不必一直复制和粘贴它们,这样代码就更少了。对于testng XML文件,这可能吗?

感谢任何帮助。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="2" name="test.java" annotations="JDK" parallel="tests">
    <test name="Test - Chrome Vienna">
        <parameter name="browser" value="chrome"/>
        <parameter name="browserVersion" value="78.0"/>
        <parameter name="os" value="OS X"/>
        <parameter name="osVersion" value="Mojave"/>
        <parameter name="resolution" value="1024x768"/>
        <groups>
            <run>
                <include name="vienna" />
            </run>
        </groups>
        <classes>
            <class name="com.bookinggo.ticketed.uiendtoend.TicketedSingleJourneyTest"/>
        </classes>
    </test>

共有1个答案

房育
2023-03-14

您可以使用数据提供程序。在测试类中,为测试添加注释:

@Test(dataProvider="SearchProvider")

这就是您的数据提供者应该看起来的样子:

@DataProvider(name="SearchProvider")
    public Object[][] getDataFromDataprovider(){
    return new Object[][] 
        {
            { "browser", "chrome" },
            { "browserVersion", "78.0" },
            { "os", "OS X" }
        };

    }

或者,您可以为dataprovider创建一个单独的类,并使用以下内容读取json内容:

@DataProvider
public Object[][] getSearchProvider() throws FileNotFoundException {
    JsonElement jsonData = new JsonParser().parse(new FileReader("<json path>"));
    JsonElement dataSet = jsonData.getAsJsonObject().get("dataSet");
    List<TestData> testData = new Gson().fromJson(dataSet, new TypeToken<List<TestData>>() {
    }.getType());
    Object[][] returnVal = new Object[testData.size()][1];
    int i = 0;
    for (Object[] each : returnVal) {
        each[0] = testData.get(i++);
    }
    return returnVal;
}
 类似资料:
  • 问题内容: 我试图编写一个程序来通过args读取文本文件,但是当我运行它时,它总是说找不到该文件,即使我将其放置在与我正在运行的main.java相同的文件夹中。有谁知道我的问题的解决方案或更好的阅读文本文件的方法? 问题答案: 请勿在中使用相对路径。 它将变成相对于当前工作目录的,这取决于您如何运行应用程序,而该方法又是无法从应用程序内部进行控制的。这只会导致可移植性麻烦。如果从Eclipse内

  • 我有一个方法在资源类,上传文件。它调用一个方法,该方法将文件作为参数,然后将文件分成几个部分,然后将这些部分写入磁盘。 我想知道如何为它编写客户机测试,假设可以在不使用@FormDataParam InputStream的情况下上载文件。因为我觉得在这种情况下我不需要它。 我已经看到了很多使用Jersey上传文件的例子,这些文件以@FormDataParam的形式接收InputStream和For

  • 当我向应用程序提供参数时,它不会运行。它没有争论。 请帮帮我。

  • 问题内容: 我在Jenkins的命令行中使用字符串参数触发构建: 我现在想从命令行触发使用文件作为文件参数的构建。 例如,如果我的项目构建了main.c,那么我希望能够触发构建并从命令行上传main.c。 这可能吗? 问题答案: 在“ Jenkins远程访问 API”页面中对此进行了描述: 请注意,您需要使用URL / build代替/ buildWithParameters

  • 问题内容: Jenkins构建中的每个文件参数“帮助文本”, 接受来自浏览器的文件提交作为构建参数。上载的文件将放置在工作空间中的指定位置,然后您的构建可以访问和使用该文件。这在许多情况下很有用,例如: 让人们对其构建的工件进行测试。 通过允许用户放置文件来自动执行上载/发布/部署过程。 通过上传数据集执行数据处理。 提交的文件的名称在环境变量中可用,该环境变量的名称与文件位置相同。例如,如果将文

  • 问题内容: 我正在尝试编写一个bash脚本,该脚本允许用户使用通配符传递目录路径。 例如, 在此目录中执行时 将输出: 现在的样子,它输出: 的内容: 问题答案: 父外壳(一个调用)为您扩展了外壳。 在脚本中,您需要使用: 双引号确保正确处理文件名中的多个空格等。 可能令人困惑的附录 如果您确实确定要扩展该脚本,则必须确保将其传递给脚本(如其他答案中所述,用引号引起来),然后确保在正确的位置将其扩