最近这段时间一直很忙, 上次关于Jacklin提出WindowsPhone 7访问本地DataBase在XAP包无法操作问题. 我正在WP7上测试利用开源数据库DB4O和SiaqoDB方式来解决这个问题.关于这篇验证文章晚些时候会把验证的相关原理,代码以及验证中发现的问题整理出一篇文章 发出来.

本篇来说说关于Silverlight测试——利用Ranorex工具实现TestDataDriver[TDD-数据驱动测试俗称黑盒测试].

<1>Silverlight目前测试现状

Silverlight 在从1.1版本过渡出来后到Silverlight 2 可以在很多方面做了极大的改善. 特别是整个Silverlight框架搭建已经日趋完整面向多种变化需求. 相对以前SL版本微软第一次加入了单元测试框架.[Silverlight Unit TestFrameWork]. 直到今天再次历经 2个版本[Silverlighti 3/4]的更新和维护, 针对Silverlight Application Unit Test.在第四个版本已经能够轻松做到Unit Test.

谈到测试 对于开发人员. 应该了解和我们日常编程息息相关的测试: Unit Test[单元测试] 和 DataDriver Test[TDD] TDD是敏捷的实现方式XP[极限编程]的重要组成部分, 目前Visual Studio中对Unit Test支持.下图显示了Visual Studio 2010中提供的帮助测试客户的各种解决方案:

在Mix10大会中微软发布了Silverlight 4版本. 但是关注测试这块依然是一个让广大DVp开发者头大的问题. 微软4月份更新的工具包Arp版本就已经包含了Unit Test测试框架.运行在VS2010中,但是目前这个Test unit FrameWork框框架不能VisualStudio功能相集成.Team Foundation Server的2010与Silverlight单元测试整合也存在相关问题.  因为在测试这块发现足多很多不实际问题. 微软也是感到有些气短 在一次发言专门提到": 如下原文:

The recommended way for developers to run tests of their Silverlight applications is by building and running the test application. Visual Studio has a separate set of integrated test tools that are not connected to the Silverlight Unit Test Framework, which is the same for all previous releases of the Silverlight testing work.

翻译如下:

“ 对于开发者在他们Silverlight应用程序运行测试我们推荐的方式是建立和运行一个Test应用程序. Visual Studio 在综合测试工具中没有集成连接到Silverlight的单元测试框架,这是 对Silverlight测试框架的前期版本.”

Silverlight单元测试框架四月版本采用了增强的用户界面,微软正在努力使测试Silverlight应用程序更加容易使用. 更多的相关信息请参考微软Silverlight高级工程师Jeff Wilcox 提供的overview of the Silverlight Unit Test Framework in an April blog. 虽然在Silverlight的单元测试有一些相关整合问题.当我们完成一个Silverlight Application时基本的期望是在我们功能性没有相关Bug 那我们需要在实现相关功能 并编写不同模块函数的Unit Test方法后来用专业的测试人员编写相关的测试案例,这就涉及到在Silverlight进行TDD.

<2>准备工作

<2.1>了解TDD测试

TDD缩写是Test Driver Development 是XP编程中一个非常重要组成部分.

严格意义来说真正和程序员编码有限测试应该UnitTEst 单元测试. 程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试.  最终交互时 我们不仅要交互功能代码 还要交付这些相关功能代码的Unit Test.

Unit TEst面对的对象是程序员. 这样一来程序员就知道测试对象某一个实现Function函数中功能结构特点. 来进行编写用例. 就是所谓的白盒测试.白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性

而TDD的特点针对的对象是和代码业务无法的测试人员. 当我们把一个Silverlight Application交给测试MM时 她对软件中涉及的功能结构是未知的, 这时测试案例好坏我觉得不仅用的合适测试方法 而且和个人的经验又有极大关系. 在程序接口录入信息.根据定义测试规格输出相关信息. 而其中程序操作规则是已经制定好的. 其实这就是黑盒测试.黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

<2.2>关于Ranorex工具

本篇中对Silverlight测试工具选择采用的是Ranorex,目前对于有些老牌的测试工具只支持GUI元素的.而对于Web页面承载的Silverlight 的UI元素不识别. 而Ranoex则支持WinFrom/Flash/Flex/WPF/IE FF Web2.0/Silverlight。另外一个特点时Ranorex小巧 测试脚本完全支持C# VB.NET、Python多种语言.对。NEtFramework 版本支持已经到 4.0. 这为我们程序员编写Automatic Test Scirpt提供很大的方便.关于本工具信息:

