#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