zoukankan      html  css  js  c++  java
  • (三十四)什么是自动化测试模型之模块化驱动测试实例

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      通过对自动化测试模型的介绍,我们了解了模块化设计的有点。本篇文章我们就以具体的例子来介绍模块的具体应用,当然,使用它的基础是Python语言中函数与类方法的调用。下面以126邮箱为例。

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.126.com")
    
    #登录
    driver.find_element_by_id('idInput').clear()
    driver.find_element_by_id('idInput').send_keys('username')
    driver.find_element_by_id('pwdInput').clear()
    driver.find_element_by_id('pwdInput').send_keys('password')
    
    driver.find_element_by_id('loginBtn').click()
    
    #收信、写信、删除信件等操作
    #...
    
    #退出
    driver.find_element_by_link_text('退出').click()
    driver.quit()

      从126邮箱业务浏览分析,邮箱所提供的功能都需要登录之后进行,例如收信、写信、删除信件等擦欧总。对于手工来说测试人员在执行用例的过程中可以一次登录后验证多个功能在退出,但自动化测试的执行有别于手工测试的执行,需要保持测试用例的独立性和完整性,所以每一条用例在执行时都需要登录和退出操作。这个时候就可以把登录和退出的操作封装为公共函数。当每一条用例需要登录/退出时,只需要调用它们即可,从而消除代码重复,提高脚本的可维护性。

      下面对登录和退出进行模块封装。

    from selenium import webdriver
    
    #登录
    def login():
        driver.find_element_by_id('idInput').clear()
        driver.find_element_by_id('idInput').send_keys('username')
        driver.find_element_by_id('pwdInput').clear()
        driver.find_element_by_id('pwdInput').send_keys('password')
        driver.find_element_by_id('loginBtn').click()
    
    #退出
    def logout():
        driver.find_element_by_link_text('退出').click()
        driver.quit()
        
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.126.com")
    login()#调用登录模块
    
    #收信、写信、删除信件等操作
    #...
    
    logout()#调用退出模块

      现在将登录的操作步骤封装到login()函数中,把退出的操作封装到logout()函数中,对于用例本身只需要调用这个函数即可,可以把更多的注意力放到用例本身的操作步骤中。

      当然,如果只是把操作步骤封装成函数并没简单太多,我们需要将其放到单独的脚本文件中供其他用例调用。

      新建一个python文件public.py

    from selenium import webdriver
    class Login():
        #登录
        def user_login(self,driver):
            driver.find_element_by_id('idInput').clear()
            driver.find_element_by_id('idInput').send_keys('username')
            driver.find_element_by_id('pwdInput').clear()
            driver.find_element_by_id('pwdInput').send_keys('password')
            driver.find_element_by_id('loginBtn').click()
        
        #退出
        def user_logout(self,driver):
            driver.find_element_by_link_text('退出').click()
            driver.quit()

      当函数被独立到单独的脚本文件中时做了一点调整,主要是为函数增加了浏览器驱动的入参。因为函数实现的操作需要通过浏览器驱动driverdriver需要通过具体调用的用例给定。

      测试用例文件mailTest.py

    from selenium import webdriver
    from public import Login
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.126.com")
    Login().user_login()#调用登录模块
    
    #收信、写信、删除信件等操作
    #...
    
    Login().user_logout()#调用退出模块

      首先,需要导入当前目录下public.py文件中的login()类,在需要的位置调用类中的user_login()user_logout()函数。这样对于每个用例的编写与维护就方便了很多。

  • 相关阅读:
    【NOIP 2003】 加分二叉树
    【POJ 1655】 Balancing Act
    【HDU 3613】Best Reward
    【POJ 3461】 Oulipo
    【POJ 2752】 Seek the Name, Seek the Fame
    【POJ 1961】 Period
    【POJ 2406】 Power Strings
    BZOJ3028 食物(生成函数)
    BZOJ5372 PKUSC2018神仙的游戏(NTT)
    BZOJ4836 二元运算(分治FFT)
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11497424.html
Copyright © 2011-2022 走看看