Ranorex Web Site:-[官方站点]

Ranorex UserGuid Sample[用户指导案例 很详细关于测试各个方面 建议参考]

Rannorex Download Link [下载连接-Version:2.3.4-30天试用版]

Ranorex Genyen Key Tool[30天试用版破解工具下载]

当然在找到Ranorex工具前 我还有幸试用一个测试霸王版的TestComplete,确实一个测试工具霸王版本:

看到这个TestComplete简介我就想起打包工具中installshield霸王大哥一般. 面对两个篇幅的配置信息 我基本就已经 提前到下.来看一下TestComplete霸王特点:

TestComplete是一个自动测试管理工具,完全支持项目层级(project level)的单元测试、功能测试、回归测试(regression testing)、分布式测试以及HTTP性能测试。它是专门为应用程序开发人员和测试人员设计的。从开发代码、发布到维护的整个过程 .

对于Silverlight测试已经覆盖了目前的所有版本 以及。NetFrameWork支持也覆盖所有版本.

天啊.TestComplete是一个霸王测试工具不是没有道理 不费上一天两天的功夫去了解短时间内你是玩转不起来的. 所以我因为这个特点就抛弃了霸王的TestComplete 转而投向Ranorex小巧温柔的怀抱/

更多关于TEStComplate Web Site[官方站点]

<3>利用Ranorex实现Silverlight程序TDD测试

<3.1>新建一个C# Automation Solution

对工具Ranorex安装完成后 你可以采用破解工具进行破解. 完成后启动Ranorex.进入主界面:

这块工具基本和VisualStudio基本类似.对于.NEt程序员来说运用并不难. 在左上角点击“File”——>”NEW”——>”Soluction”:从打开页面可以看出Ranorex工具支持C# VB.NET、Python三种语言编写脚本同时还支持WorkFlow工作流. 选择C#节点 并选中 C# For Automatic项目:

创建一个Ranorex C# Test Automatic项目命名为:SLAutomaticDemo:窗体分布

创建一个C# Automatic项目后 看一下项目结构:

Program.CS文件是C#语言编写的测试脚本文件.也是整个项目的入口处Main方法所在类. 另外一个很重要的文件Recording1文件则记录录制SL界面操作元素事件并自动转换成可操作的C#代码. 从Program.CS文件Main方法可以看出. 主程序就是调用Recording1文件中的Recording1类Start方法来实现脚本的自动化执行的.Program.cs 代码:

 1:  public static int Main(string[] args)
 2:  {
 3:  Keyboard.AbortKey = System.Windows.Forms.Keys.Pause;
 4:  int error = 0;
 6:  string logFileName = "Test.rxlog";
 8:  Report.Setup(ReportLevel.Info, logFileName, true);
 10:  try
 11:  {
 12:  //调用Recording1文件中REcording类Start()执行对脚本的调用.很简单.
 13:  Recording1.Start();
 14:  }
 15:  catch (ImageNotFoundException e)
 16:  {
 17:  Report.Error(e.ToString());
 18:  Report.LogData(ReportLevel.Error, "Image not found", e.Feature);
 19:  Report.LogData(ReportLevel.Error, "Searched image", e.Image);
 20:  error = -1;
 21:  }
 22: }

新建完成一个工程后.我们则可以通过记录事件的Record按钮录制Silverlight 界面的操作:

当然在录制我们需要一个测试的Silverlight Application. 为了达到演示目的该Silverlight应用程序界面实现但是一个加法操作: 界面如下:

新建一个Silverlight Application即可. 输入第一个数和第二个数 点击计算按钮就把二者计算结果显示在最后一个文本框. 这是页面操作一个过程.分解成Reaorex录制步骤分为 TextBox1获得焦点——>输入第一个数——>第二个文本框获得焦点——>输入数字 ——>点击计算按钮 ——>显示数据 既然搞清我们要录制固定Silverlight 界面UI操作具体步骤 ,下一步就是利用Ranorex工具进行录制这个动作整个过程点击ReCord按钮 Ranoex工具就会最小化 右下角就出现一个记录窗体:

在这有人要困惑的问.为何要录制这个页面计算过程?

