我一直在尝试使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中,您将具有相同的行为。
细节
在这种情况下,什么是自定义自动化框架?
当我说自定义自动化框架时,我指的是任何可以进行SDK
和Reporter
初始化和清理的框架。
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
扩展。这样,您就可以以非常特定的方式初始化
SDK
和Reporter
,这就是使用此初始化生成HTML报告的原因。如果要在自定义框架中重现此特定方式,则还将生成HTML报告。如果您好奇,可以检查UnitTestBase.class
文件的内容以查看其作用。您将从UnitTestBase扩展。为什么不起作用?
如我的评论中所述,实际上您是在两次进行
SDK
和Reporter
初始化,一次是通过扩展UnitTestBase
(如上所述,它已经进行了初始化),第二次是在您的setUp
方法。由于您正在使用LeanFT 14.00,因此应让
UnitTestBase
进行初始化,清理和生成报告。这意味着您的测试类文件应更改为不再包含SDK
和Reporter
的初始化,如下所示: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中实现呢?
SDK
和Reporter
可以通过两种方式配置:在初始化时,您尝试通过
ModifiableSDKConfiguration
和ModifiableReportConfiguration
进行操作要么
在测试设置文件(
resources/leanft.properties
)中。您可以看到plenty details in the official help。您还可以通过
Reporter
API在运行时操作一些报告设置:设置报告级别:
Reporter.setReportLevel(ReportLevel.All);
设置快照捕获级别
Reporter.setSnapshotCaptureLevel(CaptureLevel.All);
即使通过基类初始化了
SDK
和Reporter
,您仍然可以在报告中添加自定义报告事件(这些工作:Reporter.reportEvent();
,Reporter.startReportingContext();
,Reporter.startTest();
等)。