Search code examples
javamavenmaven-profilesmaven-resources-plugin

Exception while executing integration tests in maven


Getting following exception while executing integration tests using mvn verify against my webapp. The integration tests just loads the server url using HtmlUnit and checks for the status code 200. Not sure what I am missing here. It looks like the resource filtering is not working as expected here. Please guide.

Error Log:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.study.jenkins.it.htmlunit.PageIT
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.951 sec <<< FAILURE! - in com.study.jenkins.it.htmlunit.PageIT
testScenario(com.study.jenkins.it.htmlunit.PageIT)  Time elapsed: 0.949 sec  <<< ERROR!
java.net.MalformedURLException: no protocol: ${server.url}
        at java.net.URL.<init>(URL.java:585)
        at java.net.URL.<init>(URL.java:482)
        at java.net.URL.<init>(URL.java:431)
        at com.gargoylesoftware.htmlunit.util.URLCreator.toNormalUrl(URLCreator.java:36)
        at com.gargoylesoftware.htmlunit.util.URLCreator$URLCreatorStandard.toUrlUnsafeClassic(URLCreator.java:82)
        at com.gargoylesoftware.htmlunit.util.UrlUtils.toUrlUnsafe(UrlUtils.java:195)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
        at com.study.jenkins.it.htmlunit.PageIT.testScenario(PageIT.java:12)

Running com.study.jenkins.it.selenium.PageIT

pom.xml

<properties>
    <dev.tc.base.url>http://dev-server.com</dev.tc.base.url>
    <tst.tc.base.url>http://tst-server.com</tst.tc.base.url>
</properties>

<build>
    <finalName>${project.artifactId}</finalName>
    <resources>
        <resource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <server.url>${dev.tc.base.url}/cicd-demo/</server.url>
        </properties>
    </profile>
    <profile>
        <id>tst</id>
        <properties>
            <server.url>${tst.tc.base.url}/cicd-demo/</server.url>
        </properties>
    </profile>
</profiles>

src/test/resources/url.properties

server.url=${server.url}

Solution

  • Found the solution to the filtering problem with test resources.

    Replaced

     <resources>
            <resource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    

    with

    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>