如何按顺序运行junit + selenium测试

时间:2013-08-09 09:56:21

标签: junit selenium-webdriver selenium-rc junit4 junit3

您好我是JUnit测试的新手。

我使用selenium代码运行我的JUnit程序,它不会从上到下运行,它会随机运行。

但是我想按顺序执行程序,包括登录,创建,更新,删除等功能。

但是,它就像this

一样运行

我想按顺序运行这个程序。请将您宝贵的建议发给我。

4 个答案:

答案 0 :(得分:0)

您可以使用测试套件设置JUnit的顺序:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})
public class JunitTestSuite {   
}  

使用@FixMethodOrder设置测试顺序(自JUnit 4.11起)

import org.junit.runners.MethodSorters;

import org.junit.FixMethodOrder;
import org.junit.Test;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void firstTest() {
        System.out.println("first");
    }

    @Test
    public void secondTest() {
        System.out.println("second");
    }
}

答案 1 :(得分:0)

注释列表

public interface AnnotationList{


@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface Order {


int value();

}


@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface MyTest {


static class None extends Throwable {

    private static final long serialVersionUID = 1L;


    private None() {


   }}

JUNITLink课程

public class JunitLink extends BlockJUnit4ClassRunner {



public JunitLink(Class<?> klass) throws InitializationError {

    super(klass);
}
@Override

protected List<FrameworkMethod> computeTestMethods() {

List<FrameworkMethod> classMethods = getTestClass().getAnnotatedMethods(AnnotationList.MyTest.class);

SortedMap<Integer, FrameworkMethod> sortedTestMethodList = new TreeMap<Integer, FrameworkMethod>();

    for (FrameworkMethod seleniumTest : classMethods) {

        if (seleniumTest.getAnnotation(AnnotationList.Order.class) != null)          {   

        sortedTestMethodList.put(seleniumTest.getAnnotation(AnnotationList.Order.class).value(),seleniumTest);

        }

    }

    return new ArrayList<FrameworkMethod>(sortedTestMethodList.values());

}


@Override

protected void runChild(FrameworkMethod method, RunNotifier notifier) {

    EachTestNotifier eachNotifier = makeNotifier(method, notifier);

if (method.getAnnotation(Ignore.class) != null) {

        runIgnored(eachNotifier);

    } else {

        runNotIgnored(method, eachNotifier);

}


}


private int runNotIgnored(FrameworkMethod method,EachTestNotifier eachNotifier) {

    int failures = 0;

    eachNotifier.fireTestStarted();

try {

        methodBlock(method).evaluate();

} 
catch (AssumptionViolatedException e) {

        eachNotifier.addFailedAssumption(e);



        failures++;

} 
    catch (Throwable e) {

        eachNotifier.addFailure(e);


        failures++;

} finally {

        eachNotifier.fireTestFinished();

    }

    return failures;

}


    private void runIgnored(EachTestNotifier eachNotifier) {


    eachNotifier.fireTestIgnored();

}


    private EachTestNotifier makeNotifier(FrameworkMethod method,RunNotifier notifier) {

    Description description = describeChild(method);


return new EachTestNotifier(notifier, description);

}

}

启动测试

@RunWith(JunitLink.class)

public class StartUp extends SeleneseTestBase {

  public static WebDriver driver;



@Override

@Before
public void setUp()
{

}


@Override

@After
public void tearDown() {

}

TestCases这应该扩展上面创建的StartUp类

public class Testcase extends StartUp{



public SmokeTest() throws Exception {

}

@Test
@Order(1)
// Wrire test method
}

@Test
@Order(2)
// Test Case 2

}

@Test
@Order(3)
//Test case 3
}

答案 2 :(得分:0)

您可以更改附加“Test”的TestName。 例如:

@Test
public void loginTest(){
// Wrire test method
}

@Test
public void creationTest(){
// Test Case 2

}

@Test
public vid updateTest(){
//Test case 3
}

如果你有loginTest(),creationTest()和updateTest()而不是login(),create()和update(),那么Junit将按照指定的顺序执行所有的测试。

答案 3 :(得分:0)

您也可以使用 @FixMethodOrder(MethodSorters.JVM)

在这种情况下,它将按照实现方法的顺序执行。