Я новичок в Ant и программировании в целом.
Что я наделал:
Я написал тест на Java с помощью HtmlUnit. Я могу выполнить свой тест с помощью сборки муравьев. Он работает нормально. Я также могу исполнить свой скрипт ant в Jenkins.
Моя проблема:
Я хочу иметь возможность запускать свои тесты в среде разработки, стадии и производства без необходимости изменять код. Могу ли я передать эту среду "URL" как часть моей сборки муравьев или есть ли другой способ сделать это?
В настоящее время мой код выглядит следующим образом:
Класс конфигурации:
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" для тестирования в других средах.
Если вы выполняете свой тестовый класс 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