TestNG - Parametertest (XML und @DataProvider)

TestNG - Parametertest (XML und @DataProvider)

In diesem Tutorial zeigen wir Ihnen, wie Sie Parameter über XML@Parameters oder@DataProvider an eine@Test-Methode übergeben.

1. Übergeben von Parametern mit XML

In diesem Beispiel wird der Dateiname der Eigenschaften vontestng.xml übergeben und über@Parameters in die Methode eingefügt.

TestParameterXML.java

package com.example.testng.examples.parameter;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestParameterXML {

    Connection con;

    @Test
    @Parameters({ "dbconfig", "poolsize" })
    public void createConnection(String dbconfig, int poolsize) {

        System.out.println("dbconfig : " + dbconfig);
        System.out.println("poolsize : " + poolsize);

        Properties prop = new Properties();
        InputStream input = null;

        try {
          //get properties file from project classpath
          input = getClass().getClassLoader().getResourceAsStream(dbconfig);

          prop.load(input);

          String drivers = prop.getProperty("jdbc.driver");
          String connectionURL = prop.getProperty("jdbc.url");
          String username = prop.getProperty("jdbc.username");
          String password = prop.getProperty("jdbc.password");

          System.out.println("drivers : " + drivers);
          System.out.println("connectionURL : " + connectionURL);
          System.out.println("username : " + username);
          System.out.println("password : " + password);

          Class.forName(drivers);
          con = DriverManager.getConnection(connectionURL, username, password);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/exampleserver
jdbc.username=example
jdbc.password=password

testng.xml




    

    
    

    
      
    

    

Ausgabe

dbconfig : db.properties
poolsize : 10
drivers : com.mysql.jdbc.Driver
connectionURL : jdbc:mysql://localhost:3306/exampleserver
username : example
password : password

2. Übergeben von Parametern mit @DataProvider

2.1 Sehen Sie sich ein einfaches@DataProvider-Beispiel an und übergeben Sie einenint-Parameter.

TestParameterDataProvider.java

package com.example.testng.examples.parameter;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider {

    @Test(dataProvider = "provideNumbers")
    public void test(int number, int expected) {
        Assert.assertEquals(number + 10, expected);
    }

    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {

        return new Object[][] {
            { 10, 20 },
            { 100, 110 },
            { 200, 210 }
        };
    }

}

Ausgabe

PASSED: test(10, 20)
PASSED: test(100, 110)
PASSED: test(200, 210)

2.2@DataProvider unterstützt die Übergabe einesobject-Parameters. Das folgende Beispiel zeigt, wie Sie einMap-Objekt als Parameter übergeben.

TestParameterDataProvider.java

package com.example.testng.examples.parameter;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider {

    @Test(dataProvider = "dbconfig")
    public void testConnection(Map map) {

        for (Map.Entry entry : map.entrySet()) {
          System.out.println("[Key] : " + entry.getKey()
                              + " [Value] : " + entry.getValue());
        }

    }

    @DataProvider(name = "dbconfig")
    public Object[][] provideDbConfig() {
        Map map = readDbConfig();
        return new Object[][] { { map } };
    }

    public Map readDbConfig() {

        Properties prop = new Properties();
        InputStream input = null;
        Map map = new HashMap();

        try {
          input = getClass().getClassLoader().getResourceAsStream("db.properties");

          prop.load(input);

          map.put("jdbc.driver", prop.getProperty("jdbc.driver"));
          map.put("jdbc.url", prop.getProperty("jdbc.url"));
          map.put("jdbc.username", prop.getProperty("jdbc.username"));
          map.put("jdbc.password", prop.getProperty("jdbc.password"));

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return map;

    }

}

Ausgabe

[Key] : jdbc.url [Value] : jdbc:mysql://localhost:3306/exampleserver
[Key] : jdbc.username [Value] : example
[Key] : jdbc.driver [Value] : com.mysql.jdbc.Driver
[Key] : jdbc.password [Value] : password
PASSED: testConnection({jdbc.url=jdbc:mysql://localhost:3306/exampleserver,
jdbc.username=example, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=password})

3. @ DataProvider + Methode

Dieses Beispiel zeigt Ihnen, wie Sie abhängig vom Namen der Testmethode unterschiedliche Parameter übergeben.

TestParameterDataProvider.java

package com.example.testng.examples.parameter;

import java.lang.reflect.Method;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider {

    @Test(dataProvider = "dataProvider")
    public void test1(int number, int expected) {
        Assert.assertEquals(number, expected);
    }

    @Test(dataProvider = "dataProvider")
    public void test2(String email, String expected) {
        Assert.assertEquals(email, expected);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(Method method) {

        Object[][] result = null;

        if (method.getName().equals("test1")) {
            result = new Object[][] {
                { 1, 1 }, { 200, 200 }
            };
        } else if (method.getName().equals("test2")) {
            result = new Object[][] {
                { "[email protected]", "[email protected]" },
                { "[email protected]", "[email protected]" }
            };
        }

        return result;

    }

}

Ausgabe

PASSED: test1(1, 1)
PASSED: test1(200, 200)
PASSED: test2("[email protected]", "[email protected]")
PASSED: test2("[email protected]", "[email protected]")

4. @DataProvider + ITestContext

In TestNG können wirorg.testng.ITestContext verwenden, um zu bestimmen, mit welchen Laufzeitparametern die aktuelle Testmethode aufgerufen wurde. In diesem letzten Beispiel zeigen wir Ihnen, wie Sie Parameter abhängig vom enthaltenen Gruppennamen übergeben.

TestParameterDataProvider.java

package com.example.testng.examples.parameter;

import org.testng.Assert;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestParameterDataProvider {

    @Test(dataProvider = "dataProvider", groups = {"groupA"})
    public void test1(int number) {
        Assert.assertEquals(number, 1);
    }

    @Test(dataProvider = "dataProvider", groups = "groupB")
    public void test2(int number) {
        Assert.assertEquals(number, 2);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(ITestContext context) {

        Object[][] result = null;

        //get test name
        //System.out.println(context.getName());

        for (String group : context.getIncludedGroups()) {

            System.out.println("group : " + group);

            if ("groupA".equals(group)) {
                result = new Object[][] { { 1 } };
                break;
            }

        }

        if (result == null) {
            result = new Object[][] { { 2 } };
        }
        return result;

    }

}

testng.xml




  

    
        
            
        
    

    
       
    

  

Ausgabe

group : groupA

Erledigt.