Saturday, July 5, 2014

VSTS Interview Question

C# Interview Questions:-

 1. What is the diff bw obj, var, dynamic?

2. When we go for singleton and when for static during design pattern?

3. What is default value of int, string in C#?

4. What will be the result if we try to print the uninitialized variable?

5. Does switch supports fall through in C#?\

6. Difference between abstract and Interface? and when we go for which?

7. Logic to get the largest length of palindrome substring from string?

8. Overriding vs overloading?

9. Read the csv data into collection/datatable.

10. What is reflection? and what will be number of argument if we pass "sample.exe a b"?


VSTS Interview Question:-

1.List of libraries added in Coded UI?

2. How to edit the CodedUi.uitest file?

3. File structure of Coded UI?

4. How to make it data driven?

5. How to pass any value from app.config file to files at run time ? and in which part of App.config?

6. How to move designer.cs file code into uimap.cs file?

7. Difference between search property and filter property? and what to use when?


 

Friday, July 4, 2014

Get log from .trx file

Get log from .trx file:-


We can get the logs in details from *.trx file to csv.
Sample code would be like:-


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;

using System.IO;

using System.Xml;

namespace ParseTraceResulttoCSV



{
 
/// <summary>

/// Class to read Xml Trace file.

/// </summary>

public class DebugTrace



{
 
/// <summary>

/// List to store all event occured in trace file

/// </summary>

private List<ResultObject> xmlTestResults;

/// <summary>

/// Hashtable to store execution ids and test ids

/// </summary>

private Hashtable xmlTestExecutions = new Hashtable();

/// <summary>

/// Constructor

/// </summary>

public DebugTrace()



{
 
xmlTestExecutions = new Hashtable();

xmlTestResults = new List<ResultObject>();



}
 
/// <summary>

/// Calling method for parsing Trace file

/// </summary>

/// <param name="args">filePath</param>

/// <param name="fileType">generated file type</param>

public void Run(string args, string fileType = "csv")



{
 
string str = "";

Hashtable tests = new Hashtable();

string ext = string.Empty;

if (!string.IsNullOrEmpty(args))

ext = (new FileInfo(args)).Extension;

if (args != null && ext.Contains("trx"))



{
 
try



{
 
TextReader tr = new StreamReader(args);



str = tr.ReadToEnd();
 
XmlDocument resultFile = new XmlDocument();



resultFile.LoadXml(str);
 
XmlNamespaceManager atomNamespaceManager = new XmlNamespaceManager(resultFile.NameTable);

atomNamespaceManager.AddNamespace("x", @"http://microsoft.com/schemas/VisualStudio/TeamTest/2010");

XmlNode appNode = resultFile.SelectSingleNode(@"x:TestRun", atomNamespaceManager);

foreach (XmlNode eachTest in appNode.SelectNodes(@"x:TestDefinitions/x:UnitTest", atomNamespaceManager))



{
 
string testName = "";

string testId = "";

foreach (XmlAttribute xmlAttribute in eachTest.Attributes)



{
 
if (xmlAttribute.Name == "id")



testId = xmlAttribute.Value;
 
if (xmlAttribute.Name == "name")



testName = xmlAttribute.Value;

}

tests.Add(testId, testName);

}
 
foreach (XmlNode eachTest in appNode.SelectNodes(@"x:TestDefinitions/x:OrderedTest", atomNamespaceManager))



{
 
string testName = "";

string testId = "";

foreach (XmlAttribute xmlAttribute in eachTest.Attributes)



{
 
if (xmlAttribute.Name == "id")



testId = xmlAttribute.Value;
 
if (xmlAttribute.Name == "name")



testName = xmlAttribute.Value;

}

tests.Add(testId, testName);

}

xmlTestExecutions.Clear();
 
testExecutionList(appNode.SelectSingleNode(@"x:TestEntries", atomNamespaceManager), atomNamespaceManager);



xmlTestResults.Clear();
 
XmlNode newappnode = appNode.SelectSingleNode(@"x:Results/x:TestResultAggregation/x:InnerResults", atomNamespaceManager);

if (newappnode != null)



testResultList(newappnode, atomNamespaceManager);
 
foreach (XmlNode testResults in appNode.SelectNodes(@"x:Results/x:UnitTestResult", atomNamespaceManager))



{

testResult(testResults, atomNamespaceManager);

}

}
 
catch (Exception e)



{
 
Console.WriteLine("Exception Occured While Reading File.\r\nMessage : " + e.Message);



}

}
 
else



{
 
Console.WriteLine("Incorrect File. Please Check.");



}
 
if (xmlTestResults.Count > 0)



{
 
try



{
 
string file = args.Replace(".trx", ".csv");

TextWriter tr = new StreamWriter(file);

tr.WriteLine("ParentTest,Test,Step,Action,ControlType,ControlProperties,Status,Comment,Duration");

foreach (ResultObject resultObject in xmlTestResults)



{
 
string parentTest = "";

string test = "";

if (resultObject.ParentTest != null)



parentTest = tests[xmlTestExecutions[resultObject.ParentTest]].ToString();
 
if (resultObject.Test != null)



test = tests[resultObject.Test].ToString();
 
resultObject.Action = resultObject.Action == null ? "" : resultObject.Action;

resultObject.ControlType = resultObject.ControlType == null ? "" : resultObject.ControlType;

resultObject.ControlProperties = resultObject.ControlProperties == null ? "" : resultObject.ControlProperties;

resultObject.Comment = resultObject.Comment == null ? "" : resultObject.Comment;

tr.WriteLine(parentTest + "," + test + "," + resultObject.Step + "," + resultObject.Action.Replace(",", "_") + "," + resultObject.ControlType.Replace(",", "_") + "," + resultObject.ControlProperties.Replace(",", "_") + "," + resultObject.Status + "," + resultObject.Comment.Replace(",", "_") + "," + resultObject.Duration);



}

tr.Close();
 
Console.WriteLine("File Created Successfully.");

Console.WriteLine(file);



}
 
catch (Exception e)



{
 
Console.WriteLine("Exception Occured While Writing File.\r\nMessage : " + e.Message);



}

}

}
 
/// <summary>

/// gets lists of executions made

/// </summary>

/// <param name="xml">xml node</param>

/// <param name="xmlNamespaceManager">namespaces of xml</param>

private void testExecutionList(XmlNode xml, XmlNamespaceManager xmlNamespaceManager)



{
 
foreach (XmlNode node in xml.SelectNodes(@"x:TestEntry", xmlNamespaceManager))



{
 
string testId = "";

string executionId = "";

foreach (XmlAttribute xmlAttribute in node.Attributes)



{
 
if (xmlAttribute.Name == "testId")



testId = xmlAttribute.Value;
 
if (xmlAttribute.Name == "executionId")



executionId = xmlAttribute.Value;

}

xmlTestExecutions.Add(executionId, testId);
 
foreach (XmlNode childNode in node.SelectNodes(@"x:TestEntries", xmlNamespaceManager))



{

testExecutionList(childNode, xmlNamespaceManager);

}

}

}
 
/// <summary>

/// Gets all the detailed result nodes

/// </summary>

/// <param name="xml">Result Xml node</param>

/// <param name="xmlNamespaceManager">namespaces of xml</param>

private void testResultList(XmlNode xml, XmlNamespaceManager xmlNamespaceManager)



{
 
foreach (XmlNode node in xml.SelectNodes(@"x:UnitTestResult", xmlNamespaceManager))



{

testResult(node, xmlNamespaceManager);

}
 
foreach (XmlNode childNode in xml.SelectNodes(@"x:TestResultAggregation/x:InnerResults", xmlNamespaceManager))



{

testResultList(childNode, xmlNamespaceManager);

}

}
 
/// <summary>

/// Method to read unit test result trace

/// </summary>

/// <param name="xml">debug xml node of trcae file</param>

/// <param name="xmlNamespaceManager">namespaces of xml</param>

private void testResult(XmlNode xml, XmlNamespaceManager xmlNamespaceManager)



{
 
ResultObject resultObject = new ResultObject();

foreach (XmlAttribute xmlAttribute in xml.Attributes)



{
 
if (xmlAttribute.Name == "testId")



resultObject.Test = xmlAttribute.Value;
 
if (xmlAttribute.Name == "parentExecutionId")



resultObject.ParentTest = xmlAttribute.Value;
 
if (xmlAttribute.Name == "outcome")



resultObject.Status = xmlAttribute.Value;
 
if (xmlAttribute.Name == "duration")



resultObject.Duration = xmlAttribute.Value;

}

xmlTestResults.Add(resultObject);
 
int i = 0;

XmlNode testNode = xml.SelectSingleNode(@"x:Output/x:DebugTrace", xmlNamespaceManager);

string testFile = testNode.InnerText;

while (testFile.Contains("a class=") || testFile.Contains("Trace Message Log ("))



{
 
int index_a = testFile.IndexOf("a class=");

int index_Trace = testFile.IndexOf("Trace Message Log (");



index_Trace = index_Trace == -1 ? index_a + 1 : index_Trace;
 
if (testFile.Contains("a class=") && testFile.Contains("Playback - ") && index_a < index_Trace)



{

i++;
 
string row = testFile.Substring(testFile.IndexOf("Playback - "));

ResultObject resultObjectTemp = new ResultObject();



resultObjectTemp.Test = resultObject.Test;

resultObjectTemp.ParentTest = resultObject.ParentTest;

resultObjectTemp.Step = i.ToString();
 
xmlTestResults.Add(control(resultObjectTemp, row.Substring(0, row.IndexOf("/a"))));

if (row.Contains("a class="))

row = row.Substring(row.IndexOf("/a"));



testFile = row;

}
 
else if (testFile.Contains("Trace Message Log ("))



{
 
string message = testFile.Substring(testFile.IndexOf("Trace Message Log (")+19);




 
ResultObject resultObj = new ResultObject();



resultObj.ParentTest = resultObject.ParentTest;

resultObj.Test = resultObject.Test;
 
resultObj.Step = "=>";

resultObj.Action = message.Substring(0, message.IndexOf(")"));



xmlTestResults.Add(resultObj);

testFile = message;

}

}

}
 
private ResultObject control(ResultObject resultObject, string str)



{
 
string text = "";

text = str.Substring(0, str.IndexOf("ControlType='"));

text = text.Substring(text.LastIndexOf("["));

resultObject.ControlType = text + valuebetween(str, "ControlType='", "'");

if (str.Contains("[SUCCESS]"))



{
 
resultObject.Action = valuebetween(str, "[SUCCESS] ", " - \"" + text);

resultObject.Status = "SUCCESS";



}
 
else if (str.Contains("[FAILED]"))



{
 
string failure = valuebetween(str, "[FAILED] ", text);

if (failure.Contains("Search"))



{

resultObject.Comment = failure;
 
resultObject.Action = "Search";



}
 
else

resultObject.Action = failure.Replace(" - \"", "");

resultObject.Status = "FAILED";

//text = "Searching...." + valuebetween(str, "ControlType='", "'") + " '" + IDValue(str) + "'";



}

resultObject.ControlProperties = IDValue(str);
 
return resultObject;



}
 
/// <summary>

/// Returns the properties of control extracted from trace

/// </summary>

/// <param name="str">trace log string</param>

/// <returns>properties seperated by pipes</returns>

private string IDValue(string str)



{
 
string ret = "";

string prop = "";

do



{
 
prop = "";

if (str.Contains(" DisplayText="))



{
 
prop = str.Substring(str.IndexOf(" DisplayText=") + 13);

prop = "DisplayText=" + valuebetween(prop, "'", "'");

str = str.Replace(" DisplayText=", "");



}
 
else if (str.Contains(" FriendlyName="))



{
 
prop = str.Substring(str.IndexOf(" FriendlyName=") + 14);

prop = "FriendlyName=" + valuebetween(prop, "'", "'");

str = str.Replace(" FriendlyName=", "");



}
 
else if (str.Contains(" InnerText="))



{
 
prop = str.Substring(str.IndexOf(" InnerText=") + 11);

prop = "InnerText=" + valuebetween(prop, "'", "'");

str = str.Replace(" InnerText=", "");



}
 
else if (str.Contains(" Id="))



{
 
prop = str.Substring(str.IndexOf(" Id=") + 4);

prop = "Id=" + valuebetween(prop, "'", "'");

str = str.Replace(" Id=", "");



}
 
else if (str.Contains(" TagInstance="))



{
 
prop = str.Substring(str.IndexOf(" TagInstance=") + 13);

prop = "TagInstance=" + valuebetween(prop, "'", "'");

str = str.Replace(" TagInstance=", "");



}
 
else if (str.Contains(" Text="))



{
 
prop = str.Substring(str.IndexOf(" Text=") + 6);

prop = "Text=" + valuebetween(prop, "'", "'");

str = str.Replace(" Text=", "");



}
 
else if (str.Contains(" Value="))



{
 
prop = str.Substring(str.IndexOf(" Value=") + 7);

prop = "Value=" + valuebetween(prop, "'", "'");

str = str.Replace(" Value=", "");



}
 
else if (str.Contains(" ValueAttribute="))



{
 
prop = str.Substring(str.IndexOf(" ValueAttribute=") + 16);

prop = "ValueAttribute=" + valuebetween(prop, "'", "'");

str = str.Replace(" ValueAttribute=", "");



}
 
else if (str.Contains(" Name="))



{
 
prop = str.Substring(str.IndexOf(" Name=") + 6);

prop = "Name=" + valuebetween(prop, "'", "'");

str = str.Replace(" Name=", "");



}
 
else if (str.Contains(" Instance="))



{
 
prop = str.Substring(str.IndexOf(" Instance=") + 10);

prop = "Instance=" + valuebetween(prop, "'", "'");

str = str.Replace(" Instance=", "");



}
 
ret = ret + "|" + prop;

} while (!string.IsNullOrEmpty(prop));

return ret;



}
 
/// <summary>

/// Get string value between to provided strings

/// </summary>

/// <param name="atr">main string</param>

/// <param name="start">start string</param>

/// <param name="end">end string</param>

/// <returns>string value between start and end string</returns>

private string valuebetween(string atr, string start, string end)



{
 
string controltyp = "";

try



{

controltyp = atr.Substring(atr.IndexOf(start) + start.Length);

controltyp = controltyp.Substring(0, controltyp.IndexOf(end));

}
 
catch { }

return controltyp;



}

}

}