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


    一,线性测试
    1.概念:

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

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

    2.优点:

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

    3.缺点:

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

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

    4.线性测试实例

    用户登录

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

    1. # coding=utf-8
    2. '''
    3. Created on 2016-7-20
    4. @author: Jennifer
    5. Project:简单元素操作登录126邮箱,元素的clear(),send_keys(),click()操作
    6. 在定位的时候发现有些元素定位不到,最后发现有iframe,frame中实际上是嵌入了另一个页面。
    7. 如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值"),
    8. 这是最理想的方法,也是最简单好用的方法。
    9. '''
    10. from selenium import webdriver
    11. import time
    12. driver=webdriver.Firefox()
    13. driver.get(r'http://www.126.com/') #字符串加r,防止转义。
    14. time.sleep(3)
    15. print '开始登录邮箱'
    16. try:
    17. assert '126' in driver.title #title是变量,不能title()
    18. except AssertionError:
    19. print "error:网址输入不正确"
    20. else:
    21. print "记录日志:网址输入正确"
    22. # driver.switch_to_frame('x-URS-iframe') #跳转到iframe框架
    23. driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架
    24. username=driver.find_element_by_name('email')
    25. username.clear()
    26. username.send_keys('Jennifer···')
    27. time.sleep(0.1)
    28. userpasswd=driver.find_element_by_name('password')
    29. userpasswd.clear()
    30. userpasswd.send_keys('·····')
    31. time.sleep(0.1)
    32. loginbt=driver.find_element_by_id('dologin')
    33. loginbt.click()
    34. time.sleep(3)
    35. try:
    36. assert '网易邮箱' in driver.title
    37. except AssertionError:
    38. print '邮箱登录失败'
    39. else:
    40. print '邮箱登录成功'
    41. finally:
    42. #操作:收信,写信等操作,暂不写例子了
    43. driver.quit()
    44. print '测试结束'

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

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

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

    2.优点:

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

    3.缺点:

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

    4.实例

    公共模块:对登陆和退出进行模块化封装

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

    1. # coding=utf-8
    2. '''
    3. Created on 2016-7-27
    4. @author: Jennifer
    5. Project:模块化驱动测试实例,将重复的登录脚本放在单独的脚本中供其他用例调用
    6. '''
    7. import time
    8. class Login():
    9. def user_login(self,driver):
    10. username=driver.find_element_by_name('email')
    11. username.clear()
    12. username.send_keys('username')
    13. time.sleep(0.1)
    14. userpasswd=driver.find_element_by_name('password')
    15. userpasswd.clear()
    16. userpasswd.send_keys('password')
    17. time.sleep(0.1)
    18. loginbt=driver.find_element_by_id('dologin')
    19. loginbt.click()
    20. time.sleep(3)
    21. def user_logout(self,driver):
    22. driver.find_element_by_link_text(u'退出').click()
    23. driver.quit()

    写信用例:以下代码用了各种定位方法,值得学习,后续再重新对这部分进行总结

    直接调用模块的登录和退出方法。

    收信用例:

    直接调用模块的登录和退出方法。

    1. # coding=utf-8
    2. '''
    3. Created on 2016-7-27
    4. @author: Jennifer
    5. Project:接收邮件
    6. '''
    7. from selenium import webdriver
    8. import time
    9. from test_5_2_public import Login
    10. driver=webdriver.Firefox()
    11. driver.implicitly_wait(30)
    12. driver.get(r'http://www.126.com/') #字符串加r,防止转义。
    13. time.sleep(3)
    14. driver.switch_to.frame('x-URS-iframe')
    15. #调用登录模块
    16. Login().user_login(driver)
    17. time.sleep(10)
    18. #接收邮件
    19. #点击收信
    20. #以下定位是查找span标签有个文本(text)包含(contains)'收 信' 的元素,该定位方法重要
    21. driver.find_element_by_xpath("//span[contains(text(),'收 信')]").click()
    22. #校验是否进入收件箱,没报错即进入
    23. try:
    24. #点击其中一封邮件
    25. driver.find_element_by_xpath("//div[@sign='letter']").click()
    26. except Exception as e:
    27. print e
    28. else:
    29. print '成功收信'
    30. #调用退出模块
    31. Login().user_logout(driver)

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

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

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

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

    2.优点:

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

    3.缺点

    暂无

    4.实例

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

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

    1. # coding=utf-8
    2. '''
    3. Created on 2016-7-28
    4. @author: Jennifer
    5. Project:数据驱动测试,数据保存在excel中,需要导入xlrd模块
    6. '''
    7. from selenium import webdriver
    8. import time
    9. import xlrd
    10. #将用户密码表格转换为用户密码列表
    11. def exceltolist(excelfile,colnameindex=0,by_index=0):
    12. excelfile=xlrd.open_workbook(excelfile) #打开excel表格
    13. # table = excelfile.sheets()[by_index] #默认获取sheet0
    14. table = excelfile.sheet_by_index(by_index)#默认获取sheet0
    15. nrows=table.nrows #获取excel的sheet0页的行数
    16. colnames=table.row_values(colnameindex) #默认获取第0行的列表数据:name和password两个值
    17. list =[] #建一个空列表,用来存放用户密码字典
    18. for rownum in range(1,nrows): #初始行为0,从第1行开始
    19. row = table.row_values(rownum) #获取某一行的列表数据
    20. if row:
    21. app = {} #建立一个空字典,存放某一组用户密码数据
    22. for i in range(len(colnames)): #目前是2
    23. app[colnames[i]] = row[i] #字典新增数据:循环两次,字典新增两对key-value
    24. list.append(app) #将新增的字典数据,添加到列表数据中
    25. return list
    26. def Login():
    27. file=r'D:\pythontest\rightpassword\userpassword.xls'
    28. userlist=exceltolist(file)
    29. for i in range(len(userlist)):
    30. driver=webdriver.Firefox()
    31. driver.get(r'http://www.126.com/') #字符串加r,防止转义。
    32. time.sleep(3)
    33. driver.switch_to.frame('x-URS-iframe') #同上面语句一样,跳转到iframe框架
    34. username=driver.find_element_by_name('email')
    35. username.clear()
    36. username.send_keys(userlist[i]['name'])
    37. time.sleep(0.1)
    38. userpasswd=driver.find_element_by_name('password')
    39. userpasswd.clear()
    40. userpasswd.send_keys(userlist[i]['password'])
    41. time.sleep(0.1)
    42. loginbt=driver.find_element_by_id('dologin')
    43. loginbt.click()
    44. time.sleep(3)
    45. try:
    46. assert '网易邮箱' in driver.title
    47. except AssertionError:
    48. print '用户%s邮箱登录失败'%(userlist[i]['name'])
    49. else:
    50. print '用户%s邮箱登录成功'%(userlist[i]['name'])
    51. finally:
    52. driver.quit()
    53. if __name__=='__main__':
    54. Login()

    四,关键字驱动测试
    1.概念:

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

    2.优点

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

    文档获取方式:

    这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

    以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

  • 相关阅读:
    数据湖:流计算处理框架Flink概述
    还在为sql注入眼花缭乱的过滤而烦恼?一文教您快速找出所有过滤内容
    Leetcode 50.Pow(x,n)
    王杰国庆作业day6
    html使用天地图写一个地图列表
    Linux安装部署oracle数据库
    [极客大挑战 2019]Http
    HTML5 SVG
    C++ Builder XE 用sndPlaySound写的简单的语音播报算法
    亚马逊怎么下单更真实
  • 原文地址:https://blog.csdn.net/2301_79535544/article/details/132640129