四种自动化测试模型实例及优缺点

一,线性测试
1.概念:

通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。

(操作,重复操作,数据)都混合在一起。

2.优点:

每个脚本相对独立,且不产生其他依赖和调用。

3.缺点:

开发成本高,用例之间存在重复的操作。比如重复的用户登录和退出。

维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改。

4.线性测试实例

用户登录以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了。



# coding=utf-8

'''

Created on 2016-7-20

@author: Jennifer

Project:简单元素操作登录126邮箱,元素的clear(),send_keys(),click()操作

在定位的时候发现有些元素定位不到,最后发现有iframe,frame中实际上是嵌入了另一个页面。

如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值"),

这是最理想的方法,也是最简单好用的方法。

'''

from selenium import webdriver

import time


driver=webdriver.Firefox()

driver.get(r'http://www.126.com/') #字符串加r,防止转义。

time.sleep(3)


print '开始登录邮箱'


try:

assert '126' in driver.title #title是变量,不能title()

except AssertionError:

print "error:网址输入不正确"

else:

print "记录日志:网址输入正确"


# driver.switch_to_frame('x-URS-iframe') #跳转到iframe框架

driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架

username=driver.find_element_by_name('email')

username.clear()

username.send_keys('Jennifer···')

time.sleep(0.1)


userpasswd=driver.find_element_by_name('password')

userpasswd.clear()

userpasswd.send_keys('·····')

time.sleep(0.1)


loginbt=driver.find_element_by_id('dologin')

loginbt.click()

time.sleep(3)


try:

assert '网易邮箱' in driver.title

except AssertionError:

print '邮箱登录失败'

else:

print '邮箱登录成功'


finally:

#操作:收信,写信等操作,暂不写例子了

driver.quit()


print '测试结束'

二,模块化驱动测试
1.概念:

将重复的操作独立成功共模块,当用例执行过程中需要用到这一模块操作时则被调用。

操作+(重复操作,数据)混合在一起。

2.优点:

由于最大限度消除了重复,从而提高了开发效率和提高测试用例的可维护性。

3.缺点:

虽然模块化的步骤相同,但是测试数据不同。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。

4.实例

公共模块:对登陆和退出进行模块化封装以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了。



# coding=utf-8

'''

Created on 2016-7-27

@author: Jennifer

Project:模块化驱动测试实例,将重复的登录脚本放在单独的脚本中供其他用例调用

'''

import time

class Login():

def user_login(self,driver):

username=driver.find_element_by_name('email')

username.clear()

username.send_keys('username')

time.sleep(0.1)


userpasswd=driver.find_element_by_name('password')

userpasswd.clear()

userpasswd.send_keys('password')

time.sleep(0.1)


loginbt=driver.find_element_by_id('dologin')

loginbt.click()

time.sleep(3)


def user_logout(self,driver):

driver.find_element_by_link_text(u'退出').click()

driver.quit()

写信用例:以下代码用了各种定位方法,值得学习,后续再重新对这部分进行总结直接调用模块的登录和退出方法。



# coding=utf-8

'''

Created on 2016-7-27

@author: Jennifer

Project:发送邮件

'''

from selenium import webdriver

import time


from test_5_2_public import Login #由于公共模块文件命名为test_5_2_public

driver=webdriver.Firefox()

driver.implicitly_wait(30)

driver.get(r'http://www.126.com/') #字符串加r,防止转义。

time.sleep(3)

driver.switch_to.frame('x-URS-iframe')

#调用登录模块

Login().user_login(driver)

time.sleep(10)

#发送邮件

#点击发件箱

#_mail_component_61_61是动态id,所以不能用于定位

#driver.find_element_by_css_selector('#_mail_component_61_61>span.oz0').click()

#不能加u"//span[contains(text(),u'写 信')]",否则定位不到。

#以下定位是查找span标签有个文本(text)包含(contains)'写 信' 的元素,该定位方法重要

driver.find_element_by_xpath("//span[contains(text(),'写 信')]").click()

#填写收件人

driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys(r'xxx@163.com')

#填写主题

#通过and连接更多的属性来唯一地标志一个元素

driver.find_element_by_xpath("//input[@class='nui-ipt-input' and @maxlength='256']").send_keys(u'自动化测试')

#填写正文

#通过switch_to_frame()将当前定位切换到frame/iframe表单的内嵌页面中

driver.switch_to_frame(driver.find_element_by_class_name('APP-editor-iframe'))

#在内嵌页面中定位邮件内容位置

emailcontext=driver.find_element_by_class_name('nui-scroll')

#填写邮件内容

