Запустить ant build.xml с переданным параметром «url среды»

#java #selenium #ant #jenkins #build.xml

#java #селен #ant #дженкинс #build.xml

Вопрос:

Я новичок в Ant и в программировании в целом.

Что я сделал:

Я написал тест на Java с использованием HtmlUnit. Я могу выполнить свой тест, используя сборку ant. Все работает нормально. Я также могу выполнить свой ant-скрипт в Jenkins.

Моя проблема:

Я хочу иметь возможность запускать свои тесты в средах разработки, разработки и производства без необходимости изменять код. Могу ли я передать эти «URL среды» как часть моей сборки ant или есть другой способ сделать это?

В настоящее время мой код выглядит следующим образом:

Класс конфигурации:

 package com.environments;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Configuration {

public static String getUrl(String environment) throws IOException {

    Properties prop = new Properties();
    InputStream input = null;

    input = new FileInputStream("configuration/environment.properties");

    prop.load(input);
    String url = prop.getProperty(environment);

    return url;

}


public static String setEnvironment(String url) throws Exception {

    switch (url) {
        case "DEV": url = Configuration.getUrl("DEV"); break; 
        case "STAGE": url = Configuration.getUrl("STAGE"); break; 
        case "LIVE": url = Configuration.getUrl("LIVE"); break;         
    }

    return url;
}
}
  

Тестовый класс:

 package com.course_landingpage;

import static com.thoughtworks.twist.core.execution.TwistVerification.verifyEquals;
import org.springframework.beans.factory.annotation.Autowired;
import com.environments.Configuration;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.thoughtworks.twist.core.execution.TwistScenarioDataStore;
import com.ui.pagetitles.PageTitles;

public class LandingPageCarouselTest {

public static String url;

@Autowired
private TwistScenarioDataStore scenarioStore;

public LandingPageCarouselTest() throws Exception {         
    url = Configuration.setEnvironment("DEV");
}


// Tests for the landing page carousel
public void verifyCarouselDisplayedWithCourseInformation() throws Exception {

    final WebClient webClient = new WebClient();
    final HtmlPage page = webClient.getPage(url   "/home.html");
    verifyEquals("Incorrect page title", PageTitles.CPD_LANDING_PAGE, page.getTitleText());

    //Click the Discover More button in the carousel 
    final HtmlAnchor anchor = page.getAnchorByText("DISCOVER MORE");
    anchor.click();

    // Click right arrow to view next course in carousel 
    final HtmlAnchor rightArrow = page.getAnchorByText(">");
    rightArrow.click();

    // Click left arrow to view previous course in carousel 
    final HtmlAnchor leftArrow = page.getAnchorByText("<");
    leftArrow.click();

    // Check the course title is correct in the carousel 
    DomElement element = page.getFirstByXPath("/html/body/section/article/ul/li/div/h2");
    final String course1Title = element.getTextContent();
    verifyEquals("Course text is incorrect", course1Title, Configuration.getCourseTitleInCarousel());

    webClient.closeAllWindows();
}
  

Как вы можете видеть, в настоящее время, когда я хочу запустить свой тест в другой среде, я устанавливаю среду в конструкторе моего тестового класса. В настоящее время установлено значение «DEV». Но я могу установить для него значение «STAGE» или «LIVE» для тестирования в других средах.

Комментарии:

1. Обычно используемый стандарт — иметь config.properties для каждой среды. Config.properties может содержать свойство, указывающее, какова текущая среда. Вы рассматривали что-то подобное?

2. хорошо, имеет смысл, как мне тогда использовать это свойство в моей сборке ant? Я хотел бы изменить это значение свойства до запуска моей сборки ant, поэтому было бы хорошо, если бы я мог передать его в качестве параметра

3. Вы не получили бы к нему доступ в своей сборке ant, вы получили бы к нему программный доступ. Но кто-то дал лучший ответ, чтобы сделать именно то, что вы пытаетесь сделать.

Ответ №1:

Если вы выполняете свой тестовый класс Java с помощью задачи java Ant, вы можете передать URL среды в качестве системного свойства через sysproperty вложенный элемент:

 <java dir="${testdir}" classname="MainClass">
   <sysproperty key="env.url" value="${env.url}"></sysproperty>
   ...
</java>
  

Вы можете получить доступ к значению системного свойства в вашем конструкторе следующим образом:

 url = Configuration.setEnvironment(System.getProperty("env.url"));
  

Свойство ${env.url} Ant может быть извлечено либо из некоторого файла конфигурации, который существует в среде, как другой пользователь упомянул в своем комментарии, либо оно может быть передано явно в ваш файл сборки Ant, когда вы хотите его запустить: ant -f build.xml -Denv.url=DEV