选拔Visual Studio 二〇一五 开发ASP.NET MVC 5 项目配置到Mono/Jexus

l Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  1. 编写翻译Coded UI Test工程,将扭转的.dll文件复制到钦点的目录下。
  2. 开拓Windows命令行窗口,转到目录c:\Program Files (x86)\Microsoft
    Visual Studio 12.0\Common7\IDE
    只怕直接打开Developer Command Prompt for VS贰零壹贰
  3. 接纳如下命令行执行测试方法

    MSTest /testcontainer:CodedUITestProject2.dll /test:CodedUITest1.CodedUITestMethod1

再也发表到jexus,通过浏览器能够看看洁净的Bootstrap界面了, mono
4.4.2本子近年来对mvc5的包容性非常好了。

  固然你想分发你的测试工程在其余机器上运营,能够编写.bat文件并将Coded
UI
Test工程生成的.dll文件放到同一文件夹下。.bat文件的内容看起来像上边那样:

vs二〇一四新建三个asp.net的花色(目的框架是.net4.5),选拔mvc,并且更改身份验证为不适用身份验证。

  Coded UI
Test会试图透过装有已知的标准化来搜寻钦点的控件,它接纳广度优先查找方法(Breadth-First)。全体SearchProperties能够被视为使用AND条件举办检索,假如经过SearhProperties找到二个或未找到对应的控件,则拥有的FilterProperties条件不会被利用。如若通过全部的SearchProperties条件找到多个照应的控件,则尝试每种利用给出的FilterProperties条件进行按序匹配(Ordered
match),直到找到匹配的控件。假设因此以上给出的全体标准最后找到多余3个的匹配项,则第三个十三分的要素即为找到的控件。

图片 1

 

Could not find file “/var/www/mvcdemo/bin\roslyn\csc.exe”.
这一行告诉了作者们找不到roslyn 的c# 编写翻译器, 当前版本的Mono
的编写翻译器如故Mono的mcs编写翻译器,并从未做到到roslyn
这么些编写翻译器的升级换代工作,那么些工作正在展开进度中,在不远的后天就足以统一选择roslyn。

  msdn.aspx)上有对MSTest.exe命令行全数参数的求证。有几点须要表明一(Wissu)下:

缓解那几个题材的法子正是用Mono的mcs编写翻译器,项目上右键管理NuGet程序包,打开管理器,按梯次卸载以下五个零件:

  .uitest文件针对的是每3个测试页面,种种页面都有独立的认证办法用来测试页面上各种区别的某个,具有得天独厚结构的代码能够使任何测试工程看起来思路清楚。若是有必不可少,你一点一滴能够运用设计格局来越发简便易行地协会工程中的测试方法和类。三个总体的测试工程代码结构看起来像那样:

图片 2

  不过,Assert断言总会在测试战败的时候抛出十三分,从而终止程序运维。如上边包车型地铁测试方法,如若前多少个断言中有其它二个输球以来,则剩下的断言不会被实施。

在jexus中,只要求把 /usr/jexus/jws这几个本子文件中的 “export
MONO_IOMAP=…”这一句前面包车型客车“#”去掉,就能够不区分轻重缓急写了。

  UI Action的录制和UI控件的挑选操作是分离的。让大家先初叶UI
Action的录像。

图片 3

  工程暗许生成CodedUITest1.cs文书。在起来摄像UI操作此前,对基本概念做一下介绍:

l Microsoft.Net.Compilers

图片 4

别的的包容性难题皆以Windows/Linux的差距,比如大小写和路径难点等,例如从Nuget上下载下来的System.Web.Webpages.dll
多少个相关的dll 中间的pages
那些p是小写的,须求变成大写。Bootstrap等多少个前端框架之中也有部分不区分轻重缓急写的,有局部体制不只怕出示,笔者把Jexus的不区分轻重缓急写打开就好了。

