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

需要帮助将数据提供器与测试结合使用

洪安顺
2023-03-14

基类中的数据提供程序

@DataProvider(name = "AAA")
public Iterator<Object[]> AAA()
        throws DataDrivenFrameworkException {
    String excelResource = System.getProperty("user.dir")
            + System.getProperty("file.separator") + "resources"
            + System.getProperty("file.separator") + "ExcelTestData.xlsx";
    ExcelFile excelFile = new ExcelFile(excelResource);
    excelFile.setSheetName("SheetNameAAA");
    excelFile.setTestCaseHeaderName("TestCaseNameColumn");
    List<List<String>> TestData = excelFile
            .getDataUsingTestCaseName("TestCase1");
    return SeleniumTestNGHelper
            .toObjectArrayIterator(TestData);
}

@DataProvider(name = "BBB")
public Iterator<Object[]> BBB()
        throws DataDrivenFrameworkException {
    String excelResource = System.getProperty("user.dir")
            + System.getProperty("file.separator") + "resources"
            + System.getProperty("file.separator") + "ExcelTestData.xlsx";
    ExcelFile excelFile = new ExcelFile(excelResource);
    excelFile.setSheetName("SheetNameBBB");
    excelFile.setTestCaseHeaderName("TestCaseNameColumn");
    List<List<String>> TestData = excelFile
            .getDataUsingTestCaseName("TestCase2");
    return SeleniumTestNGHelper.toObjectArrayIterator(TestData);
}

测试等级

@Test(description = "AAA Tests", dataProvider = "AAA")
public void testAAA(){
}

@Test(description = "BBB Tests", dataProvider = "BBB")
public void testBBB(){
}

TestNG XML

<test name="AAA Test Using Chrome" preserve-order="true">
    <parameter name="browser" value="chrome" />
    <classes>
        <class name="com.tests.TestClass" />
    </classes>
</test>

想知道是否可以只使用1个DataProvider而不是2个?我需要传递“setSheetName”作为参数。想知道如何做到这一点吗?任何反馈都会有很大帮助。我需要读取文件中不同工作表的数据。

谢谢。

*****更新****

基类上的数据提供程序

@DataProvider(name = "TestType")
public static Iterator<Object[]> TestType(Method Sheet)
        throws DataDrivenFrameworkException {
    String SheetName = Sheet.getName();
    String excelResource = System.getProperty("user.dir")
            + System.getProperty("file.separator") + "resources"
            + System.getProperty("file.separator") + "ExcelTestData.xlsx";
    ExcelFile excelFile = new ExcelFile(excelResource);
    excelFile.setSheetName(SheetName);
    excelFile.setTestCaseHeaderName("TestCaseNameColumn");
    List<List<String>> PensionPlanTestData = excelFile
            .getDataUsingTestCaseName("PensionPlanPodTestCase");
    return SeleniumTestNGHelper.toObjectArrayIterator(PensionPlanTestData);
}

测试类

@Test(dataProvider = "TestType")
public void PensionPlanPodTests(String UserName, String Password,
        String AccountPageTitle, String FullName, String Address,
        String DateOfBirth, String PhoneNumber, String ClientNumber,
        String InstitutionName, String InstitutionAddress,
        String PositionTitle, String Beneficiaries,
        String TotalLifeInsuranceAmount) throws InterruptedException {

    HomePage HomePG = PageFactory.initElements(driver, HomePage.class);
    MainPage MainPG = PageFactory.initElements(driver, MainPage.class);

    Map<String, String> logInData = new HashMap<String, String>();
    logInData.put("userName", UserName);
    logInData.put("password", Password);
    HomePG.SignIn(logInData);
    // MainPG.CloseTabNotifier();

    if (AccountPageTitle.length() > 1) {
        MainPG.VerifyPageTitle(AccountPageTitle);
    } else {
        System.out.println("Not Verifying Page Title ...");
        Reporter.log("Not Verifying Page Title ...");
    }

    Map<String, String> UserInfoData = new HashMap<String, String>();
    UserInfoData.put("fullname", FullName);
    UserInfoData.put("address", Address);
    UserInfoData.put("DOB", DateOfBirth);
    UserInfoData.put("Phone", PhoneNumber);
    UserInfoData.put("ClientNum", ClientNumber);
    MainPG.UserPersonalInformation(UserInfoData);

    if (PositionTitle.length() > 1) {
        Map<String, String> InstitutionData = new HashMap<String, String>();
        InstitutionData.put("institutionName", InstitutionName);
        InstitutionData.put("institutionAddress", InstitutionAddress);
        InstitutionData.put("positionTitle", PositionTitle);
        MainPG.UserInstitutionInformation(InstitutionData);
    } else {
        System.out
                .println("Not Verifying Any Institution Data Because User Do Not Hold Any Position ...");
        Reporter.log("Not Verifying Any Institution Data Because User Do Not Hold Any Position ...");
    }

    if (Beneficiaries.length() > 1) {
        MainPG.VerifyLifeInsuranceBeneficiaries(Beneficiaries);
    } else {
        System.out
                .println("Not Verifying Life Insurance Beneficiaries ...");
        Reporter.log("Not Verifying Life Insurance Beneficiaries ...");
    }

    if (TotalLifeInsuranceAmount.length() > 1) {
        MainPG.TotalLifeInsuranceAmount(TotalLifeInsuranceAmount);
    } else {
        System.out.println("Not Verifying Total Life Insurance Amount ...");
        Reporter.log("Not Verifying Total Life Insurance Amount ...");
    }
    MainPG.LogOut();
}

