浅谈自动化测试

自动化测试

在wiki中,自动化测试的定义是使用特定的软件,去控制测试流程,并比较实际的结果与预期结果之间的差异。通过将测试自动化,可以让正式的测试过程中的必要测试,可以反复进行;通过这种方法,也可以将难以手动进行的测试,交由软件来做。

我们可以看到,自动化测试优点有三点:
- 能够支持频繁的回归测试,
- 能在软件开发过程中尽早发现缺陷
- 能够无限地循环执行测试用例。

那么软件维护周期长,需要多次反复操作的互联网软件非常适合自动化。

自动化开展方式

自动化测试一般会有两种方式开展:

代码驱动

通过大量不同的输入参数和对应的返回结果,来验证类 模块或者库文件的公共接口是否正确。测试的一个趋势就是普遍使用测试框架(如JUnit,PyUnit,etc)来进行单元测试,以便于判断代码片段在不同配置环境下的表现是否符合预期。
“代码驱动测试自动化”是敏捷测试的一个关键特性 同时也叫测试驱动开发TDD。单元测试的逻辑在代码编写之前就被确定下来,只有当代码通过了所有测试,代码工作才能结束,单元测试的代码比人工测试的可信赖性更高,因为代码覆盖率更高,在每次代码变动后,能够立即发现BUG,而不是等到测试阶段才发现,能够有效降低成本。

用户接口

通过产生用户接口事件(如键盘输入,用户单击等),并捕获事件导致的用户接口变化,以验证程序响应是否正确。UI自动化就是这种方式实现。这其中有个是否录制特性,暂且不谈。

自动化测试框架

主要分为数据驱动和关键字驱动,数据驱动,无非脚本中的数据参数化出来 而关键字驱动,则进一步在技术上把 tester 分成了完全不懂技术的和懂点技术的,前者只能根据格式填写一下 excel 表格,后者对工具/框架内置的所谓关键字库进行增补或二次开发。 找些例子来看看吧。

简单的数据驱动

如下面代码,定义了一个class并实例化了几个对象,用来存放不同的用户登录信息;而在负责完成登录操作的 do_login() 方法中,把 send_keys 原来向表单中填充的数据参数化,根据每次调用 do_login_as() 方法时传入的不同对象来实现用不同帐号登录的效果。(下面是代码示例)

class Acconut(object):
    def __init__(self,user='',passwd=''):
    self.user = user
    self.passwd = passwd

def do_login(user_info):
 driver.findElement(By.id("user")).send_keys(user_info.user)
 driver.findElement(By.id("passwd")).send_keys(user_info.passwd)
 driver.findElement(By.id("submit")).click()

admin = Acconut(user="admin",passwd="123456")
guest = Acconut(user="guest",passwd="123456")
do_login(admin)
do_login(guest)

关键字驱动

actionobjectvalue
openwww.google.com
typeedit1自动化框架
clickAndWaitbtn1
verifyTextPresent自动化框架

上面是一个 Selenium自动化框架 的例子(QTP的实现效果也类似),简单说就是第一行是指明每一列你所要填写的内容,第一列表示你想干啥,第二列是被操作对象是谁,第三列是你对它干了啥。 对比上面的第一个脚本,可以看出关键字驱动进一步屏蔽了底层的实现细节,例如,你只需要clickAndWait那个btn1 ,而不需要知道clickAndWait,btn1 到底是个啥,以及它在哪里,你只需要填写表格。等你把一个个 test case 变成了一个个表格,把一个个step变成了一行行表格中的内容,基本上你的自动化测试就搞完了。其实仔细想想,关键字驱动出现的初衷还是为了降低自动化实施的门槛——因为tester不是所有人都懂开发,所以开发能力强的人把框架实现出来,原来那些只会写excel的 system tester填写表格就可以了。

穿上”马甲”的关键字
testcaseactionargument1argument2
create and login inCreateUseruser1right
Logininuser1right
VerifyLogin In
create and login in badCreateUseruser1wrong
Logininuser1wrong
VerifyAccess Denied

依旧不变的是“表格”,改变的是填写方式——原理就是自定义关键字,tester可以自己定义keyword然后“注册”到框架中,而那些依然没有学会基本编程技能的tester,继续用这些 keyword重复上个时代的事情——填写表格。 在这个关键字驱动中,test case 的每行都已经是一个完整的业务操作,以上面的“CreateUser” step 为例,framework希望的实现方式是tester通过python等4GL实现一个同名的function,这个function接受两个参数,分别是“user1 ”和“right”,再把这个function注册到framework中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值