自动化测试框架的设计思路

在开始设计之前,我们首先需要考虑以下几个方面:

使用该框架写出来的自动化测试案例,需要给开发,手动测试,可能还有客户查看,所以写的测试案例需要尽量的清晰明了,不要有太多复杂逻辑,及比较好的可读性。

使用这个框架做自动化的人,不会有太深的编程能力,所以要提供足够好的,最好是傻瓜化的测试点验证方法,及很好的异常容错处理能力。

测试框架最好是app,网页测试,接口测试,统统都能支持。

针对上面的几点,我们总结出以了下两个核心点:该测试框架需要很好的可读性和可扩展性。

思考如下。

可读性思考

对于测试案例,比较流行的两种观点:

1. 希望做成自然语言描述的case

比如:

I go to  “www.baidu.com”

I Input  “点融网”

I click 搜索按钮

I see  “点融网最有保障的P2P,最专业的技术团队”

此方式为不懂技术的相关人员所喜爱,简单明了,可读性好。

2. 希望做成编程模式

比如:

Driver.navigate_to(“www.baidu.com”)

element = driver.find_element_by_id(“id”,”kw”)

element.send_keys(“点融网”)

element = driver.find_element(“id”, ”su”)

element.click()

……

此方式是自动化测试工程师喜欢的方式。希望告诉大家,我们也是写代码的,记住我们也是coder。

针对以上两个不同观念,我们是否可以考虑将测试案例设计成,既能一定程度体现自然语言描述特点,又能兼顾使用程序语言的灵活性?

我们仔细分析测试场景,抽出UI测试的核心行为,无非就是:

检查点:

页面元素是否存在

页面元素显示内容是否正确

页面元素是否可用

……

辅助功能:

等待元素出现

点击某页面元素

给元素输入内容

……

分析抽出来的核心行为,发现这些行为基本都是针对一个个页面元素进行的操作。那么我们就可以做如下的动作:

将页面元素看成一个对象,封装成一个类

将上面分析得到的核心行为都封装成基类方法。然后确保,任何一个页面元素都继承该基类。

该基类提供类似于自然语言的方法名字,调用这些方法,就能很明确的知道测试案例在做什么检查,在做什么行为,这样就能极大的提高测试案例的可读性

基类举例:

该基类主要目的是在UI测试中,对元素共性的检查点和辅助方法进行抽取,将它们封装成一个个非常容易读懂的方法,且具有异常处理能力。

经过上述思路的整理,针对文章开始时例举的测试案例,就可以改写成如下:

该测试案例是不是可读性变强了呢?也直接用程序语言写出来了呢?在实际的使用过程中,可以让手动QA或者不太熟悉代码的QA专门负责测试案例的实现,底层的方法包装可以由经验丰富一些的同事做。

扩展性思考

基于UI测试,我们希望除了支持web测试,还能支持app的测试,可能还需要接口测试,等等。怎么做呢?

我们就需要考虑分层问题,将测试框架分为三层。

第一层:测试案例层

该层是测试案例的具体实现,就像上面写的case那样,用接近自然语言的方式,来实现测试案例。

第二层:支持层

该层主要提供workflow,通用工具,元素库的支持,便于测试案例层直接调用。

Workflow:主要封装测试项目中需要经常使用的针对项目的公用方法,供测试案例层直接调用。比如用户登录,注册一个用户,搜索出用户等等经常使用的动作。

通用工具:提供一些通用方法,比如生成一个随机电话号码,生成一个随机身份证,数据库操作,http操作支持等等

元素库:每一个页面元素的定位表达式(xpath,id,name,css,link_text等等表达式)

我们的测试案例,都是针对一个个元素进行操作的。将每一个页面的每一个元素,都看成一个继承了基类的特定类。所以,我们的第一步,就需要找到这个元素,定位到这个元素。测试项目的所有元素都放到这里。

第三层: driver层

这一层主要封装各种driver。比如我们针对网页测试,使用selenium-webdriver开发包,针对app测试,我们使用appium开发包。我们在这一层进行封装,通过调用selenium-webdriver,appium提供的原生方法,封装成可读性很强的方法且加上容错机制。以后就算我们要换用其他的第三方包,我们的测试案例层和支持层的方法也不需要做任何的修改。只需要修改driver层实现的方式就可以了。在一层,我们主要实现两个方面的封装,一个是driver的封装,一个是基于基类自然语言函数的封装。

driver封装

我们需要封装,根据参数确实是基于web测试还是基于app测试。比如:

该方法实现了对网页和app驱动的封装,根据不同参数,返回不同的driver。

基类封装

主要是封装各种可读性很很强的方法以及将元素定位标识及driver也封装进去。为了支持网页测试和app测试,我们需要两个基类,一个是针对网页操作基类,一个是针对app操作基类。同时为了web和app操作的一致性,我们要求对外提供的方法,必须要将常用的方法保持一致的名字和一样的参数类型及参数个数。

网页基类示例如下:

通过对driver和基类的封装,driver层实现了对网页测试和app测试的支持,并且针对两种测试,都提供了统一的方法,能够方便使用者,使用相同的方法,测试app和web。

通过对可读性和扩展性的思考,我们在开发测试框架的时候,如果考虑的比较周全,就能很好的提高测试案例的可读性和扩展性。


本文作者:黄勇(点融黑帮),目前就职于点融网成都团队,任职高级测试开发工程师。因为热爱测试工作,几年前从开发转到测试开发。对网页自动化,接口测试,压力测试,App测试都 有涉猎,目前专注于CRM项目的质量保障。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,757评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,478评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,540评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,593评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,903评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,329评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,659评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,383评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,055评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,337评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,864评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,227评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,820评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,999评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,750评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,365评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,260评论 2 258

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,543评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,594评论 4 59
  • 这是一个只会换来更加心碎的故事,我在角色里小心翼翼的不敢有半点马虎和怠慢,独自默默承受痛楚和收拾包袱,独自守护着剧...
    杰杰6889阅读 228评论 0 0
  • 今早打开京华网,映入眼帘的是《北控后卫球员救起环卫工 事后被扶者称:当时情况记不清了》。 故事情节很简单:北京控股...
    暗香屋阅读 773评论 3 6
  • 早上5点起来洗漱,整理行李,衣服、电脑、书籍笔记本分类放好,一切很自然,用时也很短,数不清这是第几次远行。喜欢远行...
    梁翠绽放阅读 295评论 0 3