java - 我们如何将参数和数据提供者传递给 Testng 中的相同方法

标签 java testing

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

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

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

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

最佳答案

我可能会大错特错(如果我错了,我相信其他人会给你更好的解决方案);但我不认为你可以使用 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 和 Parameters 时;您是否会收到上面向我们展示的错误,或者 XMLparameters 将被完全忽略(似乎 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
    ===============================================  

祝你好运!

关于java - 我们如何将参数和数据提供者传递给 Testng 中的相同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802922/

相关文章:

java - 是否可以使用 IBM WebSphere JAX-WS 运行时在 Eclipse 4.x 中生成 Web 服务?

testing - 如何测试另一个国家的站点 "from"?

javascript - Angularjs Protractor 设置窗口大小大于屏幕?

c++ - 关于我应该为 Visual Studio 和 Eclipse 使用什么单元测试框架的任何想法(红色代码)

javascript - 在 Nightwatch 中选择并单击随机元素的自定义函数

ios - NSObject 在 StoryBoard/Interface Builder 中的作用是什么?

java - Spring 数据源连接到 MS SQL Server 命名实例

java - AnnotatedTypes 是否有类似 TypeToken 的东西

java - Android BufferedReader 不读取整个响应

java - Firebase 查询 : how do I order by a child's child value?