1

我为我的 spring mvc 项目编写了黄瓜/硒测试用例。

我的意图是,当我从控制台运行 mvn test 时,我正在启动码头服务器,其中 spring(mvc dispatcher) bean 加载在一个单独的线程中,而正常流程包括运行黄瓜测试用例。

比如下面这张。

RunCukesTest.java

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class RunCukesTest {
    @BeforeClass
    public static void setUpBeforeClass() {
        try {
            UsageUIService.start();
        } catch (Exception e) { }
    }
}

使用UIService

public class UsageUIService {
    public boolean start() throws Exception {
        ContextHandlerCollection contexts = new ContextHandlerCollection();
        contexts.setHandlers(new Handler[] { AppContextBuilder.buildWebAppContext() } );
        jettyServer = new JettyServer();
        jettyServer.setHandler(contexts);
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setPort(8085);
        jettyServer.addConnector(connector);
        Runnable runner = new Runnable() {
            @Override
            public void run() {
                try {
                    jettyServer.start();
                    jettyServer.join();
                } catch (Exception e) {             }
            }
        };
        new Thread(runner).start();
        return jettyServer.isStarted();
    }
    public boolean isStarted()
    {
        return jettyServer.isStarted();
    }
}

集合步骤定义

public class CollectionStepdefs {
    private WebDriver driver;
    @Before
    public void setUp() {
        driver = new HtmlUnitDriver();
        driver.get("xyz:8085/usage-ui/collection.htm");
    }
    @Given("^I want to see today collection count$")
    public void I_want_to_see_today_collection_count() {
        // assertion starts
    }
}

当我使用 java main 方法运行 UsageUIService 时,我可以点击我在驱动程序中提到的 url,

xyz:8085/usage-ui/collection.htm

该过程仍在等待,直到我按Ctrl+C

但是,当它作为 Junit/mvn 测试运行时,我无法实现并且码头服务器没有启动。该进程不会等待并在执行 @Test 方法后立即结束。

使用 main 运行 java 程序和以 junit 运行有什么区别?

为什么在以 Junit 身份运行时它不保持提示并保持进程直到我执行ctrl+ C

我想引导我的应用程序,当我通过 mvn test/Junit 运行并同时继续执行黄瓜测试套件时,它应该开始在一个线程中侦听端口 8085。

有什么解决办法吗?

4

1 回答 1

0

Jetty 本身就是一个线程。简化您的 UsageUIService ...

jettyServer.addConnector(connector);
jettyServer.start();
// Don't do this -> jettyServer.join();
return jettyServer.isStarted();
于 2014-01-07T12:32:30.497 回答