HtmlEdit  mUIEmailEdit = new HtmlEdit(someAncestorControl); 
mUIEmailEdit.SearchProperties[HtmlEdit.PropertyNames.Id] = "email"; 
mUIEmailEdit.SearchProperties[HtmlEdit.PropertyNames.Name] = "email"; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.LabeledBy] = null; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE"; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.Title] = null; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.Class] = null; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.ControlDefinition] = "id=email size=25 name=email"; 
mUIEmailEdit.FilterProperties[HtmlEdit.PropertyNames.TagInstance] = "7";

mUIEmailEdit.Find();

最新的Mono 4.4早就帮衬运行asp.net
mvc5项目,有的同学听了那句话就得意扬扬的拿起Visual Studio
2016开立了二个mvc
5的品种,然后布置到Mono上,浏览下发现一堆错误出现,心中两千0只草泥马奔腾而来,那也叫帮助呢,那一个题材是Visual
Studio造成的,不相信的话能够选拔Xamarin.Studio创立的asp.net项目,布署过程格外顺遂,没有遭遇什么难点;本文正是为你解开这些结,怎么着Visual
Studio 二零一六消除ASP.NET MVC 5项目标跨平台开发。

  AssertWrapper类中的方法能够有七个重载,以满足不一致的须求,其主干思维正是采纳try-catch语句来收获Assert断言所抛出的足够。TestLog类中的方法负责写测试报告,你能够将测试报告定义成任何款式。然后定义3个TestSettings类用来搜集测试工程中装有的测试断言。

编写翻译,并发表到jexus,访问之。报出的错误音信如下图。

[TestMethod]
public void IncomeStatementsTest()
{
    testrunner.NavigateToTestPage();
    testrunner.ValidateSomething();
}

[TestInitialize()]
public void MyTestInitialize()
{
    testrunner = new TestRunner();
    testrunner.LaunchHomePage();
}

////Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyTestCleanup()
{
    testrunner = null;
}

private TestRunner testrunner;

图片 5

如何使用命令行格局运营测试方法?

[root@TENCENT64 /usr/jexus]# vi jws

namespace CodedUITestProject2.UIMap1Classes
{
    using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls;
    using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
    using System;
    using System.Collections.Generic;
    using System.CodeDom.Compiler;
    using Microsoft.VisualStudio.TestTools.UITest.Extension;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
    using Mouse = Microsoft.VisualStudio.TestTools.UITesting.Mouse;
    using MouseButtons = System.Windows.Forms.MouseButtons;
    using System.Drawing;
    using System.Windows.Input;
    using System.Text.RegularExpressions;


    public partial class UIMap1
    {
        public void TestSearchResult()
        {
            HtmlDiv resultPanel = this.UINewtabInternetExplorWindow.UIJaxucnblogs_SearchDocument.UIContent_leftPane;
            HtmlDiv resultPanelFirst = (HtmlDiv)resultPanel.GetChildren()[0];
            HtmlHyperlink link = new HtmlHyperlink(resultPanelFirst);
            Assert.AreEqual("Jaxu - 博客园", link.InnerText, "Validation is failed.");
        }

        /// <summary>
        /// RecordedMethod1 - Use 'RecordedMethod1Params' to pass parameters into this method.
        /// </summary>
        public void RecordedMethod1()
        {
            #region Variable Declarations
            WinEdit uIItemEdit = this.UINewtabInternetExplorWindow.UIItemWindow.UIItemEdit;
            HtmlEdit uIWDEdit = this.UINewtabInternetExplorWindow.UIDocument.UIWDEdit;
            HtmlInputButton uISearchButton = this.UINewtabInternetExplorWindow.UIDocument.UISearchButton;
            #endregion

            // Go to web page 'about:Tabs' using new browser instance
            this.UINewtabInternetExplorWindow.LaunchUrl(new Uri("http://www.baidu.com"));

            // Type 'www.baidu{Enter}' in text box
            //Keyboard.SendKeys(uIItemEdit, this.RecordedMethod1Params.UIItemEditSendKeys, ModifierKeys.None);

            // Type 'jaxu cnblogs' in 'wd' text box
            uIWDEdit.Text = this.RecordedMethod1Params.UIWDEditText;

            // Click '百度一下' button
            Mouse.Click(uISearchButton, new Point(61, 18));
        }

