LoggingSelenium如何收集日志信息

本文对前几天写的文章《LoggingSelenium入门第一课》中的源代码详细解读一下,分享LoggingSelenium如何收集日志信息,为以后开发收集WebDriver日志信息的软件做准备。

首先,创建一个BufferedWriter实例.

final String resultHtmlFileName = resultsPath + File.separator
				+ "results.html";
		System.err.println("resultHtmlFileName=" + resultHtmlFileName);
		loggingWriter = LoggingUtils.createWriter(resultHtmlFileName,
				RESULT_FILE_ENCODING, true);

其中,需要为LoggingUtils的createWriter()方法提供三个参数。
1. html日志文件的绝对路径,例子为变量代表的路径resultHtmlFileName
2. 日志文件的字符集编码,例子中为变量RESULT_FILE_ENCODING指定的字符集。
3. 布尔值,true表示如存在同名结果文件则覆盖。

接着,创建一个HtmlResultFormatter实例.

LoggingResultsFormatter htmlFormatter =
		new HtmlResultFormatter(loggingWriter, RESULT_FILE_ENCODING);
		// 用于链接到截图文件夹
		htmlFormatter.setScreenShotBaseUri(SCREENSHOT_PATH + "/");
		htmlFormatter.setAutomaticScreenshotPath(screenshotsResultsPath);

其中使用构造方法,创建实例时需要指定的参数为:
1. BufferedWriter,在上文中已经创建
2. 日志文件的字符集编码,和上文中的编码一致。
创建实例完毕后,需要调用的方法设置更多信息:
1. setScreenShotBaseUri()方法,为截图设置URI
2. setAutomaticScreenshotPath()为自动截图设置图片保存路径

然后,创建一个LoggingCommandProcessor实例。

HttpCommandProcessor processor=new HttpCommandProcessor("127.0.0.1", 4444,"*firefox", "http://loggingselenium.com/");
LoggingCommandProcessor myProcessor =new LoggingCommandProcessor(processor, htmlFormatter);

其中,LoggingCommandProcessor有2个构造方法,一个是public LoggingCommandProcessor(CommandProcessor HttpCommandProcessor, LoggingResultsFormatter myFormatter),另外一个  public LoggingCommandProcessor(String serverHost, int serverPort, String browserStartCommand, String browserUrl, LoggingResultsFormatter myFormatter)。

本例中使用的第一个,需要为其提供的参数为:

  1. HttpCommandProcessor对象,需要为该对象提供参数,Selenium Server运行信息、待测应用的URl等
  2. LoggingResultsFormatter,在上文中已经创建,即变量htmlFormatter。

在初始化LoggingCommandProcessor时,其他值得一提的实例是:

public final TestMetricsBean seleniumTestMetrics = new TestMetricsBean();

用于收集Selenium Server版本信息、执行环境信息、执行命令的数目等。

List<LoggingBean> loggingEventsQueue = new ArrayList<LoggingBean>();

用于保存LoggingBean信息的列表,用于收集执行过程中的执行日志信息,包括命令名称、参数、执行结果、起止时间、相关的调用信息等等。

最后,创建一个LoggingDefaultSelenium实例。

LoggingDefaultSelenium类继承DefaultSelenium类,并实现了接口LoggingSelenium。

               selenium = new LoggingDefaultSelenium(myProcessor);
		System.out.println("正在启动Selenium。。。");
		selenium.start();
		selenium.windowMaximize();

其中,使用的构造方法是public LoggingDefaultSelenium(final CommandProcessor commandProcessor),使用的参数为上文中创建的LoggingCommandProcessor实例myProcessor。

准备构造工作已经完成,下面来看看是如何收集具体日志信息的。

先看看start()方法:

LoggingDefaultSelenium继承父类DefaultSelenium的start()方法,执行时进一步调用LoggingCommandProcessor的start()方法,该方法调用HttpCommandProcessorstart()方法完成Selenium的启动,然后为TestMetricsBean实例设置程序开始时间,并调用logExecutionEnvironment(),为TestMetricsBean实例提供更多信息。

再看看open()等具体的执行业务的方法:

LoggingDefaultSelenium继承父类DefaultSelenium的open()方法,执行时进一步调用LoggingCommandProcessor的public String doCommand(String commandName, String[] args) ()方法。该方法调用HttpCommandProcessordoCommand()方法完成命令操作,收集日志信息。继续以open()方法为例,为TestMetricsBean实例中的命令数目增加1,并调用void doLogging(String commandName, String[] args, String result, long cmdStartMillis) 方法收集所运行的命令信息,保存在List<LoggingBean> loggingEventsQueue,供后续调用。

最后,来看看stop()方法:

LoggingDefaultSelenium继承父类DefaultSelenium的open()方法,执行时进一步调用LoggingCommandProcessor的stop()方法。该方法调用seleniumTestFinished()用于设置程序执行完毕的时间,并处理wait time,最后创建EventQueuePostProcessor的实例来完成日志信息的输出,后续会有专门的文章对输出进行解释,在这里就不多说了

 

本文为LoggingSelenium网站原创,本文地址:http://loggingselenium.com/?p=259 .非常感谢分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值