谢谢打开这篇文章的每个你

关注我们 点击右上角 ··· 设为星标

UI自动化测试用例剖析

让我们先从分析一端自动化测试案例的代码开始我们的旅程以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。由于现在Selenium在自动化测试的统治地位,并且随着Selenium 4的即将发布,在未来很长的一段时间里这种统治地位应该还会持续,所以我的这篇文章还都是基于Selenium与Java的。

自动化测试小Demo

它要测试的东西其实是要看一下百度搜索能不能返回兴业银行的官网。我们分析一下这段代码都包含些什么东西。

第一,这段代码包含了定位符。熟悉Selenium的都知道,inpubBox和searchButton就是网页的元素,通过By.id实例化,然后driver在findElement 的时候是通过他们的id,就是”kw”和”su”找到他们的。所以”kw” 和”su”就是他们的定位符。

定位符

第二,这段代码包含测试数据。“兴业银行”,“兴业银行欢迎您”就是测试要输入的数据。

测试数据

第三部分没前面两部分那么直观。这段代码在基于”kw”找到inputBox后,往里填入“兴业银行”四个字,然后点击了searchButton提交搜索申请,然后在搜索结果里面寻找“兴业银行欢迎您”的text,然后以是否找到这个text作为assert的标准。这些测试步骤反映的是真实的业务逻辑, 并且不能随意更换顺序。所以第三部分是业务逻辑。

业务逻辑

第四部分是业务逻辑里面的每一个步骤的具体操作,例如输入某段文字,或者点击一个按钮等。具体到我们的例子就是sendKeys和click。

具体操作

第五部分就是如果把前面四部分都抽出去后,测试代码剩下的东西,基本上就是一些负责准备或者是清理的代码,例如初始化driver等。我把它称为代码骨架。

经上分析,一个自动化测试用例由五部分组成:定位符、测试数据、业务逻辑、具体操作、代码骨架。

UI自动化测试结构

数据驱动的自动化测试

如果把测试数据抽取出去,通过数据的改变驱动自动化测试的执行,最终引起测试结果的改变,就是数据驱动的自动化测试。说白了,就是测试数据参数化。

数据驱动

数据驱动的自动化测试适合测试场景与业务逻辑相对简单,变化不是特别大,但是测试数据对测试结果影响大的情景,或者是需要通过大量不同的测试数据对相同的测试场景展开测试的情景。它实现的方式比较简单,但由于业务逻辑还是镶嵌于测试代码里面的,业务逻辑与测试代码还是强耦合的,一旦业务场景发生改变,需要修改测试代码来适应业务的变化。

想要隔离业务对测试代码的影响,就必须使用关键字驱动的方法。

关键字驱动的自动化测试

简单来说,关键字驱动的自动化测试,就是在数据驱动的基础上,把具体操作抽取到代码以外,通过具体操作的改变来驱动测试的执行。这里的说的关键字其实就是具体的操作,例如例子里面的sendKeys和click。但由于具体操作(关键字)是基于业务逻辑的,要想把关键字抽取,业务逻辑也得一同抽取,才能实现真正的关键字驱动。同时,具体操作的对象是定位符定位的元素,所以定位符也必须得一同抽取出代码意外,才能完全隔离业务对代码的影响。

关键字驱动

基于关键字驱动的自动化测试适合业务场景复杂,测试步骤繁多的情景,又或者是希望搭建统一测试平台的情景。

它最大的优点是使得不懂编程的业务人员可以在不需要读懂代码的情况下,通过更改配置,自由添加新的测试用例或修改现有的测试用例。这一点在敏捷开发里面相当实用,可以把业务卷入到测试当中,让测试用例的准备工作尽可能提前;另外,测试代码与要测试的业务逻辑完全隔离,同一份测试代码可以复用于不同的测试场景,较少了重复开发的成本。

但是,它也不是完全没有缺点。首先,并不是所有场景都需要基于关键字驱动的,有些场景数据驱动的方法能解决的话就应该果断选用数据驱动,而不应该过度设计;第二,由于业务逻辑与代码隔离了,代码的可读性将大大降低,单纯的代码基本没有业务含义,要想通过读测试代码来了解业务,基本是不可能了。牺牲了代码的可读性来换取可重用性。第三,由于代码复用了,每一个测试用例的执行都相当于一次全新的测试,这意味着如果不加额外处理,测试报告将被互相覆盖,永远都只保留最后一个测试用例的执行结果。

一个关键字驱动的自动化测试例子

这是我很早之前写的一个关键字驱动的自动化测试的Demo。基本的想法是把定位符、测试数据、业务逻辑、具体操作多抽取到一个叫做testCase.properties的文件。Parameter用于存贮从testCase.properties读出来的属性,主测试类TestBankIndex通过读取这个文件来驱动测试的执行。关键字所对应的具体操作放在了PageAction里面。

在testCase.Properties里面,通过testCaseNameList来定义测试用例名字,中间用|分割开。testCaseNameList以下,是每一个测试用例的具体测试步骤。每个测试步骤名字以测试用例名字作为前缀,并且其排列顺序就是测试步骤的顺序。然后测试步骤的值以测试所需的操作(关键字)、定位方式、定位表达式、测试数据、超时时间排列得来,中间以|分割。这里有一个比较特别的是断言。如果是断言的话,会有Keyword,用于断言的判断。

testCase.Properties

Parameter用于存储testCase.Properties的属性。它其实只是一个简单的Java Bean。

Parameter

