现在的位置: 首页 > 综合 > 正文

为什么需要Page Object?

2013年09月09日 ⁄ 综合 ⁄ 共 1356字 ⁄ 字号 评论关闭
分层自动化测试QQ群20442181的群主,咨询师吴穹Adam在群中分享的文章:
=============================================
为什么需要Page Object?

Page Object(PO)是界面自动化验收测试中的一个常见模式,要和@槽神刘叫兽探讨一下PO的必要性,顾写这篇小文表达一下我的观点。

PO的主要价值体现在对界面交互细节的封装,这样可以使测试案例可以更关注与业务而非界面细节,提高测试案例的可读性,这其实都很有利Behavior Driven Development(BDD),Acceptance Test Driven Development(ATDD)或Specification By Example(SbE)的实施。

举个小例子,例如,我有个身份信息页面,需要输入姓名,年龄,性别,身份证号等信息,如果不用PO,那么我的测试用例可能是这样的(java+selenium):
 driver.findElement(By.name("name_field")).sendKeys("God");
 driver.findElement(By.name("age_field")).sendKeys("99999");
 driver.findElement(By.name("sex_field")).sendKeys("unknown");
 driver.findElement(By.name("social_id_field")).sendKeys("invalid");

可以看到,上述语句除了业务之外,包含许多实现层面的噪音,即便使用BrowserBot模式对这些噪音进行分装,但是测试案例也会包含四个步骤:
MySendKeyByName("name_field","God");
MySendKeyByName("age_field","99999");
MySendKeyByName("sex_field","Unknown");
MySendKeyByName("social_id_field","invalid");

噪音经过使用BrowserBot模式大为降低,但是,还是有一些,如界面id等。如果使用PO模式,测试案例可以得到进一步简化,
IDPage.InputBasiicInfo(“God”,”99999”,”Unknown”,”invalid”);

这其实就形成了自己的针对特定应用的测试DSL,封装了大量界面交互细节,提升测试案例的可读性。

使用PO之后的另外一个大好处,就是有助于降低冗余,如果我需要在10个案例里面都输入身份信息,那么我不需要将这个4个步骤重复写10遍,而是只需要调用InputBasicInfo十次即可,这将极大降低未来的案例维护成本。

因此,PO的威力在一个测试人员自己写主场景测试案例时是不容易体会到的,因为,他不需要和开发、业务交流案例,他也不会写很多重复动作。但是,我相信,当他真正开始尝试ATDD,BDD或SbE时,当他开始写一些重要的异常分支流程时,当他开始为新需求频繁维护修改案例时,我想他会更意识到PO的作用。

最后一句,PO不是万灵药,也不是唯一真理,提高测试案例可读性,避免案例步骤冗余才是终极目标。

抱歉!评论已关闭.