前几篇我们模拟了一个测试框架的雏形,用的是Human Resources System测试网站:
重申一遍,框架的设计多种多样,只要能够满足一致性、复用性和扩展性就可以了。这篇我们就来总结一下写完的框架。和开发一个软件一样,自动化测试项目的完成也需要经历好几个步骤。虽然每个公司都有自己的计划和安排,但大体情况都差不多。我简单归纳如下:
你看,完成一个项目需要合理规划,并不是直接拿来就编程,写代码之前还有好几步要做。首先,项目分析。其实项目分析的过程就是熟悉应用以及确定测试模块的过程。Hrsystem是一个网站应用,打开后默认来到登录页面。登录页面上有员工代号,密码,登录按钮。我们可以用三个模拟员工登录:
便选择一个登录进去直接跳转到主页(Home)。主页上有一个员工头像以及一段欢迎辞。导航栏有四项,分别指向当前主页(Home),员工信息(Employee),员工工时表(Timesheet),以及网上商城(OnlineStore)。再简单浏览一下网站。点击Employee来到员工信息页面,它里面记录了每一个员工的代号(Employee Code)、姓名(Employee Name)、最近登录日期(Last Login Date),以及该员工是否还在该公司(Active)。代号姓名不用说了;对于Last Login Date来说,只要你一登录,最近登录日期就会变成今天;有些员工离职了或调走了就不再是Active了。
接下来点击timesheet跳转到员工工时表,员工的每一条工作记录都会存在此表中。Roster Date,Roster Start和Roster End指的领导排的班次,也就是计划上班的日期和时间。Actual Start和Actual End指的是实际上下班的时间。Comments指的是根据Roster和Actual的对比提示该员工是否迟到或早退(大部分老板都爱搞这个)。
点击OnlineStore来到网上商城,琳琅满目的商品,只可惜全是假的。虽然都是假的,但还都有标价。点击某商品的buy按钮就会弹出一个页面让你选择颜色材质个数,然后就可以放入购物车结账。
浏览了一遍网站,我们也就知道了它的某些功能。通常情况下导航栏中不同的项目代表不同的功能,是个天然的模块分割器,所以我也是按导航栏来给测试点分模块。项目的测试点分为四个模块:
我们的框架中暂时只有登录模块和员工模块,剩下的两个模块大家有兴趣可以去写写,我就不做演示了。
第二步,测试用例整理。我们有四个模块,每个模块都有几个需要测试的功能。因为只是演示,我只挑选了几个有代表性的测试点作为test case,实际项目中或许老板会让你面面俱到尽可能覆盖周全。Test case如下,一般会写在Excel表里:
每个test case的具体步骤如下:
EmpLogin(登录):
1. 正常登录(用户名/密码输入正确)
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮(断言点:登录成功,用户名与网页显示一直时表示登录成功);
- 点击退出按钮(断言点:退出成功,登录按钮再次出现表示退出成功)。
2. 非正常登录(用户名/密码错误)
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮(断言点:登录失败,出现” usercode or password is incorrect”表示登录失败)。
3. 非正常登录(用户名/密码为空)
- 打开网站
- 输入用户名;
- 点击登录按钮(断言点:登录失败,弹出对话框”Please enter password”表示登录失败)。
Employee(员工信息):
1. 员工登录后最后登录时间字段正确
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮;
- 登录成功后在导航栏上点击Employee(断言点:登录员工Last Login Date应与数据库时间均显示为当天)。
Timesheet(工时表):
1. 按员工姓名搜索工时表
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮;
- 登录成功后在导航栏上点击Timesheets;
- 输入员工姓名;
- 点击查询(断言点:返回被查询员工的工时表,且数量正确。当工时表上员工姓名和查询字段一致,并且记录数的xpath与期望一致即为查询正确)。
2. 查看员工迟到早退
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮;
- 登录成功后在导航栏上点击Timesheets(断言点:Roster Time和Actual Time进行对比,具体写case时细讲);
OnlineStore(网上商城):
1. 查看物品被添加到购物车
- 打开网站;
- 输入用户名;
- 输入密码;
- 点击登录按钮;
- 登录成功后在导航栏上点击OnlineStore;
你也可以按照我提供的测试用例来完成工时表和网上商城两个模块的开发。
第三步,框架选择(framework selection)。我们用的是Selenium来写,这个没什么疑问。有些公司基于Selenium自己又开发新的框架工具,做得比较好的Robot Framework(用Python),Watir(用Ruby)等等。前三步虽然没什么技术要求,但它帮你确定了测试模块和范围,合理规划了整个项目,地位也很重要。
第四步是项目结构定位。我们不断地在修改加工框架,最后修成了现在这个样子:
结构包括以下几层:
Managers(测试中枢层):最高层,负责测试用例执行、选择、以及设置测试环境,比如用什么driver,打开哪个网站,执行哪些test case。涉及的包是com.testalliance.hrsystem.managers;
Tests(测试用例层):第二层,里面包含每个test case以及它们执行过程。涉及的包有com.testalliance.hrsystem.tests.login,com.testalliance.hrsystem.tests.employee。你会发现我就是按照项目分析得出来的模块来命名每一个tests子包;
Page Object(业务逻辑层):第三层,里面装了为实现某个功能而写的方法,比如登录(login),跳转(navigate),查看(view)等等,以及该功能实现过程所需要的操作,也就是关键字,比如点击(click),输入(enter),断言点(verify)。涉及的包是com.testalliance.hrsystem.pageobj;
Obj Repository(Object声明层):第四层,里面存储了所有网页元素的声明,在com.testalliance.hrsystem.objrepository中;
Utility(功能/应用层):第五层,指的是除业务逻辑层之外的功能性方法,比如读写文件、数据库连接、截图、email测试结果等等。
雏形的结构差不多就是这样,大家可以根据自己的需要自行调整,方便自己的框架。总之,听你老板的。
之后就是写代码、代码检查和支付了,基本上就没什么说的了。你可以在我们这个框架的基础上继续加工,比如用log4j抓运行信息,或是制作一个小的报告,或是重新设计配置文件满足更高的要求。当然,在修改框架之前我说过,市面上已经有很多公司设计了测试框架,它们的功能远比我写的这个更丰富、更强大,大家有空可以去研究研究,相信有了这几篇的帮助,理解一个框架应该不成问题了。