注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

链式调用的UI自动化框架设计  

来自nowind   2017-06-13 19:27:43|  分类: 自动化测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

项目之前测试留下的UI测试框架异常简单(说的就是那个dagger),在使用上以及代码的可维护性上都存在一定问题。故而自己在原有的基础上修改,重新设计。
先抽象UI自动化代码中需要的东西:1.需要一个Driver,封装一些常见的行为,例如点击,输入,打开网页,需要支持超时,支持错误后自动截图等功能。2.需要一个断言器,快速断言节点的存在性,节点属性值,节点样式值,节点内容,节点格式,当前url等。3.需要一个处理公共行为的类,包含公共行为的方法,例如登陆等。
三者的关系如下图:
                                                                     链式调用的UI自动化框架设计 - 网易杭州QA - 网易杭州 QA Team

Driver是中心,Assertion需要的节点数据,当前页面数据等都需要Driver支持。当并发执行用例的时候,每个线程都需要一个Driver,每个Assertion需要对应一个Driver,两者要互相绑定,互相注入。Action则会调用其它测试用例类的静态方法,其中也需要提供Driver。
最终实现时,Driver是一个线程变量,在初始化时,构造一个Assertion和Action,并将自身注入其中。需要注意的是,TestNg中如果开启了用例的timeout,那么before函数和执行本体是不同线程,在before函数中配置线程变量,在本体中是不同的,因而需要关闭。
其次,在语法上,以描述顺序和过程的链式调用为主。包含以下几个顺序描述:
1.start()返回Driver对象,在BaseUITest(测试用例的基类)中被使用,表示测试用例的开始执行
2.then()返回Driver对象,在BaseUITest和Assertion中被使用,将上下文切到执行者
3.end()返回void,结束链式调用。
以下几个为行为描述:
1.action()返回Action对象,在Driver中定义。
2.test()和test(String)返回Assertion对象,在Driver和Assertion定义,String参数会设置成断言的描述
链式调用原则:
1.Driver中除了get方法(getElement),行为顺序描述方法外,均返回this,如open,click,pause等
2.Assertion中所有方法返回this
3.Action中所有方法返回Driver
最终,一个用例可以变成下边这样

@Test(description = "免费课程已参加收藏",groups={"courseIntro"})
public void courseIntroPageFreeEnrolledStore()
{
start().action().LoginUrs("ssss@163.com", "xxxx")
.action().openCourseIntroPage("1111")
.click(加入收藏).pause(1000).test("加入收藏").xpathExist(取消收藏)
.then().click(取消收藏).pause(1000).test("取消收藏").xpathExist(加入收藏);
}

代码的可阅读行提高了不少
  评论这张
 
阅读(1452)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017