美文网首页
自动化测试模型

自动化测试模型

作者: 小娟_bb93 | 来源:发表于2020-03-16 16:51 被阅读0次

    自动化测试模型可以看作自动化测试框架与工具设计的思想。自动化测试不仅仅是单纯写脚本运行就可以了,还需要考虑到如何使脚本运行效率提高,代码复用、参数化等问题。自动化测试模型分为四大类:线性模型、模块化驱动、数据驱动、关键字驱动

    • 线性模型
      通过录制或编写对应应用程序的操作步骤产生的线性脚本。单纯的来模拟用户完整的操作场景。线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程都脚本。
      优点:每个脚本相对独立,且不产生其他依赖和调用。
      缺点:用例之间存在重复的操作, 开发成本高。比如重复的用户登录和退出。维护成本高,由于重复的操作,当重复的操作发生改变时,则需要逐一进行脚本的修改。

    案例:在帝国软件主页自动登录和退出操作

    from selenium import webdriver
    from time import sleep
    
    '''
    线性模型:
    线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程的脚本。
    '''
    
    driver = webdriver.Chrome()
    
    driver.get("http://localhost/")
    
    # 登录账号
    driver.find_element_by_name('username').clear()
    driver.find_element_by_name('username').send_keys('xiaojuan')
    
    driver.find_element_by_name('password').clear()
    driver.find_element_by_name('password').send_keys('123456')
    
    driver.find_element_by_name('Submit').click()
    
    
    sleep(5)
    
    # 退出登录
    driver.find_element_by_link_text('退出').click()
    
    sleep(2)
    
    alert = driver.switch_to.alert
    alert.accept()
    
    driver.quit()
    
    
    • 模块化驱动
      模块化驱动,把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可。比如登录系统、退出登录、截图函数等等。
      优点:减少代码重复性,提高代码的复用性,可维护性高。
      缺点:虽然模块化的步骤相同,但是测试数据不同,仍需要编写重复的脚本。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。

    案例:封装登录模块及调用登录模块

    from selenium import webdriver
    from time import sleep
    
    
    class Login():
    
        def user_login(self, driver):
            # 登录账号
            driver.find_element_by_name('username').clear()
            driver.find_element_by_name('username').send_keys('xiaojuan')
    
            driver.find_element_by_name('password').clear()
            driver.find_element_by_name('password').send_keys('123456')
    
            driver.find_element_by_name('Submit').click()
    
        def user_logout(self, driver):
            # 退出登录
            driver.find_element_by_link_text('退出').click()
    
            sleep(2)
    
            alert = driver.switch_to.alert
            alert.accept()
    
    
    if __name__ == "__main__":
    #  以下脚本,当前模块运行时调用,当其它模块调用该模块时,不运行
        driver = webdriver.Chrome()
        driver.get("http://localhost/")
    
        driver.implicitly_wait(10)
    
        L = Login()
        L.user_login(driver)
        L.user_logout(driver)
    
    

    调用以上登录模块内容:

    from loginClass import *
    from selenium import webdriver
    
    
    driver = webdriver.Chrome()
    driver.get("http://localhost/")
    
    driver.implicitly_wait(10)
    
    Login().user_login(driver)
    Login().user_logout(driver)
    
    driver.quit()
    
    • 数据驱动(参数化)
      数据驱动,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。 装载数据的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。
      优点:通过这种方式,将数据和用例分离,可以快速增加相似测试,完成不同数据情况下的测试。

    案例:参数化封装登录模块,并实现不同账户的登录测试

    from selenium import webdriver
    from time import sleep
    
    
    class Login():
    
        def login(self,driver,username,password):
            # 登录账号
            driver.find_element_by_name('username').clear()
            driver.find_element_by_name('username').send_keys(username)
    
            driver.find_element_by_name('password').clear()
            driver.find_element_by_name('password').send_keys(password)
    
            driver.find_element_by_name('Submit').click()
    
    
        def logout(self,driver):
            # 退出登录
            driver.find_element_by_link_text('退出').click()
    
            sleep(2)
    
            alert = driver.switch_to.alert
            alert.accept()
    
    
    if __name__ == "__main__":
        driver = webdriver.Chrome()
        driver.get("http://localhost/")
    
        driver.implicitly_wait(10)
    
        Login().login(driver, 'xiaojuan1', '123456')
        Login().logout(driver)
    
        Login().login(driver, 'xiaojuan', '123456')
        Login().logout(driver)
    
        driver.quit()
    
    from loginClassParam import *
    from selenium import webdriver
    from time import sleep
    
    
    driver = webdriver.Chrome()
    
    driver.get("http://localhost/")
    
    driver.implicitly_wait(10)
    
    Login().login(driver, 'xiaojuan', '123456')
    Login().logout(driver)
    
    sleep(3)
    
    Login().login(driver, 'xiaojuan1', '123456')
    Login().logout(driver)
    
    sleep(2)
    
    driver.quit()
    
    • 关键字驱动
      通过关键字的改变引起测试结果的改变叫关键字驱动测试。 selenium IDE也是一种传统的关键字驱动的自动化工具,Robot Framework 是一个功能更强大的关键字驱动测试框架。

    现实中,使用比较方便的是模块化驱动与数据驱动相结合的形式,使用代码复用性高,可维护性好,同时也可以实现测试数据与用例分离的效果。

    相关文章

      网友评论

          本文标题:自动化测试模型

          本文链接:https://www.haomeiwen.com/subject/iqhnehtx.html