        public virtual RecordedMethod1Params RecordedMethod1Params
        {
            get
            {
                if ((this.mRecordedMethod1Params == null))
                {
                    this.mRecordedMethod1Params = new RecordedMethod1Params();
                }
                return this.mRecordedMethod1Params;
            }
        }

        private RecordedMethod1Params mRecordedMethod1Params;
    }
    /// <summary>
    /// Parameters to be passed into 'RecordedMethod1'
    /// </summary>
    [GeneratedCode("Coded UITest Builder", "12.0.21005.1")]
    public class RecordedMethod1Params
    {

        #region Fields
        /// <summary>
        /// Go to web page 'about:Tabs' using new browser instance
        /// </summary>
        public string UINewtabInternetExplorWindowUrl = "about:Tabs";

        /// <summary>
        /// Type 'www.baidu{Enter}' in text box
        /// </summary>
        public string UIItemEditSendKeys = "www.baidu{Enter}";

        /// <summary>
        /// Type 'jaxu cnblogs' in 'wd' text box
        /// </summary>
        public string UIWDEditText = "jaxu cnblogs";
        #endregion
    }
}
  • Record icon – 开首三个UI操作的摄像。例如菜单导航、按钮点击等操作。
  • 艾德it steps – 对录像的步骤实行编写制定,调整恐怕去除冗余的步骤。
  • Add assertions –
    不仅仅是添加断言,通过点击该按钮并拖放到测试对象的UI上以挑选控件,然后您能够添加断言。
  • Generate code –
    这一步很重庆大学,在形成以上全部的操作后,通过点击该按钮Visual
    Studio会自动为您转移代码。生成的代码在.uitest文件上边包车型大巴.Desinger.cs文件中能够看出。在意不要手动修改自动生成的代码,那会造成下次因此Coded
    UI Test Builder窗口对.uitest文件举行修改时或多或少对象或操作不联合。
  • Close to finish recoding – 在闭馆Coded UI Test
    Builder窗口在此之前,确定保障所做的改动已经变更了对应的代码。要是要修改.Designer.cs文件中自动生成的代码,能够在Solution
    Explorer中右键选用.uitest文件,然后选择艾德it With Coded UI Test
    Builder。在末端的步骤中大家会讲到那或多或少。

  使用TestRunner类将工程中拥有的求证办法和UI
Actions方法开展打包,然后在测试方法中开始展览调用。

图片 6

  完毕修改现在再行点击Generate code按钮并关闭Coded UI Test
Builder窗口,此时.Designer.cs文件中自动生成的代码已经做了修改。由于前边我们已经将相关的UI
Actions部分的代码移到.cs文件里了,所以重命名的对象大家还供给在.cs文件中手动进行改动,不然编写翻译时会出错。提议在将代码移到.cs文件在此以前形成自动生成代码的改动工作,以幸免手动修改过多的代码。

  在Solution
Explorer中进行UIMap1.uitest文件,选用并打开UIMap1.Designer.cs文书,能够看来刚才所生成的代码。是否很想今日就运维一下,来探望那么些自动生成的代码怎么着运作?未来还百般,因为唯有的UI
Action运转没有其余意义,Coded UI
Test的真正意义是因此UI操作来定位到UI上的某四个一定元素,并最终通过断言来规定该因素的属性是或不是和预期的值万分。

图片 7

  另一种自笔者听见过的缓解方法是应用参数化测试,然则据笔者所知,Coded UI
Test中接近并不协理。在其余测试环境中大概有更好的消除办法。

图片 8

<configuration>
  <appSettings>
    <add key ="" value=""/>
  </appSettings>
</configuration>
  1. 对Web controls进行搜寻:SearchProperties和FilterProperties均支持
  2. 对WinForms和WPF controls进行查找:仅SearchProperties支持