PageAction用于定义每个关键字对应的具体操作。我们以search方法为例,通过传入Parameter来获取search需要的元素定位于要输入的搜索文本,然后执行真正的搜索操作,并等待特定的时间。

PageAction

TestBankIndex是主测试类,但实际上里面就一个testEachCase方法。里面大量使用Java 反射机制来实例化和执行方法。所以,testEachCase在执行的时候,它不到最后一刻都不知道它要运行哪个测试用例与执行什么操作的,这些完全在testCase.properties里面定义。

TestBankIndex

基本上就是这样。代码是一年前写的,写得比较挫,也没时间优化,很多地方都写的不是很规范,也没有单元测试;测试报告覆盖的问题也没有处理;testCase.properties过于重量级了,什么都往里塞。还没有UI,不方便操作。但作为一个MVP,基本上实现了UI自动化测试框架所需要的功能。有兴趣的同学可以通过文末点击下GitHub链接clone代码。希望借此给大家在搭建自动化测试框架上提供一些思路,抛砖引玉。

Bye~

*本文来源网络,如有侵权,请联系删除。

作者:whfeng

转载自:https://www.jianshu.com/p/7590d409df7e

○ 欢迎加入 

 Testfan为广大测试人员提供技术交流群:

Selenium自动化测试群:7501017

测试开发巅峰群:521192806

Appium自动化测试:534129320

LoadRunner性能测试群:495447734 

嗨,你还在看吗?

ui自动化测试框架_数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索相关推荐

  1. python中什么是数据驱动_携程大牛谈自动化测试里的数据驱动和关键字驱动思路的理解...

    对于初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄虚,不就是参数和函数嘛!其中也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 一.录制/回放 ...

  2. python关键字数据驱动_携程大牛谈自动化测试里的数据驱动和关键字驱动思路的理解...

    对于初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄虚,不就是参数和函数嘛!其中也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 一.录制/回放 ...

  3. Selenium自动化框架:数据驱动、关键字驱动和混合

    什么是Selenium框架? 这个 Selenium框架 是一种代码结构,它使代码维护变得简单而高效.如果没有框架,用户可以将"c"框架产生了一些有益的结果,比如增加了代码可重用性 ...

  4. 自动化测试里的数据驱动和关键字驱动思路的理解

    初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 1.录制/回放的 ...

  5. 十年测开如何理解自动化测试里的数据驱动、关键字驱动思路

    初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 01.录制/回 ...

  6. python 自动化框架_学会Python+Selenium,分分钟搭建Web自动化框架!

    用python+selenium实现UI自动化测试,要有一些HTML和xpth的基础,当然python基础一定是必须要会的.笔者建议花点时间了解下相关基础知识,不至于后面发懵. 一.什么是seleni ...

  7. QTP数据驱动和关键字驱动

    原文地址:[转]QTP数据驱动和关键字驱动作者:Cheers_Lee 原文地址:http://blog.sina.com.cn/s/blog_4d54c07a0100gk41.html 关键字驱动: ...

  8. 数据驱动和关键字驱动

    数据驱动 和 关键字驱动的优缺点: 数字驱动:数据驱动测试的方法是将测试数据与测试用例脚本分离的一种方法 关键字驱动:关键字驱动方法是在电子表格内含有描述系统要采取的行为的关键字和测试数据 转载于:h ...

  9. 前端ui框架_推荐几个移动端前端UI框架

    SUI Mobile http://m.sui.taobao.org/components/#popup SUI Mobile 是一套基于 Framework7 开发的UI库. MUI MUI-最接近 ...

最新文章

  1. tinyhttpd源码详解
  2. 2020 年热门编程语言的发展方向
  3. 《算法图解》——二分查找
  4. Python-OpenCV——Image Blurring(Image Smoothing)
  5. 探花交友(3)——接口实现分析
  6. Python 抓取淘宝联盟优惠券
  7. spring中 shiro logout 配置方式
  8. 解决 hadoop 2.x 配置 yarn 运行任务 Running job 卡住
  9. PAT A1095 Cars on Campus ——一夜鱼龙舞
  10. 3D数学基础:正交矩阵
  11. 匮乏即是富足,自律产生喜悦_当惊喜与喜悦分开时
  12. linux6.5修改网卡名称,Centos7更改网卡名为eth0
  13. 那些服务器平台支持nvme,最新网吧无盘服务器能用NVME的M.2  SSD吗?
  14. UTC GMT 时区 时间戳
  15. 中国青年女科学家奖公布:付巧妹等20人、风云卫星高精度定标与定位技术等5个团队获奖 | 美通社头条...
  16. php seo收录统计,SEO 统计算法
  17. jQuery插件实现图片墙小案例
  18. 2022-2028全球与中国Oracle ERP云咨询服务市场现状及未来发展趋势
  19. 刷OPENWRT后悔了,刷回原厂固件教程
  20. 【一点自己的人生经历】记一次考博经历

热门文章

  1. 感叹号的形状像什么_12星座删掉自己喜欢的人时都在想什么?
  2. 关于php的求职简历免费下载,PHP程序员求职简历模板下载
  3. python - 啃书 第十二章 图形用户界面编程
  4. Encryption-基础:MD5加密
  5. 2021年系统集成项目管理工程师报名时间
  6. 基于Java+SQL server的会展中心管理系统
  7. UIApplication深入学习
  8. html米柚作业,miui12申请答题答案
  9. Ignored attempt to cancel a touchmove event with cancelable=false问题
  10. DBN的GeNIe显示