zoukankan      html  css  js  c++  java
  • 自动化测试模型

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

    1、线性模型

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

    '''
    案例:自动登录与退出操作
    '''
    
    from selenium import webdriver
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get_cookie("http://localhot/")
    
    # 输入用户名
    driver.find_element_by_name('username').clear()
    driver.find_element_by_name('username').send_keys('zxw')
    
    # 输入密码
    driver.find_element_by_name('password').clear()
    driver.find_element_by_name('password').send_keys('123456')
    
    # 登录
    driver.find_element_by_name('Submit').click()
    sleep(3)
    
    # 退出
    driver.find_element_by_link_text('退出').click()
    driver.switch_to.alert().accept()
    sleep(3)
    
    driver.quit()
    

    2、模块化驱动测试

    线性模型虽然每个用例都可以拿来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。
    操作+(重复操作,数据)混合在一起。
    优点:由于最大限度消除了重复,从而提高了开发效率和提高测试用例的可维护性。
    缺点:虽然模块化的步骤相同,但是测试数据不同。比如说重复的登录模块,如果登录用户不同,依旧要重复编写登录脚本。

    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('zxw')
    
            # 输入密码
            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(3)
            driver.switch_to.alert().accept()
    
    
    if __name__ == '__main__':
        driver = webdriver.Firefox()
        driver.get("http://127.0.0.1")
        # 隐式等待
        driver.implicitly_wait(10)
    
        Login.user_login(driver)
        Login.user_logout(driver)
    
    # 调用登录模块
    from LoginClass import *
    
    driver = webdriver.Firefox()
    driver.get("http://localhost/")
    driver.implicitly_wait(10)
    
    Login().user_login(driver)
    Login.user_logout(driver)
    

    3、数据驱动测试(参数化)

    模块驱动测试等模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不狠适合了。数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。装载数据的方式可以使列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。
    操作+重复操作+数据分开。
    优点:通过这种方式,将数据和重复操作分开,可以快速增加相似测试,完成不同数据情况下的测试。

    from selenium import webdriver
    from time import sleep
    
    
    class Login():
        def user_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 user_logout(self, driver):
            # 退出
            driver.find_element_by_link_text('退出').click()
            sleep(3)
            driver.switch_to.alert().accept()
    
    
    if __name__ == '__main__':
        driver = webdriver.Firefox()
        driver.get("http://127.0.0.1")
        # 隐式等待
        driver.implicitly_wait(10)
    
        Login.user_login(driver, "test", "123456")
        Login.user_logout(driver)
    
    # 调用登录模块
    from LoginClass_para import *
    
    driver = webdriver.Firefox()
    driver.get("http://localhost/")
    driver.implicitly_wait(10)
    
    Login().user_login(driver, "test", "123456")
    Login.user_logout(driver)
    

    4、关键字驱动测试

    通过关键字的改变从而驱动自动化测试的执行,最终引起测试结果的改变。selenium IDE是一种传统的关键字驱动的自动化工具,Robot Framework是一个功能更强大的关键字驱动测试框架。

  • 相关阅读:
    ECSHOP热门搜索关键词随机显示
    最全面的常用正则表达式大全
    ToString()、Convert.ToString()、(string)、as string 的区别
    RabbitMQ Server的安装、配置及常用命令
    RabbitMQ 学习资料
    使用dynamic来简化反射实现
    C#4.0中的dynamic关键字和ExpandoObject对象
    Erlang
    RestSharp使用备忘
    mysql group by的特殊性
  • 原文地址:https://www.cnblogs.com/xidian2014/p/10422736.html
Copyright © 2011-2022 走看看