if (faillist != null && faillist.Count > 0)
{
    StringBuilder fail = new StringBuilder();
    foreach (string s in faillist)
    {
        fail.AppendLine(s);
    }
    Assert.Fail(fail.ToString());
}

图片 9

  在Coded UI
Test中,最广大的难题是怎么着找到被测试的控件。唯有找到被测试的对象,才能接纳断言来判定当中的性质是或不是满足预期的值。超越二分一场地下,我们都会利用Coded
UI Test
Builder窗口来捕获UI上的控件,但多少情形下大家只可以自行检索须要的控件。多个简便的例证,在列表控件中哪些寻找第2个子成分中所包蕴的文书。就好像本文一起初交付的测试须求。如若你通过Coded
UI Test
Builder直接搜索第二个子元素,个中变化的搜寻条件往往拥有特定性,当页面的规格产生变化,特定的追寻条件不自然能找到呼应的控件。

  下边是一个例证,能够用来有效地缓解地点建议的题材。

 

  有几许内需专注:

public static class AssertWrapper
{
    public static string AreEqual<T>(T expected, T actual, string message)
    {
        string result = null;
        try
        {
            Assert.AreEqual(expected, actual, message);
            TestLog.WritePass(message);
        }
        catch (AssertFailedException ex)
        {
            result = ex.Message;
            TestLog.WriteError(message);
        }
        catch (Exception ex)
        {
            result = ex.Message;
            TestLog.WriteError(message);
        }
        return result;
    }

    public static string AreEqual(string expected, string actual, string message)
    {
        string result = null;
        try
        {
            Assert.AreEqual(expected, actual, message);
            TestLog.WritePass(message);

        }
        catch (AssertFailedException ex)
        {
            result = ex.Message;
            TestLog.WriteError(result);
        }
        catch (Exception ex)
        {
            result = ex.Message;
            TestLog.WriteError(result);
        }
        return result;
    }

    public static string AreEqual(string expected, string actual, bool ignorecase, string message)
    {
        string result = null;
        try
        {
            Assert.AreEqual(expected, actual, ignorecase, message);
            TestLog.WritePass(message);

        }
        catch (AssertFailedException ex)
        {
            result = ex.Message;
            TestLog.WriteError(result);
        }
        catch (Exception ex)
        {
            result = ex.Message;
            TestLog.WriteError(result);
        }
        return result;
    }

    public static string Fail(string message)
    {
        string result = null;
        try
        {
            Assert.Fail(message);
        }
        catch (AssertFailedException ex)
        {
            result = ex.Message;
            TestLog.WriteError(result);
        }
        return result;
    }
}

  在自动化测试中,Assert断言一旦遇见测试失利的情状就会抛出卓殊,从而导致接下去的测试方法或职分不会继续执行。也正是说,若是3个测试工程中蕴藏了重重测试方法,日常的事态是三个测试工程中会包涵很八个测试类,种种类针对不一致的测试用例,而各种测试类中又富含了诸四个例外的测试方法。面对诸如此类高大的二个测试工程,平时会花上数十分钟甚至数小时才能将预订好的富有测试方法跑完,大家本来不指望观望由于某四个测试方法失利而致使剩下的持有测试方法均无法博得执行。在自动化测试中,测试方法测试失败的景色是很广阔的,成功或破产都以一种结果,这总比程序运转到八分之四抛出十一分要好得多。

基本操作

@echo off

@set PATH=c:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE;%PATH%

echo ****** This program will start a Coded UI Test Method ******
pause

MSTest /testcontainer:CodedUITest1.dll /test:CodedUITest1.CodedUITestMethod1

echo ****** End Coded UI Test Method ********


