在多个环境中配置JUnit测试执行

时间:2013-03-19 20:17:56

标签: java eclipse jenkins maven-3 junit4

我有一个包含JUnit测试的Java项目,需要通过Jenkins在不同的测试环境(Dev,Staging等)上运行。

我目前在不同环境上构建项目以及将url,用户名和密码传递给测试运行器的解决方案是在POM文件中为每个环境加载特定属性文件。将通过Maven构建命令为每个环境设置属性文件:

  

mvn clean install -DappConfig = / src / test / resouces / integration.environment.properties

在pom.xml中:

<plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <systemPropertyVariables>
                    <appConfig>${app.config}</appConfig>
                </systemPropertyVariables>
            </configuration>
        </plugin>
    </plugins>

在JUnit测试运行器类中:

public class BoGeneralTest extends TestCase {

    protected WebDriver driver;
    protected BoHomePage boHomePage;
    protected static Properties systemProps;
    String url = systemProps.getProperty("Url");
    String username = systemProps.getProperty("Username");
    String password = systemProps.getProperty("Password");
    int defaultWaitTime = Integer.parseInt(systemProps.getProperty("waitTimeForElements"));
    String regUsername = RandomStringUtils.randomAlphabetic(5);

    final static String appConfigPath = System.getProperty("appConfig");

    static {
        systemProps = new Properties();
        try {

            systemProps.load(new FileReader(new File(appConfigPath)));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这个配置的问题是现在单独的测试不能通过Eclipse单独运行,因为他们希望从maven接收appConfig并且我得到NullPointerException。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

运行单个测试的前提条件是为每个测试用例提供一个Run Configuration,它将指定默认的执行环境。请注意,此设置必须在每个测试用例的本地完成。

在Eclipse Arguments选项卡/ VM Arguments字段中,必须指定VM参数:

-DappConfig=src/test/resources/pp1.environment.properties

它包含具有环境登录详细信息的相应属性文件的路径。

在项目的src / test / resources源文件夹下定义了五个属性文件:

environment1.properties
environment2.properties
environment3.properties
environment4.properties
environment5.properties

答案 1 :(得分:0)

WHITE BOX TESING:

单元测试应该测试工作单元而不依赖于依赖性。一般规则是模拟依赖关系和存根外部系统,以便您有一个安全的测试环境。

IntegrationTests应该以某种方式在真正的环境中注入真正的依赖项并进行测试。

BLACK BOX TESTING:

FunctionalTests是我想你想要实现的。通常,您可以使用集成测试中的相同配置,捆绑项目pom中的所有自动化测试,并在每个mvn clean isntall上执行atomaticly测试。一般流程是在预集成测试阶段启动servlet容器并对其进行测试。您应该始终从用户的角度进行测试。