您的位置:首页 > 其它

LoggingSelenium如何收集日志信息

2014-07-26 10:01 393 查看
本文对前几天写的文章《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)。

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

HttpCommandProcessor对象,需要为该对象提供参数,Selenium Server运行信息、待测应用的URl等
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()方法,该方法调用HttpCommandProcessor的start()方法完成Selenium的启动,然后为TestMetricsBean实例设置程序开始时间,并调用logExecutionEnvironment(),为TestMetricsBean实例提供更多信息。
再看看open()等具体的执行业务的方法:
LoggingDefaultSelenium继承父类DefaultSelenium的open()方法,执行时进一步调用LoggingCommandProcessor的public String doCommand(String commandName, String[] args) ()方法。该方法调用HttpCommandProcessor的doCommand()方法完成命令操作,收集日志信息。继续以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网站原创,[b]本文地址:http://loggingselenium.com/?p=259
.非常感谢分享!
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LoggingSelenium