基础功能测试架构
来源:互联网 发布:mac 上mysql忘记密码 编辑:程序博客网 时间:2024/06/06 04:09
上一篇博客《Cucumber读书笔记》把整个框架概述一下。当时底层实现的Framework一笔带过,这篇博客延伸一下底层Framework层的具体实现流程。在这里讲一个比较成熟的基本的功能测试框架,核心是使用工厂模式。Product即要操作的控件。首先看一下框架的流程。
一、程序流程
通过下图我们可以基本了解整个程序的流程。我们通过ControlFactory生产我们接下来要操作的控件。每隔控件都会被识别为一个对象,对控件的操作即为该对象的方法。要识别的控件通过JS来获取,个别识别不到的,通过事先记录对应控件的ID,Xpath等信息,后来需要获取该控件时通过该信息获取控件,从而对控件进行操作。IPageAccess提供Control的的接口,PageAccess层实现对应操作的方法(webdriver,JS等)
1.1 框架基本结构
二、Business Logic Layer层
BUSIness Logic Layer层是整个流程的核心。他主要有三个功能创建Page,定位Control,创建Control。
1.创建Page的时候通过反射的方式获取创建的Page或者Popup。创建的Iwebdriver对象通过单例模式保持唯一性。
2.定位Control时,我们先通过JS来识别常出现的基本控件。剩下未识别的控件通过记录其ID,XPath等信息进行获取。
3.创建Coutrol的方法和创建Page的方法基本类似,都是通过反射的方式。通过调用对应控件的对象的方法实现对对应控件的操作。
2.1 BLL层流程
三、IPageAccess层
IPageAccess层是接口层,提供对应控件的接口给控件类继承。提供创建Coutrol时候接口类。具体接口的定义方式因项目而异,最后定义成IClickable,IMenu方便归类继承。
namespace IPageAccess{ public interface IClickable : IControl { bool Click(); }}
四、PageAccess层
PageAccess层即为具体的实现层,实现的方式是通过调用识别的对应控件的对象的相应的方法。实现的方式是webdriver,JS等。在这就不详细讨论具体的实现方式了。创建对象时,对象的参数是含有ID,Name等信息的Dictionary,对象要根据Dictionnary提供的信息定位控件,进行相应的操作。
namespace PageAccess.Portal{ public class CPButton : CPBaseClickable { public CPButton(Dictionary<string, string> info) : base(info) { } protected override IWebElement Element() { IWebElement obj = null; if (Id != "") { obj = WebDriverHelper.CurrentDriver.FindElement(By.Id(Id), 10); } else { if (Name != "") { obj = WebDriverHelper.CurrentDriver.FindElement(By.Name(Name), 10); } else { if (Selector != "") { obj = WebDriverHelper.CurrentDriver.FindElement(Selector, 10); } else if (Xpath != "") { try { List<IWebElement> buttons = WebDriverHelper.CurrentDriver.FindElements(By.XPath(Xpath), 10); buttons.Remove(buttons.Find(x => x.GetAttribute("class").Contains("mce_copy"))); if (buttons.Last().Enabled && buttons.Last().Displayed) obj = buttons.Last(); else obj = buttons.First(); } catch { obj = null; } } } } if (obj == null) { throw new Exception(string.Format("Button {0} can't be found.", this.LabelRepository)); } return obj; } public override bool Click() { } #endregion }}
在底层实现时,仅凭JS和selenium2是不够的,有时还要引入第三方Tool,例如AutoIT。处理一些复杂需求是同样需要引入RemoteWMI等方法实现。
- 基础功能测试架构
- 软件功能测试基础
- 质量管理:测试基础架构图
- IT 架构测试之基础架构运维测试简介
- 企业基础架构平台智能查询功能
- 功能测试用例基础设计模型
- android基础--eclipse Junit的功能测试
- 功能测试用例基础设计模型
- vSphere 5 HA 基础功能测试
- 移动APP测试之基础功能测试流程
- Web架构设计——常见基础功能
- 《从菜鸟到测试架构师》简要总结(5)----功能测试
- 怎么利用产品的基线和功能架构来做冒烟测试(快速测试)
- Java_基础—Collection集合的带All功能测试
- 测试 功能
- 功能测试
- 功能测试
- 功能测试
- Unity3D占用内存太大的解决方法
- 20151024_android
- 在图书馆看到我自己
- WifiManager、WifiInfo、WifiConfiguration集成类(五)
- 念-志摩
- 基础功能测试架构
- 1006. 换个格式输出整数 (15)
- 使用loadrunner进行性能测试(二)--参数化
- HDU——1108 最小公倍数
- c语言之栈存储区和堆区理解
- MAC 下 excel 如何使用加载项(宏)
- (A^B)%C 快速幂乘
- J2EE项目从Myeclipse中转换到eclipse中
- jni调试错误 Error while obtaining file from device 。。 com.android.ddmlib.SyncException: Writing local