做过黑盒测试驱动编程朋友应该都熟悉. 当我们把已经完成功能代码的程序交给测试MM时 她是不知道内部的代码结构. 如何能测试出界面和功能性上Bug. 测试MM负责不断录入变化数据 而根据测试案例中编写的测试规格来查看输出结果 来判定程序是否存在Bug.

你明白了吧. 既然测试过程数据时不断变化的 我们现在要做的就是利用Ranorex工具录制测试案例不变测试规则.

当我们打开录制时就可以在已经运行成功页面进行上面拆分步骤进行操作.: 录制完成后即可点击Stop终止录制过程,.

当把Silverlight页面三步计算操作录制完成 我们看一下Ranorex工具对页面事件操作的记录: 

录制Silverlight 页面UI元素流程:

查看计录Silverlight UI元素的窗体记录:

根节点是承载页面WebFrom对应承载的Silverlight comtrol UI元素 分别涉及到四个 三个TExtBox和一个Button按钮.和我们操作步骤记录完全吻合.

录制好Silverlight页面UI元素的操作规则后 我们工作基本完成一半.

<3.2>编辑录制行为

当完成UI元素操作规则录制后. 下一步只需要利用Ranorex工具编辑录制中行为变成动态在C#语言中可运用的代码属性 供我们操作.

可以对Silverlight事件窗体做简单的操作就可把我们记录转换成编码中可操作的DataDriver: 选中我们在TextBox1/2页面输入操作keySequence : 

选中Key Sequence右键点击——>Convert to User Code Item 后查看Recording1文件一下源代码:

源码中添加两个属性:

 1: // Create a new property 'FirstNum' 
 2: public static string FirstNum 
 3: { 
 4:  get;set; 
 5: } 
 6:  
 7: // Create a new property 'LastNum' 
 8: public static string SecondNum 
 9: { 
 10:  get;set; 
 11: } 

你应该明白这个属性封装但是我们在录制规则中对TextBox1和TextBox2的值. 当我们把一个key Sequences利用Ranorex工具Convert user Code 在右边属性窗体设置属性生成方法:

同理设置SecondNum属性的方法 发现源码中生成代码:

 1:  public static void SetFirstnum()
 2:  {
 3:  //Your code here. Code inside this method will not be changed by the code generator.
 4:  Report.Info("Key sequence '34'.");
 5:  Keyboard.Press("34");
 6:  }
 7:  
 8:  public static void SetSecondnum()
 9:  {
 10:  //Your code here. Code inside this method will not be changed by the code generator.
 11:  Report.Info("Key sequence '56'.");
 12:  Keyboard.Press("56");
 13:  }

修改如上代码吧 对应key值替换成自动生成属性:

 1:  public static void SetFirstnum()
 2:  {
 3:  //Your code here. Code inside this method will not be changed by the code generator.
 4:  Keyboard.Press(Firstnum);
 5:  }
 
 9:  public static void SetSecondnum()
 10:  {
 11:  //Your code here. Code inside this method will not be changed by the code generator.
 12:  Keyboard.Press(Secondnum);
 13:  }

ok.到这那么录像关于加法运算中运算的参数1和参数1 都可以通过属性封装在C#编码中进行控制 测试中涉及到多次循环测试 以不同数据录入测试Bug 回头看看Program.cs文件Main方法:

...
try
{
//动态设置两个输入计算的参数
Record1.FirstName = row["FirstNum"].ToString();
Record1.LastName = row["LastNum"].ToString();
//循环调用Start方法
Record1.Start();
}
catch (RanorexException e)
... 
 

如上当我们做好循环调用可执行测试程序.剩下就是需要根据测试案例制作测试数据录入进行测试. ok。这里利用SqlServer2005数据库来制作一个数据测试表 存储测试数据 建立测试表:

 1: USE master
 2: go
 3:  
 4: CREATE TABLE TestCodeDate
 5: (
 6:  id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
 7:  Firstnum VARCHAR(50) NOT NULL,--参数1
 8:  Secondnum VARCHAR(50) NOT NULL,--参数2
 9:  Resultnum VARCHAR(50) NOT NULL,--计算结果
 10:  TestDate DATETIME NOT NULL DEFAULT(GETDATE())--测试时间
 11: )
 12: go 

