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

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

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/");

    }
}

硒类:

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

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

哦,只是为了澄清一下:这个问题与硒无关。例如,在使用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的初始化,如下所示:

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可以通过两种方式配置:


在初始化时,您尝试通过ModifiableSDKConfigurationModifiableReportConfiguration进行操作


要么


在测试设置文件(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();等)。

10-08 16:49