本文对前几天写的文章《LoggingSelenium入门第一课》中的源代码详细解读一下,分享LoggingSelenium如何收集日志信息,为以后开发收集WebDriver日志信息的软件做准备。
首先,创建一个BufferedWriter实例.
|
其中,需要为LoggingUtils的createWriter()方法提供三个参数。
1. html日志文件的绝对路径,例子为变量代表的路径resultHtmlFileName
2. 日志文件的字符集编码,例子中为变量RESULT_FILE_ENCODING指定的字符集。
3. 布尔值,true表示如存在同名结果文件则覆盖。
接着,创建一个HtmlResultFormatter实例.
|
其中使用构造方法,创建实例时需要指定的参数为:
1. BufferedWriter,在上文中已经创建
2. 日志文件的字符集编码,和上文中的编码一致。
创建实例完毕后,需要调用的方法设置更多信息:
1. setScreenShotBaseUri()方法,为截图设置URI
2. setAutomaticScreenshotPath()为自动截图设置图片保存路径
然后,创建一个LoggingCommandProcessor实例。
|
其中,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。
|
其中,使用的构造方法是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网站原创,本文地址:http://loggingselenium.com/?p=259 .非常感谢分享!