TestNG Return Values

linuxmensch

Grünschnabel
Hi @all,

ich hab hier einige Tests die im Rahmen von Integrations Tests für Maven in TestNG geschrieben wurden. Mittlerweile wurden einige Tests aber so wichtig das auch die Live Maschinen damit getestet werden sollen. Um dies nun möglichst sinnvoll zu machen gibt es einige Tests die verschiedene Werte ermitteln und an das Monitoringsystem weiterleiten um bei Grenzüberschreitungen einen Alarm auszulösen.

Es gibt einen Test z.B. ein Selenium Test innerhalb dessen wird eine Variable mit einem Wert befüllt.

Code:
package com.keepcoding.test;

import static org.testng.AssertJUnit.*;
import org.testng.annotations.*;
import com.thoughtworks.selenium.*;

public class TestClass {

 private Selenium selenium;
 private Object myResult = null;
 @BeforeClass
 @Parameters({"selenium.host","selenium.port","selenium.browser","selenium.url"})
 public void startSelenium(String host, String port, String browser, String url) {
  
  this.selenium = new DefaultSelenium(host, Integer.parseInt(port), browser, url);
        this.selenium.start();
        this.selenium.open(url);
        
 }
 
 @AfterClass(alwaysRun=true)
 public void stopSelenium() {
  this.selenium.stop();
 }
 
 @Test
 @Parameters({"search","expected"})
 public void googling(String search, String expected) {
  try {

   myResult = new String("Irgendwas");

  } catch (SeleniumException e) {
   fail(e.getMessage());
  }
 }
}

Die testng.xml:

Code:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="DevelEnvSuite" verbose="3">
    <parameter name="selenium.host" value="localhost"></parameter>
    <parameter name="selenium.port" value="4444"></parameter>
    <parameter name="selenium.browser" value="*firefox3"></parameter>
    <parameter name="selenium.url" value="http://localhost:7080/"></parameter>
  
  <test name="MyFirstTestCase">
    <parameter name="search" value="SearchString"></parameter>
    <parameter name="expected" value="ExpectedString"></parameter>
    
   <classes>
    <class name="com.keepcoding.test.TestClass"></class>
   </classes>
  </test>
  
</suite>


Aufgerufen wird der Test durch ein Monitoringsystem durch folgendes:
Code:
TestNG testng = new TestNG();
testng.setTestJar(fdo.getAbsolutePath());
testng.setOutputDirectory(tmp.getAbsolutePath());
testng.run();
status = testng.getStatus();


Wie komme ich an den Inhalt der Variablen myResult?


Vorab schon einmal vielen Dank.
 
Hiho

war eigentlich ganz einfach man definiert einen Listener und setzt im TestNG - Testcase das Attribute

Die Testclass
Code:
package com.keepcoding.test;

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

public class TestClass {

 
 
 @Test
 @Parameters({"search","expected"," ITestContext"})
 public void googling(String search, String expected,  ITestContext  ITestContext) {
  ITestContext.setAttribute("myResult", new String("Hello World"));
  
 }
}

Die testng.xml

Code:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="DevelEnvSuite" verbose="3">
    
  <test name="MyFirstTestCase">
    <parameter name="search" value="SearchString"></parameter>
    <parameter name="expected" value="ExpectedString"></parameter>
    
   <classes>
    <class name="com.keepcoding.test.TestClass"></class>
   </classes>
  </test>
  
</suite>

Der Testaufrufer:
Code:
public static void runTest(){
	File f = new File("PATH/TO/FILE");
	System.out.println("file Exists? " + f.exists());
	TestListenerAdapter tla = new TestListenerAdapter();
	TestNG t = new TestNG();
	t.setTestJar(f.getAbsolutePath());
	t.addListener(tla);
	t.run();
	List<ITestContext> lst = tla.getTestContexts();
	for (ITestContext c : lst){
		System.out.println("\n MyValues: " + c.getAttribute("myResult"));
	}
	
	
	System.out.println("end");
}
 

Neue Beiträge

Zurück