SeleniumJavaテストにログを追加したいと思います。log4jFrameworkを実装しました。これは、ログをコンソールまたはファイルに配置することでうまく機能します。
JUnitテストフレームワークを使用していますが、ファイルがすでに存在する場合にファイルの先頭に+1を付けるという標準的な規則を使用するのではなく、ログファイルのファイル名にテスト名と日付/時刻を含めたいと思います。 。
これは私のlog4j.propertiesファイルです...
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.File=~/Desktop/Selenium/AutomationLogs/automationLog
log4j.appender.rollingFile.MaxFileSize=2MB
log4j.appender.rollingFile.MaxBackupIndex=2
log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss} %p %t %c - %m%n
私がオンラインで見つけたものは、毎日のローリングファイルにのみ関連しているようです。単体テストを実行するたびに、ログ用の新しいファイルを生成したい
私があなたのニーズを正しく理解している場合、これは以下を組み合わせることによって達成することができます:
具体的には、カスタムJUnitルールを作成する必要があります。私はTestWatcher
それが最も適切であると思われるので拡張することを選びました
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public class TestMethodLogging extends TestWatcher {
private static final String date = new SimpleDateFormat("y-MM-dd")
.format(new Date());
private Logger logger;
@Override
protected void starting(Description description) {
String name = description.getMethodName();
RollingFileAppender a = (RollingFileAppender) Logger.getRootLogger()
.getAppender("rollingFile");
PatternLayout layout = new PatternLayout();
layout.setConversionPattern("%d{dd MMM yyyy HH:mm:ss} %p %t %c - %m%n");
try {
File logDir = new File(a.getFile()).getParentFile();
File logFile = new File(logDir, name + "_" + date);
logger = Logger.getLogger(name);
logger.addAppender(new RollingFileAppender(layout, logFile
.getAbsolutePath()));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Logger getLogger() {
return logger;
}
}
これを取得したら、原則としてテストクラス内に配置できます。ルールは、単にテストのフィールドです(@Rule
注釈を付けます)。ここで私はそれを呼びましたrule
(あまり想像力がありません、私は認めます)。テストメソッドからログを記録するには、を呼び出す必要がありますrule.getLogger()
。
import static org.junit.Assert.assertEquals;
import org.junit.Rule;
import org.junit.Test;
public class MyTest {
@Rule
public TestMethodLogging rule = new TestMethodLogging();
@Test
public void sumOfTwoInts() throws Throwable {
rule.getLogger().error(
"logging to a logger whose name is based on the test method's name");
assertEquals(5, 2 + 3);
}
@Test
public void productOfTwoInts() throws Throwable {
rule.getLogger().error(
"logging to a logger whose name is based on the test method's name");
assertEquals(8, 2 * 4);
}
}
このテストを実行すると、~/Desktop/Selenium/AutomationLogs
ディレクトリの下に次の2つのファイルが作成されます。
productOfTwoInts_2015-05-10
sumOfTwoInts_2015-05-10
最初のファイルの内容は次のようになります。
$ cat productOfTwoInts_2015-05-10
10 May 2015 19:59:58 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name
10 May 2015 20:01:22 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name
10 May 2015 20:01:24 ERROR main productOfTwoInts - logging to a logger whose name is based on the test method's name
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加