pause

  大概可以行使try-catch语句来收获Assert断言所抛出的那些,使程序能够一而再运营下去。然后我们将装有截获到的不行音讯输出到自定义的文件中,即自定义测试报告!测试报告能够是私行档次的文档,记事本或HTML相比常用。既然能够采用try-catch来收获Assert断言的越发心花怒放,那么我们会很自然地想到利用下边包车型地铁主意:

  • 确定保证程序能够不荒谬运营
  • 对每四个测试方法而言,个中会蕴藏八个注脚办法,而每一个证实办法中又会含有有五个Assert断言,使用上述方法能够使得管理全数的预感。
  • 自定义测试报告的格式
  • 能够定义测试方法是通过或然战败。战败的测试方法通过Assert.Fail()方法来抛出越发,要是二个测试方法中没有极度抛出,则会被暗中认可为测试成功,尽管事实上测试是退步的。
  1. 搜索会从someAncestorControl控件初阶,因为它被用作要寻找控件的先世。注意祖先并不一定是父节点,它可以是被寻找控件的私下上级控件。
  2. 每一遍遍历搜索时,会选取全数已定义的SearchProperties条件进行筛选,假诺有八个控件均满意搜索条件,如X1,X2和X3,此时会继续行使剩下的FilterProperties条件举行筛选。
  3. 对控件X1,X2和X3分别使用已定义的FilterProperties条件进行筛选,直到匹配到唯一的控件,也许有所的FilterProperties条件均相比实现。

  然后,在具有的测试方法中添加上边包车型地铁代码(faillist为泛型List对象,被定义为TestMethod所在的类的私家变量,同时大家经过faillist.AddRange(testPage.faillist)语句将测试页面类中的泛型List内容添加过来):

  查看.Designer.cs文件中自动生成的代码,全数控件的概念都会蕴藏类似于上面代码的搜寻条件:

  然后大家须要捕捉到百度搜索结果的UI控件,并对中间的结果开始展览判定。照旧采用Coded
UI Test Builder窗口。

  忘记说美赞臣(Meadjohnson)些,带有[CodedUITest]特征属性的类中,大家得以借用MyTestInitialize()方法和MyTestCleanup()方法进行一些开端化操作和清理工作。不要在此类的构造函数中拉长其余代码,通过带有[TestInitialize]特征属性的点子举行起头化学工业作。同样,带有[TestCleanup]特征属性的措施能够用来实行一些清理工科作。

 

  Coded UI
Test包括了非凡加上的API库,它能够摄像和重放UI操作,捕捉UI成分并收获属性的值,并转移操作代码。测试职员在转移代码的基础上对测试指标的值进行逻辑判断并提交测试结果。创立一个Coded
UI Test很不难,大部分场合下,我们只要求借助Visual
Studio就足以做到绝大多数操作。为了说澳优切操作进程,大家假使多个测试供给:

图片 10

  壹个立竿见影的消除办法是将每三个预见分别放到分化的测试方法中,如上边包车型客车代码:

  然后,大家早先2个UI录像。在工程中添加二个Coded UI Test
Map文件。创制成功后Visual Studio会自动在显示屏的右下角打开Coded UI Test
Builder窗口,以有益大家开始展览UI录像操作。

  可是在大部气象下那大概不算。例如你供给测试两个涵盖100行的table,对每一行的title列举办text测试,在那种气象下你根本不可能为每三个预感编写区别的测试方法。首先你不可能鲜明测试方法的数码,其次过多的测试方法会增加入保证障资金。

  在地点给出的例子中,会遵照如下顺遂实行搜索:

public List<string> faillist;

public void ValidateHeader()
{
    TestSettings.AddResult(faillist,AssertWrapper.AreEqual(true, uIHeader.Exists, "test page: Validate Page header text"));
}

  (本文演示的享有代码和操作均在Visual Sutdio 二〇一一和Windows 8.1 + IE
11条件下)

Coded UI Test如何搜索贰个控件?

图片 11

[TestMethod]
public void CheckVariousSumResults()
{
    MultiAssert.Aggregate(
        () => Assert.AreEqual(3, this.Sum(1001, 1, 2)), 
        () => Assert.AreEqual(3, this.Sum(1, 1001, 2)), 
        () => Assert.AreEqual(3, this.Sum(1, 2, 1001)));
}