emailcontext.send_keys(u'这是第一封自动化测试邮件')

#通过switch_to().default_content()跳回最外层的页面

#注:不要写成switch_to().default_content(),否则报AttributeError: SwitchTo instance has no __call__ method

driver.switch_to.default_content()

#driver.switch_to.parent_frame()

#点击发送

time.sleep(3)

#有可能存在元素不可见(查看元素是灰色的),会报ElementNotVisibleException错误

#包含发送二字的元素很多,所以还得再加上其他限制

#sendemails=driver.find_element_by_xpath("//span[contains(text(),'发送')]")

sendemails=driver.find_element_by_xpath("//span[contains(text(),'发送') and @class='nui-btn-text']")

time.sleep(3)


#校验邮件是否发送成功

try:

assert '发送成功' in driver.page_source

except AssertionError:

print '邮件发送成功'

else:

print '邮件发送失败'


#调用退出模块

Login().user_logout(driver)

收信用例:直接调用模块的登录和退出方法。



# coding=utf-8

'''

Created on 2016-7-27

@author: Jennifer

Project:接收邮件

'''

from selenium import webdriver

import time


from test_5_2_public import Login

driver=webdriver.Firefox()

driver.implicitly_wait(30)

driver.get(r'http://www.126.com/') #字符串加r,防止转义。

time.sleep(3)

driver.switch_to.frame('x-URS-iframe')

#调用登录模块

Login().user_login(driver)

time.sleep(10)

#接收邮件

#点击收信

#以下定位是查找span标签有个文本(text)包含(contains)'收 信' 的元素,该定位方法重要

driver.find_element_by_xpath("//span[contains(text(),'收 信')]").click()


#校验是否进入收件箱,没报错即进入

try:

#点击其中一封邮件

driver.find_element_by_xpath("//div[@sign='letter']").click()

except Exception as e:

print e

else:

print '成功收信'


#调用退出模块

Login().user_logout(driver)

三,数据驱动测试
1.概念:

它将测试中的测试数据和操作分离,数据存放在另外一个文件中单独维护。

通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。

操作+重复操作+数据分开。

2.优点:

通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试。

3.缺点

暂无

4.实例

从excel表格读取用户名密码,登录邮箱。

以下的用户名密码到时候自己去申请,就不将笔者的用户密码贴出来了。


# coding=utf-8

'''

Created on 2016-7-28

@author: Jennifer

Project:数据驱动测试,数据保存在excel中,需要导入xlrd模块

'''

from selenium import webdriver

import time

import xlrd


#将用户密码表格转换为用户密码列表

def exceltolist(excelfile,colnameindex=0,by_index=0):

excelfile=xlrd.open_workbook(excelfile) #打开excel表格

# table = excelfile.sheets()[by_index] #默认获取sheet0页

table = excelfile.sheet_by_index(by_index)#默认获取sheet0页

nrows=table.nrows #获取excel的sheet0页的行数

colnames=table.row_values(colnameindex) #默认获取第0行的列表数据:name和password两个值

list =[] #建一个空列表,用来存放用户密码字典

for rownum in range(1,nrows): #初始行为0,从第1行开始

row = table.row_values(rownum) #获取某一行的列表数据

if row:

app = {} #建立一个空字典,存放某一组用户密码数据

for i in range(len(colnames)): #目前是2

app[colnames[i]] = row[i] #字典新增数据:循环两次,字典新增两对key-value

list.append(app) #将新增的字典数据,添加到列表数据中

return list


def Login():

file=r'D:\pythontest\rightpassword\userpassword.xls'

userlist=exceltolist(file)

for i in range(len(userlist)):

driver=webdriver.Firefox()

driver.get(r'http://www.126.com/') #字符串加r,防止转义。

time.sleep(3)


driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架

username=driver.find_element_by_name('email')

username.clear()

username.send_keys(userlist[i]['name'])

time.sleep(0.1)


userpasswd=driver.find_element_by_name('password')

userpasswd.clear()

userpasswd.send_keys(userlist[i]['password'])

time.sleep(0.1)


loginbt=driver.find_element_by_id('dologin')

loginbt.click()

time.sleep(3)

try:

assert '网易邮箱' in driver.title

except AssertionError:

print '用户%s邮箱登录失败'%(userlist[i]['name'])

else:

print '用户%s邮箱登录成功'%(userlist[i]['name'])


finally:

driver.quit()



if __name__=='__main__':

Login()

四,关键字驱动测试

1.概念:

通过关键字的改变从而驱动自动化测试的执行,最终引起测试结果的改变。关键字驱动工具有:RobotFramework(RIDE)。

2.优点

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值