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

TestNg当数据输入提供程序是CSV文件时打印参数值

胥良平
2023-03-14

我使用下面的代码读取CSV文件,并将对象传递给被测方法public void launchWCM1(IBLogonDataCSV data)。

@DataProvider(name = "regCSVData")
    public static Object[][] getCSVData() throws IOException {
        CSVReader csvReader = new CSVReader(new FileReader(
                "C:\\Projects\\Project\\regdata.csv"));
        List<String[]> dataList = csvReader.readAll();
        String s = "";

        Object[][] data = new Object[dataList.size()][1];
        List<IBLogonDataCSV> regList = new ArrayList<IBLogonDataCSV>();

        for (String[] strArray : dataList) {
            IBLogonDataCSV ibLogonData = new IBLogonDataCSV();
            ibLogonData.setURL((strArray[0].trim()));
            ibLogonData.setApplicationName((strArray[1].trim()));
            ibLogonData.setIBLogonURL(strArray[2].trim());
            ibLogonData.setWindowName(strArray[3].trim());
            ibLogonData.setSnapshotName(strArray[4].trim());
            ibLogonData.setRegister(strArray[5].trim());
            ibLogonData.setRegisterURL(strArray[6].trim());
            ibLogonData.setDemo(strArray[7].trim());
            ibLogonData.setDemoURL(strArray[8].trim());
            ibLogonData.setSecurity(strArray[9].trim());
            ibLogonData.setSecurityURL(strArray[10].trim());
            regList.add(ibLogonData);

        }

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {

                data[i][j] = regList.get(i);
                System.out.println("In Array" + regList.get(i).URL
                        + regList.get(i).ApplicationName);
                s = s + regList.get(i).URL;

            }

        }
        csvReader.close();
        return data;        


    } 

当方法public void launchWCM1(IBLogonDataCSV data)通过或失败时,Testng报告将显示对象名称,这无助于了解字符串值或失败URL的名称,以便进一步调试。

示例:launchWCM1测试类:com。硒测试。测验IBLogonCSV参数:com。硒测试。数据对象。IBLogonDataCSV@de1b8a

应该如何将中的参数显示为字符串值,可以很容易地读取,例如:launchWCM1测试类:com。硒测试。测验IBLogonCSV参数:URL的名称或类似的名称,而不是对象名称

共有1个答案

柴华灿
2023-03-14

您可以重写toString()并实现它以返回类的可读有意义的值。

@Override
public String toString(){
 String valueToReturn = "calculate from the properties";
 return valueToReturn;
}

另一种方法是,TestNG的第三方扩展很少,您可以利用可用的数据提供程序扩展。例如,QAF有用于XML/CSV/Excel/Json/DB的内置数据提供程序。

 类似资料:
  • 我想在类中与数据提供者并行运行测试方法。我需要一个数据提供者,它每次在新测试方法开始为给定的测试运行生成部分动态数据之前都会被调用。让我用伪代码解释一下: 我怎样才能做到这一点?

  • 我有以下问题 我有一个带有随机名称的测试,我必须记录我从数据提供者提供的两个测试参数。 我实现了一种方法,通过将它们连接到名称中,将它们记录为自定义处理的测试参数。 然而,TestNG还添加了未处理的参数(它们看起来像是随机生成的代码,带有包/类的名称和其他内容,如下图所示)。 是否有任何方法可以删除TestNG记录的数据提供程序测试参数?或者我可以用自定义数据提供程序测试参数覆盖它们吗? 顺便说

  • 我有一个TestNG Dataprovider测试,如下所示: 输入csv 读者 测验 有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。 在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。 样品测试: 由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。 不应执行其他测试,而应跳过其他测试。

  • 我已使用以下方法在应用程序中输入凭据。 其中EnterText定义如下: 在测试类中,我写了下面的代码 我得到以下错误: 失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源) 请帮助解决同样的问题。据

  • 我正在尝试通过TestNG进行多线程测试为测试实例化WebDrivers<代码>@AfterMethod在测试后关闭WebDrivers

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T