165 lines
7.8 KiB
C#
165 lines
7.8 KiB
C#
using Microsoft.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using System.Reflection;
|
|
using OpenQA.Selenium;
|
|
using System.IO;
|
|
|
|
namespace Prevu
|
|
{
|
|
public class TestRegistrator
|
|
{
|
|
const string regKeyCurrentTest = "HKEY_CURRENT_USER\\Software\\TestSystem\\CurrentTest";
|
|
const string regKeyLastTest = "HKEY_CURRENT_USER\\Software\\TestSystem\\LastTest";
|
|
protected static Result result;
|
|
protected string domain;
|
|
|
|
public TestRegistrator(string domain)
|
|
{
|
|
this.domain = domain;
|
|
}
|
|
|
|
protected void UpdateResultSpecProperties(string typeName, string methodName, string assemblyLocation, string methodModuleName, string useCase, string scenario)
|
|
{
|
|
if ((result.Class == typeName) && (result.Name.IndexOf(methodName) > -1))
|
|
{
|
|
result.AssemblyLocation = assemblyLocation;
|
|
result.MethodModule = methodModuleName;
|
|
result.UseCase = useCase;
|
|
result.Scenario = scenario;
|
|
}
|
|
}
|
|
protected void UpdateSpecProperties()
|
|
{
|
|
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
|
|
{
|
|
foreach (Type type in assembly.GetTypes())
|
|
{
|
|
if (type.IsSubclassOf(typeof(BaseTest)))
|
|
{
|
|
//PROPERTIES
|
|
/*foreach (System.Reflection.PropertyInfo property in type.GetProperties()) {
|
|
if (property.CanRead) {
|
|
//Response.Write("<br>" + an.ToString() + "." + type.ToString() + "." + property.Name);
|
|
}
|
|
}*/
|
|
//METHODS
|
|
var methods = type.GetMethods();
|
|
foreach (System.Reflection.MethodInfo method in methods)
|
|
{
|
|
object[] attributes = method.GetCustomAttributes(typeof(TestPropertyAttribute), true);
|
|
if (attributes.Length > 0)
|
|
{
|
|
TestPropertyAttribute attribute = (TestPropertyAttribute)attributes[0];
|
|
var attConfig = assembly.GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false);
|
|
//activity.UpdateSpecProperties(type.FullName, method.Name, assembly.Location, method.Module.Name, attribute.Name, attribute.Value);
|
|
UpdateResultSpecProperties(type.FullName, method.Name, assembly.Location, method.Module.Name, attribute.Name, attribute.Value);
|
|
}
|
|
//Response.Write("<br><b>" + an.ToString() + "." + type.ToString() + "." + method.Name + "</b>");
|
|
/*foreach (System.Reflection.ParameterInfo param in method.GetParameters()) {
|
|
//Response.Write("<br><i>Param=" + param.Name.ToString());
|
|
//Response.Write("<br> Type=" + param.ParameterType.ToString());
|
|
//Response.Write("<br> Position=" + param.Position.ToString());
|
|
//Response.Write("<br> Optional=" + param.IsOptional.ToString() + "</i>");
|
|
}*/
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected static string CorrectTestNameToFileName(string testName)
|
|
{
|
|
return testName.Replace("\\", "").Replace("/", "").Replace("(", "").Replace(")", "").Replace("#", "").Replace("@", "").Replace("*", "").Replace("!", "").Replace("$", "").Replace("%", "").Replace("^", "").Replace(":", "").Replace("?", "").Replace("+", "").Replace("=", "").Replace("|", "").Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "").Replace("'", "").Replace("\"", "").Replace(";", "").Replace("<", "").Replace(">", "").Replace(".", "").Replace(",", "").Replace("-", "").Replace(" ", "").Replace("_", "");
|
|
}
|
|
protected static string GetBrowser(IWebDriver driver)
|
|
{
|
|
string browser = "Unknown";
|
|
string[] set = driver.GetType().FullName.Split('.');
|
|
if (set.Length > 0)
|
|
{
|
|
browser = set[set.Length - 1].Replace("Driver", "");
|
|
}
|
|
return browser;
|
|
}
|
|
protected static void SaveScreenshot(IWebDriver driver, string pngFileName)
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(pngFileName))
|
|
{
|
|
File.Delete(pngFileName);
|
|
}
|
|
Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();
|
|
screenshot.SaveAsFile(pngFileName, System.Drawing.Imaging.ImageFormat.Png);
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
protected string GetFullTestName(TestContext testContext)
|
|
{
|
|
string testCase = "";
|
|
if ((testContext.DataRow != null) && (testContext.DataRow.ItemArray != null) && (testContext.DataRow.ItemArray.Length > 0))
|
|
{
|
|
testCase = testContext.DataRow.ItemArray[0].ToString();
|
|
}
|
|
if (!string.IsNullOrEmpty(testCase))
|
|
{
|
|
testCase = string.Format("({0})", testCase);
|
|
}
|
|
return string.Format("{0}.{1}{2}", testContext.FullyQualifiedTestClassName, testContext.TestName, testCase);
|
|
}
|
|
public void RegisterStart(TestContext testContext, WebDriver driver)
|
|
{
|
|
string fullTestName = GetFullTestName(testContext);
|
|
result = Result.Load(testContext.FullyQualifiedTestClassName, GetBrowser(driver.Driver), fullTestName);
|
|
result.Started = DateTime.Now;
|
|
|
|
Registry.SetValue(regKeyCurrentTest, "Name", fullTestName);
|
|
Registry.SetValue(regKeyCurrentTest, "Started", DateTime.Now.ToString());
|
|
Console.WriteLine(fullTestName);
|
|
|
|
}
|
|
public void RegisterFinish(TestContext testContext, WebDriver driver)
|
|
{
|
|
result.Finished = DateTime.Now;
|
|
result.Outcome = testContext.CurrentTestOutcome.ToString();
|
|
result.Duration = result.Finished.Subtract(result.Started).ToString(@"hh\:mm\:ss");
|
|
|
|
Registry.SetValue(regKeyCurrentTest, "Name", "");
|
|
Registry.SetValue(regKeyCurrentTest, "Started", "");
|
|
|
|
Registry.SetValue(regKeyLastTest, "Name", GetFullTestName(testContext));
|
|
Registry.SetValue(regKeyLastTest, "Started", result.Started);
|
|
Registry.SetValue(regKeyLastTest, "Finished", result.Finished);
|
|
Registry.SetValue(regKeyLastTest, "Duration", result.Duration);
|
|
Registry.SetValue(regKeyLastTest, "Outcome", testContext.CurrentTestOutcome);
|
|
|
|
result.Name = GetFullTestName(testContext);
|
|
if (testContext.CurrentTestOutcome != UnitTestOutcome.Passed)
|
|
{
|
|
string testName = GetFullTestName(testContext);
|
|
string screenShotsFolder = @"..\..\..\ScreenShots";
|
|
string screenShotsFile = string.Format("{0}.png", CorrectTestNameToFileName(testName));
|
|
screenShotsFile = Path.Combine(screenShotsFolder, screenShotsFile);
|
|
SaveScreenshot(driver.Driver, screenShotsFile);
|
|
result.ScreenShot = Path.GetFullPath(screenShotsFile);
|
|
Console.WriteLine(string.Format("Test Failed. See screenshot {0}", screenShotsFile));
|
|
}
|
|
else
|
|
{
|
|
result.ScreenShot = " ";
|
|
Console.WriteLine("Test Passed.");
|
|
}
|
|
result.Domain = domain;
|
|
UpdateSpecProperties();
|
|
result.Save();
|
|
}
|
|
}
|
|
}
|