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

标签 java selenium leanft

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

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

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 :

  • 测试类:

    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 {
            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/");
    
        }
    }
    
  • Selenium 类:

    import com.hp.lft.report.Status;
    import com.hp.lft.unittesting.UnitTestBase;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.ClassRule;
    import org.junit.Rule;
    import org.junit.rules.TestWatcher;
    
    public class Selenium  extends UnitTestBase{
    
        protected static Selenium instance;
    
        public static void globalSetup(Class<? extends Selenium> testClass) throws Exception {
            if (instance == null)
                instance = testClass.newInstance();
            instance.classSetup();
        }
    
        @Before
        public void beforeTest() throws Exception {
            testSetup();
        }
    
        @After
        public void afterTest() throws Exception {
            testTearDown();
        }
    
        public static void globalTearDown() throws Exception {
            instance.classTearDown();
            getReporter().generateReport();
        }
    
        @ClassRule
        public static TestWatcher classWatcher = new TestWatcher() {
            @Override
            protected void starting(org.junit.runner.Description description) {
                className = description.getClassName();
            }
        };
    
        @Rule
        public TestWatcher watcher = new TestWatcher() {
            @Override
            protected void starting(org.junit.runner.Description description) {
                testName = description.getMethodName();
            }
            @Override
            protected void failed(Throwable e, org.junit.runner.Description description) {
                setStatus(Status.Failed);
            }
    
            @Override
            protected void succeeded(org.junit.runner.Description description) {
                setStatus(Status.Passed);
            }
        };
    
        @Override
        protected String getTestName() {
            return testName;
        }
    
        @Override
        protected String getClassName() {
            return className;
        }
    
        protected static String className;
        protected String testName;
    
    
    
    }
    

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 类,该类扩展自 UnitTestBase 并且您的 LeanFtTest 类从此 UnitTestClassBase 扩展。

通过这样做,您将以一种非常具体的方式初始化 SDKReporter,这就是通过此初始化生成 HTML 报告的原因。如果您要在自定义框架中重现这种特定方式,您还将生成 HTML 报告。如果您好奇,可以检查 UnitTestBase.class 文件的内容来了解​​它的作用。

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

正如我的评论中提到的,您实际上执行了 SDKReporter 初始化两次,一次是通过扩展 UnitTestBase (其中,我在上面描述过,初始化已经完成了)并且在您的 setUp 方法中第二次。

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

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 和报告。如何在 LeanFT 14.00 中实现这一目标?

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

  1. 在初始化时,正如您尝试通过 ModABLESDKConfigurationModABLEReportConfiguration 执行的操作

  • 在测试设置文件 (resources/leanft.properties) 中。您可以看到plenty details in the official help .
  • 您还可以通过 Reporter API 在运行时操作一些报告设置:

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

    关于java - LeanFT 和 Selenium 自定义自动化框架 - 不生成 HTML 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189325/

    相关文章:

    java - 如何使用 map 进行多态 jackson 序列化

    python - 在Python中扩展现有的类实例

    python - 套接字错误 : [Errno 54] Connection reset by peer Selenium-python

    java - LeanFT & Java : Run tests in Docker containers

    java - LeanFT 项目中的 Jar 文件 - 类 Not Acceptable

    java - 如何将位写入字节?

    java - 当您想创建您的第一个 Java Web 应用程序时该怎么办?

    java - 使用gradle将war文件发布到artifactory

    java - 如何获取里面有span文本的li