public static class MultiAssert
{
    public static void Aggregate(params Action[] actions)
    {
        var exceptions = new List<AssertFailedException>();

        foreach (var action in actions)
        {
            try
            {
                action();
            }
            catch (AssertFailedException ex)
            {
                exceptions.Add(ex);
            }
        }

        var assertionTexts = 
            exceptions.Select(assertFailedException => assertFailedException.Message);
        if (0 != assertionTexts.Count())
        {
            throw new
                AssertFailedException(
                assertionTexts.Aggregate(
                    (aggregatedMessage, next) => aggregatedMessage + Environment.NewLine + next));
        }
    }
}

  在Visual Studio中初叶创办一个Coded UI Test Project。那相当粗略!

  工程创造成功后,Visual
Studio会问您是当下起先二个新的UI摄像还是选拔已经摄像好的操作。当然你也足以接纳废除,在前边的步骤里再起先UI摄像。

  1. 开拓浏览器并导航到百度,输加入关贸总协定组织键字“jaxu cnblogs”并点击“百度时而”
  2. 在Coded UI Test Builder窗口中式点心击Add
    assertions按钮并拖放到浏览器窗口,同时指向你想要捕捉的控件上。有些控件很难精确捕捉到,没有提到,你能够先选中接近的控件,然后使用Coded
    UI Test
    Builder窗口中的方向按钮移动到您所要定位的要素。如下图,大家选取并一定到了百度查寻结果的DIV成分,并将该控件命名为UIContent_leftPane。
  3. 在Coded UI Test
    Builder窗口的左上角点击添加选用的控件,那点很要紧!忘记这一步则所挑选的控件不会被添加到生成的代码中。
  4. 变迁代码并关闭Coded UI Test Builder窗口。
[TestMethod]
public void CheckVariousSumResults()
{
    Assert.AreEqual(3, this.Sum(1001, 1, 2));
    Assert.AreEqual(3, this.Sum(1, 1001, 2));
    Assert.AreEqual(3, this.Sum(1, 2, 1001));
}

  其余,和半数以上工程同样,Coded UI
Test工程允许行使App.config文件。在工程中添加该公文并插足<appSettings></appSettings>节点以设置配置信息。

public class TestSettings
{
    public static void AddResult(List<string> resultList, string result)
    {
        if (result != null)
        {
            if (resultList == null)
            {
                resultList = new List<string>();
            }
            resultList.Add(result);
        }
    }
}

  现在能够通过Test
Explorer窗口也许直接利用测试方法的上下文菜单运转或调节和测试该测试方法。借使由此测试,测试方法前面会议及展览示紫酱色的图标,不然会呈现浅灰的叉。Visual
Studio会为每一趟测试生成对应的测试报告,在工程目录下的TestResults文件夹中得以找到全体的测试报告。

  除了在Visual
Studio中运作测试方法外,大家仍是可以透过别的众多情势来运作测试方法。使用测试代理和测试控制器能够对持有的测试方法进行实用管理,并得以将测试方法分发到不一致的测试机上单独实行测试,但须要在服务器上实行计划,MSDN上有相应的介绍,那里主要介绍怎么样通过命令行格局来运营测试方法。

  上边包车型地铁代码能够很管用地消除难点,但仍会设很是。MultiAssert.Aggreate()方法中过多的断言最后会将全部的分外新闻抛出,这会大大降低格外音讯的可读性,不太便宜我们从测试测试报告中分析失误的原由。要通晓,测试方法末了的指标不是要让测试程序启动通过,而是通过测试报告来分析被测试指标可能有所的题材。

  • /testcontainer中有必不可少钦定.dll文件的不二法门名称
  • /test用来钦赐.dll文件中所包涵的测试方法的全名称。注意这里的真名称包罗了测试方法所在的类名以及艺术名,类必须包罗[CodedUITest]天性属性,测试方法必须带有[TestMethod]特点属性。
HtmlTable uITable = this.UIRelWindow.UIRelDocument.UITable;
HtmlRow rowall = new HtmlRow(uITable);