我现在得到的最新错误:

失败:养老金计划PodTests org.testng。TestNGException:数据提供者试图传递21个参数,但方法com.tests失败。DataProviderParametersIntegrationExample#PensionPlanPodTests需要13

共有1个答案

皮献
2023-03-14

您可以拥有一个将java.lang.reflect.Method作为参数的DataProvider。TestNG将通过该参数的当前测试方法。比方说,如果您有两个名为AAA和BBB的@test方法,您可以读取这些方法名并将它们用作参数

public class SampleTest {

    @Test(dataProvider = "myDP")
    public void AAA(String a) {

    Assert.assertTrue(true);

    }

    @Test(dataProvider = "myDP")
    public void BBB(String a) {
    Assert.assertTrue(true);

    }

    @DataProvider(name = "myDP")
    public Object[][] myDP(Method m) {

    String sheetName = m.getName();
    return new String[][] { { "a" } };

    }

}
 类似资料:
  • 需要帮助使用Mockito和JUnit4为下面的代码编写单元测试,

  • 实际上,我正在尝试在2个不同的插件项目中的2个portlet之间共享数据 以下是我分享数据的步骤: 步骤1:创建名为Senderproj的liferay插件项目,并在Senderport下创建一个portlet,然后在doView方法中编写以下代码 Step2:创建名为Receiverproj的增殖插件项目并创建一个名为Receiverport的portlet,然后在doView方法中编写下面的代

  • 在我当前的项目中,我正在使用Maven和Spring。我目前正在使用SLF4J记录器来记录服务。代替它,我想使用OWASP-ESAPI记录器。我不想使用安全性,只是日志服务。有人能指导我如何使用记录器,用最少的努力替换slf4j记录器吗?我尝试了很多谷歌搜索,但没有任何帮助。我也会非常感谢一些链接来获得有关记录器的知识。

  • 我正在读一本关于PHP开发的书,但我遇到了让Apache与PHP一起工作的麻烦。所以我已经尝试了一段时间,第一次我认为是因为我有一个64位版本的PHP和32位版本的Apache,所以我重新下载了所有的东西,以确保我有所有的32位版本。 书名:PHP和MySQL Web开发开发者库第四版 我下载了PHP5.5(5.5.24)x86线程安全。到目前为止,我已经按照指示做了 设置一个php.ini文件,

  • 我正在寻找谷歌卡通数据集的工作,网址为https://google.github.io/cartoonset/download.html.我会使用Googel Colab来完成分类任务,但那是以后的事了。目前的挑战是1。如何直接将数据获取到Colab或google drive,我使用了- 这在colab中只得到一个60kb的小文件,然后第二部分是如何直接在colab temp文件中提取子文件夹。我

  • 问题内容: 我想从一个名为Sorels的表更新一个名为的表。它们之间的链接是的等于Sorels表的。这是我对Merge语句的第一次尝试,并且我正在尝试学习语法。 运行此命令时,出现以下错误: 错误10/22/2009 1:38:51 PM 0:00:00.000 SQL Server数据库错误:关键字’ON’附近的语法不正确。46 0 添加的信息* 在建议了第一个修复程序之后,代码如下: 现在我得