下一步就是在测试程序获得与本地Sql2005数据库数据并循环自动化测试. 剩下工作就很简单了 只需在Program.cs文件中获取数据 并循环录入    循环调用自动化测试程序自动执行 :

 1:  ...............................
 2:  try
 3:  {
 4:  //TODO: Code here - for example:
 5:  //获取数据方式 循环执行测试 [获取数据方法]
 6:  System.Collections.Generic.List<DataDriverEntity.DataDriverModel> getdatalist=Program.GetTestDataList();
 8:  if(getdatalist.Count>0)
 9:  {
 10:  foreach(DataDriverEntity.DataDriverModel getmodel in getdatalist)
 11:  {
 12:  //设置DAtaDriver 属性 
 13:  Recording1.Firstnum=getmodel.Firstnum.ToString();
 14:  Recording1.Secondnum=getmodel.Secondnum.ToString();
 16:  //重复调用 [测试]
 17:  Recording1.Start();
 18:  }
 19:  }
 22:  }
 23:  catch (ImageNotFoundException e)
 
 25:  .................

源码中DataDriverEntity.DataDriverModel是我新建一个实体类用来封装测试数据 定义如下:

/// <summary
/// 数据测试实体
/// </summary>
public class DataDriverModel
{
public int Id { get; set; }
public int Firstnum { get; set; }
public int Secondnum { get; set; }
public int Sumnum { get; set; }
public DateTime CreateDate { get; set; }
}

由此一个简单对Silverlight页面实现DataDriver Test的程序基本完成了.

<3.2>编译执行

当做了整个测试流程. 可以操作菜单中进行编译: Build Soluction 查看输出:

编译成功后. 我们可以直接在Ranorex工具点击运行:

编译成后也可以Ranorex为了保证整个流程重复执行. Ranorex工具把整个流程封装EXE可执行文件. 很方便我们调用执行. 很方便吧.

就此利用Ranorex工具完成实现 Silverlight Application Data Driver Test.

<4>与Visual Studio集成

因为Ranorex工具退出相对较晚 所以目前基本上没有相关的中文资料和文档可以参考. 这对一些.Net程序员更熟悉的是Visual Studio编码工具操作. Ranorex也考虑到这点特别这这个2.3.4版本中对Visual Sutdio加以集成.虽然只是简单集成 但这对我们更熟悉Visal Studio.而言可以说一个很大进步.

如果不喜欢Ranoex工具编译环境 你可以换成你熟悉的Visual Studio中照样可以做 Silverlight Test Driver工作.

首先在Silverlight Solution中建立一个独立Test Applcation 项目类型是一个输出Comsole Application: 

项目建立成功后在新建的Comsole Application中添加对Ranorex工具DLL引用:

从引用窗体中能看到Ranoex.Core.DLL:

进入Main方法 添加对Ranoex.Core.DLL的引用:

 1: //添加引用
 2: using System.Drawing; 
 3: using Ranorex; 

修改Main方法用来返回执行状态:

 1: [STAThread] 
 2: static int Main(string[] args) 

Main方法中调用系统附件的中计算器来进行计算. 下面是从Ranorex 复制过来的脚本代码:L

 1: int error = 0; 
 2:  
 3: try 
 4: { 
 5:  //调用附件计算器
 6:  System.Diagnostics.Process.Start("calc.exe"); 
 7:  Form form = Host.Local.FindChild<Ranorex.Form>("Calculator"); 
 8:  form.Activate(); 
 10:  Button button = form.FindChild<Ranorex.Button>("2"); 
 11:  button.Click(); 
 12:  
 13:  button = form.FindChild<Ranorex.Button>("*"); 
 14:  button.Click(); 
 16:  button = form.FindChild<Ranorex.Button>("3"); 
 17:  button.Click(); 
 18:  
 19:  button = form.FindChild<Ranorex.Button>("="); 
 20:  button.Click(); 
 22: } 
 23: catch (RanorexException e) 
 24: { 
 25:  Console.WriteLine(e.ToString()); 
 26:  error = -1; 
 27: } 
 28:  
 29: return error; 

you see!就这末简单 只需通过Ranoex工具进行录制把录制后自动生成的测试脚本Copy到Visual Studio中. 即可方便调用运行.

<5>参考资料

参考资料:

Silverlight Unit Test Framework

Silverlight and Unit Test

UI Automation in Silverlight - Part II (The Easy Way)

Testing Silverlight Applications

Silverlight Unit Test Review

Plug-in to Silverlight UI Automation

Ranorex Use Guide Support Center