UITestControlCollection rows = rowall.FindMatchingControls();

int rowCount = rows.Count;

for (int i = 0; i < rowCount; i++)
{
    HtmlHeaderCell allTH = new HtmlHeaderCell(rows[i]);
    HtmlCell allTD = new HtmlCell(rows[i]);
    UITestControlCollection THs = allTH.FindMatchingControls();
    UITestControlCollection TDs = allTD.FindMatchingControls();

    ... ...
}
  1. 点击Coded UI Test Builder窗口中的暗紫按钮
  2. 开拓IE浏览器,在地方栏中输入http://www.baidu.com以导航到百度搜索引擎
  3. 输加入关贸总协定协会键字“jaxu cnblogs”,点击“百度时而”
  4. 在Coded UI Test Builder窗口中式点心击Pause,然后点击艾德it
    steps,删除不要求的手续。小编删除了操作中的第五步和第⑥步。
  5. 挑选Generate code,对所要生成的章程取个名字,然后点击Add and
    Generate按钮。Visual
    Studio为大家所视频的UI操作步骤生成了相应的代码。
  6. 闭馆Coded UI Test Builder窗口,在Visual Studio中查阅刚才生成的代码。

图片 12

  借用MSDN上的图样来对Coded UI Test
Builder窗口上按钮的功能做一下简短的验证:

  你可能曾经注意到了,自动生成的代码中稍微对象的名字看起来并不那么好,甚至有个别还含有了国文。你希望修改它们,但是毫无在.Designer.cs文件中做别的改动!还记得后面我们讲过的艾德it
With Coded UI Test操作吗?在Solution
Explorer中右键选用UIMap1.uitest文件,右键采用艾德it With Coded UI
Test打开Coded UI Test Builder窗口,然后点击Add
assertions按钮(就是不行用来挑选UI Control的按钮),然后开始展览UI Control
Map界面。如下图,我们得以对当中变化的UI Controls进行编制和重命名。

public class TestRunner
{
    public TestRunner()
    {
        homePage = new UI.HomePageClasses.HomePage();
    }


    #region Home page actions and validate method

    private UI.HomePageClasses.HomePage homePage;
    public UI.PageClasses.HomePage HomePage
    {
        get
        {
            if ((this.homePage == null))
            {
                this.homePage = new UI.PageClasses.HomePage();
            }
            return this.homePage;
        }
        set
        {
            homePage = value;
        }
    }

    public void LaunchHomePage()
    {
        HomePage.LaunchHomePage(new System.Uri(TestSettings.GetCurrentSiteURL()));
    }
    public void ValidateHomePageText()
    {
        HomePage.ValidateHomePageText();
    }
}

代码结构调整

 

 

  大部分代码是由Coded UI Test
Builder自动生成的,大家只编写了TestSearchResult()方法,用来搜寻控件并得到到当中的值来展开判定。测试结果的判断通过Assert断言来完毕,Assert提供了多样办法以援助大家落到实处不一样的论断,具体的始末能够参见msdn。然后对RecordedMethod1()方法做了适合修改。TestSearchResult()方法中对此怎么着寻找和遍历UI控件在稍后的章节中会研商到。然后大家将有所代码的调用放到CodedUITest1.cs文件中实施。

  下边包车型客车流程图表达了这一历程:

有关Assert断言

图片 13

图片 14

  在Web
controls中,搜索条件的运用或然会涉嫌到浏览器包容性难点。如筛选标准最后必要经过InnerText来分明控件,而该属性在少数浏览器上并不帮衬,此时可能引发那贰个。在程序编码进程中品尝给一定的控件钦赐ID属性能够更好的消除这一标题,那就须要与程序开发人士举办实用的维系。从这一点也足以看来,测试驱动开发的要害。

  为了能够手动修改.Designder.cs文件中变化的代码,我们需求将它们移到.cs文件中。在Solution
