LeanFT 和 Selenium 自定义自动化框架 - 未生成 HTML 报告

LeanFT & Selenium custom automation framework - no HTML report generated

我一直在尝试让 LeanFT html 报告与我的 Selenium/Junit 框架一起工作,但是到目前为止没有任何乐趣。 我在不同的论坛上多次搜索过这个话题,包括。惠普官方资料,尝试了所有我能找到的设置方法。 使用自定义 Selenium/LeanFT 框架时仍会生成 XML 运行结果文件。

我使用 JUnit 作为我的框架并使用 Selenium 作为 SDK 创建了一个 LeanFT 测试项目。我还添加了相关的 Selenium 罐子。

LeanFT 版本为 14.0.2816.0。 我意识到这个问题:https://community.softwaregrp.com/t5/UFT-Practitioners-Forum/HTML-report-not-generated-in-custom-framework-using-LeanFT/td-p/1614027 .

如果有人能解释我在这里犯错的地方或者软件版本是否是这里的问题,我将不胜感激。非常感谢任何帮助。

实际设置包含更多抽象,通常更复杂并且作为 jar 文件运行,但为了本主题的目的我简化了代码,因为两个设置的结果是相同的 - runresults.xml 没有 html:

Libraries

TL;DR

该报告仅在 14.00 中通过扩展 UnitTestBase 生成。要使用自定义自动化框架生成报告,您必须至少升级到 LeanFT 14.01(尽管在撰写本文时最新版本是 14.02)。

哦,澄清一下:这个问题与 Selenium 无关。例如,您在使用 NUnit 3 的 C# LeanFT SDK 中会有相同的行为。

详情

在此上下文中什么是自定义自动化框架?

当我说自定义自动化框架时,我指的是执行 SDKReporter 初始化和清理本身的任何框架。

LeanFT 通过其引擎发挥所有魔力。要告诉自定义框架连接到引擎,您需要执行以下步骤:

  • 在测试套件的开头:

    SDK.init();
    Reporter.init(); // This is not for the engine, but for the HTML report generation
    
  • 在测试套件结束时

    Reporter.generateReport();
    SDK.cleanup();
    

当您使用内置模板时,您会注意到 UnitTestClassBase class 是自动创建的,它从 UnitTestBase 延伸并且您的 LeanFtTest class 从这个 UnitTestClassBase.

延伸

通过这样做,您将以非常具体的方式初始化 SDKReporter,这就是为什么通过此初始化生成 HTML 报告的原因。如果您要在 custom 框架中重现这种特定方式,您还会生成 HTML 报告。如果你很好奇,你可以查看 UnitTestBase.class 文件的内容,看看它做了什么。

您正在从 UnitTestBase 扩展。为什么它不起作用?

正如我在评论中提到的,您实际上是在执行 SDKReporter 初始化两次,一次是通过扩展 UnitTestBase (正如我上面所描述的那样,进行初始化已经)和第二次在你的 setUp 方法中。

由于您使用的是 LeanFT 14.00,因此您应该让 UnitTestBase 进行初始化、清理和报告生成。这意味着您的测试 Class 文件应该更改为不再包含 SDKReporter 的初始化,如下所示:

import com.hp.lft.report.CaptureLevel;
import com.hp.lft.report.ModifiableReportConfiguration;
import com.hp.lft.report.Reporter;
import com.hp.lft.sdk.ModifiableSDKConfiguration;
import com.hp.lft.sdk.SDK;
import com.hp.lft.sdk.web.Browser;
import com.hp.lft.sdk.web.BrowserDescription;
import com.hp.lft.sdk.web.BrowserFactory;
import com.hp.lft.sdk.web.BrowserType;
import core.Selenium;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.*;
import java.io.File;
import java.net.URI;


public class SeleniumTest extends Selenium {

    WebDriver driver;
    Browser browser;

    public SeleniumTest() {
        //Change this constructor to private if you supply your own public constructor
    }


    @BeforeClass
    public static void setUpBeforeClass() throws Exception {

        instance = new SeleniumTest();
        globalSetup(SeleniumTest.class);


    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        globalTearDown();

    }

    @Before
    public void setUp() throws Exception {


    /*
        This will not work in LeanFT 14.00, so we are commenting it out

        ModifiableSDKConfiguration sdkConfig = new ModifiableSDKConfiguration();

        sdkConfig.setServerAddress(new URI("ws://localhost:5095"));
        SDK.init(sdkConfig);
        ModifiableReportConfiguration reportConfig = new ModifiableReportConfiguration();
        reportConfig.setOverrideExisting(true);
        reportConfig.setTargetDirectory("C:\Users\user\IdeaProjects\LeanFT_Selenium\RunResults");
        reportConfig.setReportFolder("LastRun");
        reportConfig.setTitle("Summary");
        reportConfig.setDescription("Description");
        reportConfig.setSnapshotsLevel(CaptureLevel.All);

        Reporter.init(reportConfig);
    */
    ChromeOptions options = new ChromeOptions();
    options.addExtensions(new File
            ("C:\Program Files (x86)\HP\Unified Functional Testing\Installations\Chrome\Agent.crx"));
    System.setProperty("webdriver.chrome.driver",
            "C:\HP_Reporting\Webdriver\chromedriver.exe");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new ChromeDriver(options);
    browser = BrowserFactory.attach(new BrowserDescription.Builder()
            .type(BrowserType.CHROME).build());
}

@After
public void tearDown() throws Exception {

    driver.quit();
    browser = null;

    //Reporter.generateReport();
    //SDK.cleanup();
}

@Test
public void test() throws Exception {

    driver.get("https://www.google.co.uk/");

}

}

但是我需要配置SDK和Report。我怎样才能在 LeanFT 14.00 中实现这一点?

SDKReporter可以通过两种方式配置:

  1. 在初始化时,您尝试通过 ModifiableSDKConfigurationModifiableReportConfiguration

  1. 在测试设置文件中 (resources/leanft.properties)。可以看到plenty details in the official help.

您也可以通过 Reporter API:

在运行时操作 某些 报告设置
  • 设置报告级别:Reporter.setReportLevel(ReportLevel.All);
  • 设置快照捕获级别Reporter.setSnapshotCaptureLevel(CaptureLevel.All);
  • 即使您通过基础 class 初始化了 SDKReporter,您仍然可以在报告中添加自定义报告事件(这些工作:Reporter.reportEvent(); , Reporter.startReportingContext();, Reporter.startTest();, 等等)