源码以及测试视频下载地址:/Files/chenkai/源码和测试视频.rar

Silverlight测试——利用Ranorex实现数据驱动测试相关推荐

  1. python数据驱动读取用例_Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  2. 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...

    自动化测试模型可以看作自动化测试框架与工具设计的思想.随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 数据驱动测试 前一篇所讲的模块化驱动测试能 ...

  3. 好代码是管出来的——.Net Core集成测试与数据驱动测试

    软件的单元测试关注是的软件最小可执行单元是否能够正常执行,但是软件是由一个个最小执行单元组成的集合体,单元与单元之间存在着种种依赖或联系,所以在软件开发时仅仅确保最小单元的正确往往是不够的,为了保证软 ...

  4. junit数据驱动测试_使用Junit和Easytest进行数据驱动的测试

    junit数据驱动测试 在本文中,我们将看到如何使用Junit进行数据驱动的测试. 为此,我将使用一个名为EasyTest的库. 我们知道,对于TestNG,它已内置了数据提供程序. 通过简单的测试, ...

  5. Coded UI Test中的数据驱动测试

    有关什么是Coded UI Test以及如何使用Coded UI Test可以查看我的另一篇文章:http://www.cnblogs.com/jaxu/p/3706652.html 本文主要介绍如何 ...

  6. 不同文件实现登录功能的数据驱动测试

    本文介绍网站登陆功能,未使用ddt思想前每次登陆数据都重新写一遍代码,造成代码冗余,与我们设计初衷相悖. 整篇文章从以下几个方面介绍不同格式的数据怎样利用ddt数据的思想实现登录功能. 什么是DDT思 ...

  7. 什么是数据驱动测试?学习创建框架

    数据驱动测试 数据驱动测试是一种软件测试方法,其中测试数据以表或电子表格格式存储.数据驱动的测试允许测试人员输入单个测试脚本,该脚本可以对表中的所有测试数据执行测试,并期望测试输出在同一表中.也称为表 ...

  8. junit数据驱动测试_JUnit 5-早期测试驱动器-第1部分

    junit数据驱动测试 重要要点 JUnit 5即将发布! 它经过改进的API和扩展模型大大改善了" JUnit工具". 模块化体系结构使" JUnit平台"可 ...

  9. ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能)

    ML之K-means:基于DIY数据集利用K-means算法聚类(测试9种不同聚类中心的模型性能) 目录 输出结果 设计思路 实现代码 输出结果 设计思路 1.使用均匀分布函数随机三个簇,每个簇周围1 ...

最新文章

  1. VC++ 获取文件属性创建时间、修改时间和访问时间
  2. java接口的映射文件,详解mybatis通过mapper接口加载映射文件
  3. Matlab篇(二)MATLAB中addpath的用法 (转)
  4. 这样子称象你试过没有?
  5. cpu散热器怎么拆_电脑CPU处理器与整机温度高 教你简单解决
  6. oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案
  7. struct过滤器和拦截器的区别
  8. springboot flink结果输入到hbase_Flink流处理
  9. 哈理工OJ 1184 早起一水(水题)
  10. 拼多多平台API接入文档
  11. oracle 12c PDB 数据库 和mybatis 数据库连接池 的连接问题
  12. 荣耀手机wifi信号如何连接服务器,教你手机无限流量免费上网 荣耀WiFi实测
  13. 程序员那些必须掌握的排序算法(上)
  14. CoreML ARKit3
  15. MYSQL圆角矩形表示_圆角矩形“RoundRectShape”使用详解
  16. 自动白平衡技术(AWB)
  17. tolua++实现分析
  18. 一口气从零读懂CAN总线以及应用
  19. 网络攻防--网络防御技术(一)
  20. 《星际穿越》初解析——一部空前绝后的史诗科学巨作

热门文章

  1. struct ifconf和struct ifreq,获取网线插入状态
  2. Linux下C语言之文件操作
  3. ant 的 copy 使用
  4. ORACLE 中极易混淆的几个 NAME 的分析和总结
  5. Jquery empty() remove() detach() 方法的区别
  6. Linux -- 利用IPS(***防御系统) 构建企业Web安全防护网
  7. 1.1 《硬啃设计模式》 第1章 大话设计模式
  8. withRouter组件
  9. Win10创意者更新刚发布 夜间模式就出BUG
  10. 《软技能:代码之外的生存指南》一一11.1 明智的处理方式