Explorer中双击UIMap1.uitest文件,在开辟的窗口中我们得以观察左侧是UI
Actions所生成的步骤,左侧是UI Control
Map(稍后大家会用到它)。在左侧的UI
Actions中选取根节点RecordedMethod1,然后在顶部的菜单中选取Move code to
UIMap1.cs,代码会被移到.cs文件以方便大家开展修改。落成该手续之后,大家得以在.cs文件中来看那些代码并做相应的改动。

  在每三个.uitest文件的类中,那样使用方面包车型地铁措施:

  1. Coded UI
    Test工程的运营是从包涵有[CodedUITest]特性属性的类开始的。二个工程中可以有八个这么的类。
  2. 与普通的工程不一致,大家不可能通过F5或许点击Visual
    Studio中的运转按钮来调节或直接运行工程,Coded UI
    Test工程必须透过Test
    Explorer或然在蕴藏有[CodedUITest]性情属性的类中来摘取运转相应的测试方法。
  3. 在带有[CodedUITest]特点属性的类中,全数的测试方法都必须含有[TestMethod]特点属性,以代表它是一个灵光的测试方法,能够直接运转。
  4. 透过选取TEST->Windows->Test Explorer可以打开Test
    Explorer窗口,在Test
    Explorer窗口中能够查阅工程中享有的测试方法并选取运维。当然,你也得以在含有[TestMethod]特点属性的测试方法的代码块中右键采纳运行该测试方法。
  5. 测试方法同样能够调剂。在选拔运营测试方法时,你会看到有Debug
    Test的菜系,调节和测试的长河和在普通工程中相同。

  至此,全数的UI Actions和UI
Controls都曾经定义完成,接下去我们要编码以成就对寻找结果的论断。借助于自动生成的代码,大家编辑了上面包车型大巴测试方法以达成小说最早先的测试须要。

  那样,能够对该测试方法中包涵的享有Assert断言举行统一保管。那样做有多少个便宜:

在浏览器中打开百度搜索,输入“jaxu cnblogs”关键字,搜索并查看结果的第一条是否为“Jaxu - 博客园”

  不要尝试通过GetChildren()方法来遍历全部的控件,因为该措施再次来到结果会极慢,尤其是当页面中存在大量控件时。能够动用临近的祖先节点对该控件进行定义(构造函数的参数能够用来钦命被寻找控件的先世),然后经过给定SearchProperties或FilterProperties来对控件实行筛选,然后利用FindMatchingControls()方法来明确要物色的控件。如上边包车型客车代码用来遍历Table成分从而找到表中全数的<th/>和<td/>:

[TestMethod]
public void CodedUITestMethod1()
{
    UIMap1 uimap = new UIMap1();
    uimap.RecordedMethod1();

    uimap.TestSearchResult();
}

 

图片 15

[TestMethod]
public void Sum_1001AsFirstParam_Returns3()
{
    Assert.AreEqual(3, this.Sum(1001, 1, 2));
}
[TestMethod]
public void Sum_1001AsMiddleParam_Returns3()
{
    Assert.AreEqual(3, this.Sum(1, 1001, 2));
}
[TestMethod]
public void Sum_1001AsThirdParam_Returns3()
{
    Assert.AreEqual(3, this.Sum(1, 2, 1001));
}

  在Visual Studio中,Coded UI
Test已经不是什么样新性情了,较早版本的Visual
Studio中就已经有其一东东了。它首要用来救助自动化测试工程师和开发职员确定保障程序在UI方面从未其它难点。那在那之中含有了增加的内容。在那前边,笔者一向对自动化测试的做事以及哪些是自动化测试管窥蠡测,具备自动化测试编码能力的工程师所主宰的技能在某种程度上要远超程序开发人士和设计职员,对于那或多或少,作者早有听别人说!但结束亲身体验自身才确信,测试工作远没有大家想像得那么粗略。开发人士或者花上数小时就能够形成项目中某2个单独模块并使其在早晚限制内符合规律运营,但是,自动化测试工程师也许会花上或多或少天的岁月来编排对应的自动化测试代码来担保这一功能运转如常。

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注