mirror of https://github.com/apache/archiva.git
use a rule to execute test and being able to capture screenshots
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1296372 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c0296ed739
commit
6d7eb19f39
|
@ -40,7 +40,7 @@ public class LoginTest
|
||||||
goToLoginPage();
|
goToLoginPage();
|
||||||
setFieldValue( "user-login-form-username", "badUsername" );
|
setFieldValue( "user-login-form-username", "badUsername" );
|
||||||
clickLinkWithLocator( "modal-login-ok", true );
|
clickLinkWithLocator( "modal-login-ok", true );
|
||||||
assertTextPresent( "This field is required." );
|
assertTextPresent( "This field is required.f" );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package org.apache.archiva.web.test.parent;
|
package org.apache.archiva.web.test.parent;
|
||||||
|
|
||||||
import org.apache.archiva.web.test.tools.ArchivaSeleniumRunner;
|
import org.apache.archiva.web.test.tools.ScreenshotCaptureRule;
|
||||||
import org.junit.Before;
|
import org.junit.Rule;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.BlockJUnit4ClassRunner;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -26,10 +27,11 @@ import java.io.IOException;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@RunWith( ArchivaSeleniumRunner.class )
|
@RunWith( BlockJUnit4ClassRunner.class )
|
||||||
public abstract class AbstractArchivaTest
|
public abstract class AbstractArchivaTest
|
||||||
extends AbstractSeleniumTest
|
extends AbstractSeleniumTest
|
||||||
{
|
{
|
||||||
|
|
||||||
protected String username;
|
protected String username;
|
||||||
|
|
||||||
protected String fullname;
|
protected String fullname;
|
||||||
|
|
|
@ -22,9 +22,9 @@ package org.apache.archiva.web.test.parent;
|
||||||
import com.thoughtworks.selenium.DefaultSelenium;
|
import com.thoughtworks.selenium.DefaultSelenium;
|
||||||
import com.thoughtworks.selenium.Selenium;
|
import com.thoughtworks.selenium.Selenium;
|
||||||
import org.apache.archiva.web.test.tools.AfterSeleniumFailure;
|
import org.apache.archiva.web.test.tools.AfterSeleniumFailure;
|
||||||
import org.junit.After;
|
import org.apache.archiva.web.test.tools.ScreenshotCaptureRule;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Rule;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -43,6 +43,10 @@ import java.util.Properties;
|
||||||
|
|
||||||
public abstract class AbstractSeleniumTest
|
public abstract class AbstractSeleniumTest
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ScreenshotCaptureRule screenshotCaptureRule = new ScreenshotCaptureRule();
|
||||||
|
|
||||||
public String browser = System.getProperty( "browser" );
|
public String browser = System.getProperty( "browser" );
|
||||||
|
|
||||||
public String baseUrl = System.getProperty( "baseUrl" );
|
public String baseUrl = System.getProperty( "baseUrl" );
|
||||||
|
@ -57,22 +61,20 @@ public abstract class AbstractSeleniumTest
|
||||||
|
|
||||||
public Properties p;
|
public Properties p;
|
||||||
|
|
||||||
@Before
|
|
||||||
public void open()
|
public void open()
|
||||||
throws Exception
|
throws Exception
|
||||||
{
|
{
|
||||||
p = new Properties();
|
p = new Properties();
|
||||||
p.load( this.getClass().getClassLoader().getResourceAsStream( "test.properties" ) );
|
p.load( this.getClass().getClassLoader().getResourceAsStream( "test.properties" ) );
|
||||||
open( baseUrl, browser, seleniumHost, seleniumPort, maxWaitTimeInMs );
|
open( baseUrl, browser, seleniumHost, seleniumPort, maxWaitTimeInMs );
|
||||||
|
screenshotCaptureRule.selenium = selenium;
|
||||||
assertAdminCreated();
|
assertAdminCreated();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close selenium session.
|
* Close selenium session.
|
||||||
*/
|
*/
|
||||||
@After
|
|
||||||
public void close()
|
public void close()
|
||||||
throws Exception
|
|
||||||
{
|
{
|
||||||
if ( getSelenium() != null )
|
if ( getSelenium() != null )
|
||||||
{
|
{
|
||||||
|
@ -645,27 +647,23 @@ public abstract class AbstractSeleniumTest
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterSeleniumFailure
|
@AfterSeleniumFailure
|
||||||
public void captureScreenShotOnFailure( Throwable failure )
|
public void captureScreenShotOnFailure( Throwable failure, String methodName, String className )
|
||||||
{
|
{
|
||||||
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" );
|
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" );
|
||||||
String time = sdf.format( new Date() );
|
String time = sdf.format( new Date() );
|
||||||
File targetPath = new File( "target", "screenshots" );
|
File targetPath = new File( "target", "screenshots" );
|
||||||
String cName = this.getClass().getName();
|
|
||||||
|
|
||||||
String methodName = "";
|
|
||||||
int lineNumber = 0;
|
int lineNumber = 0;
|
||||||
|
|
||||||
for ( StackTraceElement stackTrace : failure.getStackTrace() )
|
for ( StackTraceElement stackTrace : failure.getStackTrace() )
|
||||||
{
|
{
|
||||||
if ( stackTrace.getClassName().equals( this.getClass().getName() ) )
|
if ( stackTrace.getClassName().equals( this.getClass().getName() ) )
|
||||||
{
|
{
|
||||||
methodName = stackTrace.getMethodName();
|
|
||||||
lineNumber = stackTrace.getLineNumber();
|
lineNumber = stackTrace.getLineNumber();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String className = cName.substring( cName.lastIndexOf( '.' ) + 1 );
|
|
||||||
targetPath.mkdirs();
|
targetPath.mkdirs();
|
||||||
Selenium selenium = getSelenium();
|
Selenium selenium = getSelenium();
|
||||||
String fileBaseName = methodName + "_" + className + ".java_" + lineNumber + "-" + time;
|
String fileBaseName = methodName + "_" + className + ".java_" + lineNumber + "-" + time;
|
||||||
|
|
|
@ -42,9 +42,11 @@ public class ArchivaSeleniumRunner
|
||||||
super( clazz );
|
super( clazz );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FIXME move that to a Rule.
|
* FIXME move that to a Rule.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Statement withAfters( FrameworkMethod method, Object target, Statement statement )
|
protected Statement withAfters( FrameworkMethod method, Object target, Statement statement )
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package org.apache.archiva.web.test.tools;
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.thoughtworks.selenium.Selenium;
|
||||||
|
import org.apache.archiva.web.test.parent.AbstractSeleniumTest;
|
||||||
|
import org.junit.rules.MethodRule;
|
||||||
|
import org.junit.runner.Description;
|
||||||
|
import org.junit.runners.model.FrameworkMethod;
|
||||||
|
import org.junit.runners.model.Statement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Olivier Lamy
|
||||||
|
*/
|
||||||
|
public class ScreenshotCaptureRule
|
||||||
|
implements MethodRule //TestRule
|
||||||
|
{
|
||||||
|
|
||||||
|
public Selenium selenium;
|
||||||
|
|
||||||
|
public Statement apply( Statement base, FrameworkMethod method, Object target )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
( (AbstractSeleniumTest) target ).open();
|
||||||
|
method.getMethod().invoke( target );
|
||||||
|
}
|
||||||
|
catch ( Throwable e )
|
||||||
|
{
|
||||||
|
( (AbstractSeleniumTest) target ).captureScreenShotOnFailure( e, method.getMethod().getName(),
|
||||||
|
target.getClass().getName() );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
( (AbstractSeleniumTest) target ).close();
|
||||||
|
}
|
||||||
|
return new Statement()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void evaluate()
|
||||||
|
throws Throwable
|
||||||
|
{
|
||||||
|
// no op
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Statement apply( Statement base, Description description )
|
||||||
|
{
|
||||||
|
return base; //To change body of implemented methods use File | Settings | File Templates.
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue