【问题标题】:How can we pass Parameter and Data Provider to same Method in Testng我们如何将参数和数据提供者传递给Testng中的相同方法
【发布时间】:2017-01-23 09:28:40
【问题描述】:

您好,我正在尝试用 Java 驱动数据。我阅读了 excel 并将值传递给变量“test2”和“test 3”给我的测试。此外,我还需要一个从 testing.xml 发送的参数“test1”。现在在执行下面的测试时会抛出一个错误

org.testng.TestNGException: 数据提供者正在尝试传递 2 个参数,但 com.xxxxx.xxx 方法需要 3 个并且 TestNG 无法注入合适的对象

那么如何将参数和数据提供者传递给同一个方法。谢谢

/* testdataprovider will return the test2 and test3 parameter value */
@Parameters("test1")
@Test(dataProvider = "testdataprovider")
public void testMethod(String test1, String test2, String test3){}

【问题讨论】:

    标签: java testing


    【解决方案1】:

    我可能大错特错(如果我错了,我相信其他人会给你一个更好的解决方案);但我认为您无法使用 testNG Guruswamy 实现您所追求的目标。 我刚刚使用此 dataProvider 测试了您的尝试

    @DataProvider(name = "login8users")
        public Object[][] login8usersForStackOverflow() {
          return new Object[][] {
           { "user1@gmail.com", "pass" },
           { "user2@gmail.com",  "pass"},
           { "user3@gmail.com",  "pass"},
           { "user4@gmail.com",  "pass"},
           { "user5@gmail.com",  "pass"},
           { "user6@gmail.com",  "pass"},
           { "user7@gmail.com",  "pass"},
           { "user8@gmail.com",  "pass"},      
          };
        }
    

    并且从 XML 文件中传递一个名为 browser 的参数。我注意到,当您在同一 @Test 注释下使用 dataProvider 和参数 ;您是否会收到上面向我们展示的错误,或者 XML 参数将被完全忽略(似乎 dataProvider 取代了它们)。 那么这里是测试方法:

     @Test(dataProvider="login8users") 
     @Parameters({"browser"})
     public void login8(String dataProvider1, String dataProvider2) {         
    
                System.out.println("Email from data provider is..: "+dataProvider1);
                System.out.println("Pass from data provider is..: "+dataProvider2);     
    
            } 
    

    这是输出:

    [TestNG] Running:
      C:\projects\test\currentTest.xml    
    
    Email from data provider is..: user1@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user2@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user3@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user4@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user5@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user6@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user7@gmail.com
    Pass from data provider is..: pass
    Email from data provider is..: user8@gmail.com
    Pass from data provider is..: pass
    
    ===============================================
    Regression
    Total tests run: 8, Failures: 0, Skips: 0
    ===============================================
    

    因此您需要寻找替代解决方案。其中之一可能是提前加载参数,(甚至可能在@BeforeClass 中)在测试中将参数作为全局变量传递,以便您可以访问它。所以像这样的解决方案:

    public static String globalVarScope;
    
    
           @BeforeClass
           @Parameters({"xmlParam"}) 
           public void initialSetup(String xmlParam) {
    
                System.out.println("Parameter from XML is..: "+xmlParam);
                globalVarScope= xmlParam;   
            }   
    
    
            @Test         
            public void useMeAnywhere() {         
    
                System.out.println("Hey, I passed the param earlier and I can use it anywhere now :) ..: "+globalVarScope);    
            }    
    
    
            @Test(dataProvider="login8users") 
            @Parameters({"browser"})
            public void login8(String dataProvider1, String dataProvider2) {      
    
                System.out.println("Email from data provider is..: "+dataProvider1);
                System.out.println("Pass from data provider is..: "+dataProvider2);     
            }  
    

    所以希望现在你可以达到你想要的结果,如果你遇到困难,请告诉我。下面是单独运行参数后的最终输出:

     [TestNG] Running:
          C:\projects\test\currentTest.xml
    
        Browser is..: ***chrome***
        Email from data provider is..: user1@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user2@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user3@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user4@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user5@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user6@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user7@gmail.com
        Pass from data provider is..: pass
        Email from data provider is..: user8@gmail.com
        Pass from data provider is..: pass
    
        ===============================================
        Regression
        Total tests run: 9, Failures: 0, Skips: 0
        ===============================================  
    

    祝你好运!

    【讨论】:

    • 不是问题 Guruswamy,如果我能帮到你,我很高兴。如果您也可以对答案进行投票,将不胜感激(点击答案旁边的向上箭头)?只是为了获得道德上的满足 - 在此先感谢! :)
    猜你喜欢
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多