在具有多次迭代的CodedUI测试中,仅为最后一次迭代生成UITestActionLog.html文件

时间:2016-03-02 14:02:48

标签: c# visual-studio coded-ui-tests ui-testing

在Visual Studio中执行 CodedUI 的测试时,为什么仅为最后一次迭代生成 uiTestActionlog.html 文件?这可能是由于先前生成的报告被覆盖了吗?

2 个答案:

答案 0 :(得分:1)

我一直在努力解决这个问题。在微软博客上有一些可怜的答案,就像你应该重新安装visual studio来解决这个问题。最后通过以下解决方案设法解决了这个问题。希望它对其他人有所帮助。以下方法不仅为所有迭代生成报告,还帮助我们根据特定时间特定方法的特定日期所有迭代的要求获取文件夹中的日志。

第1步

定义目录或共享位置以及少量变量

namespace CodedUITestProject1
{
    [CodedUITest]
    public class CodedUITest1
    {
       int currentIteration =0;
        public static string ProjectName = Assembly.GetCallingAssembly().GetName().Name;
        public static string sFileName = string.Concat(@"C:\Results\", ProjectName + '\\' + DateTime.Today.ToString("dd_MMM_yyyy"), '\\', DateTime.Now.ToString("ddMMMhhmmtt")+ "_", "Result");
        public static Dictionary<string, string> ResultsKey = new Dictionary<string, string>();
        public CodedUITest1()
        {
            if (!Directory.Exists(sFileName))
            {
                Directory.CreateDirectory(sFileName);
            }
        }
     }
}

第2步

在每个TestMethod中声明Dictionary,如下所示

[TestMethod]

        public void CodedUITestMethod2()
        {
            ResultsKey.Add(MethodInfo.GetCurrentMethod().Name, Directory.GetCurrentDirectory());
         }

第3步

在TestCleanup()中,添加以下代码

[TestCleanup()]
        public void MyTestCleanup()
        {
            Dictionary<string, string>.KeyCollection keyColl = ResultsKey.Keys;
            foreach (KeyValuePair<string, string> kvp in ResultsKey)
            {
                UIMap.ResultsGen(kvp.Value, sFileName, kvp.Key);
            }
            ResultsKey.Clear();
         }

第4步

定义TestCleanup()

中使用的ResultsGen函数
public static void ResultsGen(string SourceFilePath, string DestinationFilePath, string FileName)
        {
            if (FileName != null)
            {
                SourceFilePath = Regex.Split(SourceFilePath, "Out")[0] + "In";
                DirectoryInfo DirInfo = new DirectoryInfo(SourceFilePath);
                string finam = "";
                foreach (var fi in DirInfo.EnumerateFiles("*.html", SearchOption.AllDirectories))
                {
                    finam = finam + fi.Directory + '\\' + fi.Name;
                }
               currentIterationValue = currentIteration + 1;
                File.Copy(finam, DestinationFilePath + '\\' + FileName + "_Iteration"+ currentIterationValue + ".html");
                File.Delete(finam);
            }

答案 1 :(得分:0)

这种情况正在发生,因为每次新的迭代运行时,前一个UITestActionLog文件都会被覆盖。导致仅保留最终副本。

此文件所在的路径 - 项目内的文件夹 TestReuslts

在我的案例中你理解的路径 - d:\项目** ** TestResults \ krakhil \在\ 0eee82c0-3cb9-42fd-96fe-7314ae4b5fd5 \ KRAKHIL-LT \ UITestAction.html

所以,我做的是 - 我在我的CleanUp中添加了一行代码(因为我的每次迭代都在最后通过这个方法。你可以根据自己的需要使用)

string FileSourcePath = (TestContext.TestResultsDirectory + "\\UITestActionLog.html").Replace(@"\\", @"\");
            File.Copy(FileSourcePath, FileSourcePath.Replace("UITestActionLog.html", "UITestActionLog" + ReportFileNo++ + ".html"));

在最后,我将获得所有UITestActionLog * .html,其中*将是迭代否 - 我使用了静态变量。如果你想要你可以写一行来删除UITestActionLog.html - 因为你已经有了一个迭代号的副本。

File.Delete(FileSourcePath); // use this at the end of all iterations only