C#で失敗したテストケースのスクリーンショットを取得するための基本クラスを作成しました。私は、自動化テストのためにMSTestでspecflowを使用しました。しかし、問題は、シナリオが失敗して、シナリオ数の総数がAfterScenario
以下のメソッドを実行する場合です。たとえば、私の現在のプロジェクトには40のシナリオがあります。シナリオ#1が実行中で、シナリオ#1の実行後にはAfterScenario
メソッドが呼び出されますが、各シナリオで40回呼び出されます。 SpecFlow AfterScenarioが毎回シナリオ数をカウントして実行する
[Binding]
public abstract class TakeScreenshot : Steps
{
[AfterScenario]
public void AfterWebTest()
{
if (ScenarioContext.Current["run"]=="0")
{
if (ScenarioContext.Current.TestError != null)
{
TakeScenarioScreenshot(Tools.driver);
}
ScenarioContext.Current["run"] = "1";
}
}
private void TakeScenarioScreenshot(IWebDriver driver)
{
try
{
string fileNameBase = string.Format("{0}_{1}",
DateTime.Now.ToString("yyMMddHHmmssFFF") , ScenarioContext.Current.ScenarioInfo.Title);
var artifactDirectory = Path.Combine(Directory.GetCurrentDirectory(), "testresults");
if (!Directory.Exists(artifactDirectory))
Directory.CreateDirectory(artifactDirectory);
string pageSource = driver.PageSource;
string sourceFilePath = Path.Combine(artifactDirectory, fileNameBase + "_source.html");
File.WriteAllText(sourceFilePath, pageSource, Encoding.UTF8);
ITakesScreenshot takesScreenshot = driver as ITakesScreenshot;
if (takesScreenshot != null)
{
var screenshot = takesScreenshot.GetScreenshot();
string screenshotFilePath = Path.Combine(artifactDirectory, fileNameBase + "_screenshot.png");
screenshot.SaveAsFile(screenshotFilePath, ImageFormat.Png);
}
}
catch (Exception ex)
{
Console.WriteLine("Error while taking screenshot: {0}", ex);
}
}
}
これは私が
[Binding]
public class CheckTwoNumberAreEqual : TakeScreenshot
{
[Given(@"Check two numbers are same")]
public void GivenChecktwonumbersaresame()
{
Assert.AreEqual(2, 3);
}
}
[Binding]
public class TestAddNewUser : TakeScreenshot
{
[Given(@"Add two numbers and check answer")]
public void GivenAddtwonumbersandcheckanswer()
{
int a=2+3;
Assert.AreEqual(2, a);
}
}
がn(シナリオ数)についてAfterScenario
実行を防ぐために、とにかくありTakeScreenshot
クラスを継承しています私のテストクラスですか?
私は' AfterScenario'をフックアップしてあなたのソリューションを試しました。しかし、私は質問があります...私はシナリオメソッドの後に持っている基本プロジェクトで 'TakeScreenshot'クラスを持っていて、私のテストプロジェクトは基本プロジェクトDLLを参照しているので、最初はそれはシナリオメソッドの後にまだ実行されていませんでした。問題は 'AfterScenario'が基本プロジェクトで複数回実行されていた理由ですか?何か案が –