码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-07-28 13:58:40      阅读:1040      评论:0      收藏:0      [点我收藏+]

标签:

一,线性测试

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(rhttp://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(Jenniferhlf)
    time.sleep(0.1)
    
    userpasswd=driver.find_element_by_name(password)
    userpasswd.clear()
    userpasswd.send_keys(04870487OK_)
    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(rhttp://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(rxxx@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(rhttp://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.实例

未完待续

 

四,关键字驱动测试

1.概念:

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

2.优点

未完待续

 

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

标签:

原文地址:http://www.cnblogs.com/yufeihlf/p/5714286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!