Как я могу обновить папку с кодом Java?

avatar
Qaddaffi
8 апреля 2018 в 10:09
2945
1
2

Что я пытаюсь сделать:

Создайте отчет о тестировании после выполнения теста, а затем отправьте его по электронной почте (я использую Maven, Cucumber и RestAssured).

Проблема, с которой я столкнулся:

Происходит все вышеперечисленное, за исключением того, что отчет о тестировании, который отправляется по электронной почте, фактически относится к предыдущему тесту. То есть отчет или папка с отчетом не обновляются при запуске кода для отправки отчета по электронной почте.

Есть ли какой-либо способ обновить папку в конце выполнения теста с помощью maven или есть ли другой способ отправить последний отчет о тестировании?

Любой указатель приветствуется. Ниже приведен мой код запуска Cucumber,

.
@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/resources/Feature"
    ,glue= "com/sss/tests/RestApi"
    ,tags = {"@TestInDevelopment"}
    ,plugin = {"com.cucumber.listener.ExtentCucumberFormatter:/Report.html"}        
    ,format = {"pretty","html:target/cucumber"}
    ,monochrome = true
    )

public class TestRunner { 
static Configurations config = new Configurations();

@BeforeClass
public static void setup(){

    /*
     * Loading the log4j configurations, before the start of test execution
     */     
    String folderName = "PropertyFiles";
    String fileName = "log4j.properties";
    PropertyConfigurator.configure(config.getResourcePath(folderName)+fileName);

}

@AfterClass
public static void teardown() throws UnknownHostException, IOException, InterruptedException {

    /*
     * Loading the configuration file for the test execution report and setting up the user name, OS info and host details in the report
     */     
    Reporter.loadXMLConfig(new File(config.getResourcePath("Resources")+"extent-config.xml"));
    Reporter.setSystemInfo("USER", System.getProperty("user.name"));
    Reporter.setSystemInfo("OS", System.getProperty("os.name"));
    Reporter.setSystemInfo("HOST NAME", InetAddress.getLocalHost().getHostName());  

   /*
    * After the test execution is completed, parsing the generated test execution report to to see if there is any failures and based on that,
    * sending the Build Success/Failure e-mail to the configured mail list
    */        
    HTML_TestExecutionReportParser testExecutionStatusParser = new HTML_TestExecutionReportParser();    
    TestExecutionReportEmailSender testExecutionReportMailSender = new TestExecutionReportEmailSender();        
    testExecutionReportMailSender.sendTestExecutionReportEmail(testExecutionStatusParser.isAssertionFailureFound(), testExecutionStatusParser.errorsFoundList());     

}

}

Источник
Thorbjørn Ravn Andersen
8 апреля 2018 в 10:45
0

Вы уверены, что отчет уже написан, когда выполняется @AfterClass?

Qaddaffi
8 апреля 2018 в 11:03
0

Я удалил старый отчет и запустил свои тесты, он выдал FileNotFoundException. Я предполагал, что отчет пишется во время выполнения @AfterClass и что все еще требуется обновление на уровне папки. Но если отчет пишется после выполнения @AfterClass, мне просто интересно, где я буду обрабатывать часть отправки по электронной почте, потому что @AfterClass должен быть последним блоком кода, который выполняется.

Grasshopper
8 апреля 2018 в 11:55
0

Попробуйте поместить код отправки по электронной почте в хук отключения jvm. Может быть, это работает. geeksforgeeks.org/jvm-shutdown-hook-java

Qaddaffi
8 апреля 2018 в 13:21
0

Спасибо, @Grasshopper, размещение кода электронной почты внутри хука выключения сработало для меня, и теперь он отправляет последний отчет вместо старого. Хотя я не уверен, является ли это хорошей идеей или практикой, в данный момент она удовлетворяет мои потребности. Я могу проголосовать, если вы опубликуете это как свой ответ.

Grasshopper
8 апреля 2018 в 13:40
0

@Qaddaffi Единственное другое решение - просмотреть исходный код средства форматирования, чтобы выяснить, когда вызывается метод flush ().

Ответы (1)

avatar
Grasshopper
8 апреля 2018 в 13:38
3

Вы можете попробовать поместить код электронной почты в JVM shutdown hook. Таким образом, он будет вызываться, когда будет выполнен любой другой процесс.

Пример перехватчика выключения -- https://www.geeksforgeeks.org/jvm-shutdown-hook-java/

Qaddaffi
8 апреля 2018 в 20:01
0

Мне снова не разрешено голосовать, так как моя репутация ниже 15. Извините за это.

Grasshopper
9 апреля 2018 в 03:33
0

Не беспокойтесь... Не о чем сожалеть