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

    概念

    自动化测试模型可以看作自动化测试框架与工具设计的思想。

    线性模型

    线性脚本中每个脚本都相互独立,且不会产生其他依赖与调用,其实就是简单模拟用户某个操作流程产生的脚本。

    from  selenium import webdriver
    from time import sleep
    
    driver=webdriver.Chrome()
    driver.get("http://www.baidu.com")
    #根据id=kw定位元素,并输入python
    driver.find_element_by_id("kw").send_keys("python")
    sleep(1)
    #清除输入框内容
    driver.find_element_by_id("kw").clear()
    sleep(1)
    #根据name=kw定位元素,并输入python
    driver.find_element_by_name("wd").send_keys("python")
    
    sleep(2)
    #根据id=su定位元素,并点击
    driver.find_element_by_id("su").click()
    
    sleep(3)
    driver.quit()

    模块化驱动测试

    线性模型虽然每个用例都可以拿出来独立运行,但是用例之间重复代码很多,开发、维护成本高。其实把重复的操作代码封装为独立的公共模块,当用例执行时需要用到这部分,直接调用即可,这就是模块驱动的方式。比如登录系统、退出登录、截图函数等等。

    from selenium import webdriver
    from time import sleep
    
    class Login():
        def user_login(self,driver):
            driver.find_element_by_link_text('账号密码登录').click()
    
            driver.find_element_by_name('all').clear()
            driver.find_element_by_name('all').send_keys('51zxw')
    
            driver.find_element_by_name('pwd').clear()
            driver.find_element_by_name('pwd').send_keys('123456')
    
            driver.find_element_by_class_name('btn-primary').click()
    
        def user_logout(self,driver):
            driver.find_element_by_link_text('退出').click()
            sleep(2)
            driver.switch_to_alert().accept()
    
    if __name__=='__main__':
        driver = webdriver.Chrome()
        driver.get("https://passport.csdn.net/login")
        driver.implicitly_wait(10)
        Login().user_login(driver)
        Login().user_logout(driver)

    数据驱动测试

    模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了。
    接口自动化中测试用例和脚本的分离、测试不同的账号执行情况、操作的流程相同但是数据不同等等这些用数据驱动吧。
    数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
    装载数据的方式可以是列表、字典或是外部文件(txt、csv、xml、excel),目的就是实现数据和脚本的分离。

    from selenium import webdriver
    from time import sleep

    class Login():
    def user_login(self,driver,name,pwd):
    driver.find_element_by_link_text('账号密码登录').click()

    driver.find_element_by_name('all').clear()
    driver.find_element_by_name('all').send_keys('name')

    driver.find_element_by_name('pwd').clear()
    driver.find_element_by_name('pwd').send_keys('pwd')

    driver.find_element_by_class_name('btn-primary').click()

    def user_logout(self,driver):
    driver.find_element_by_link_text('退出').click()
    sleep(2)

    if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://passport.csdn.net/login")
    driver.implicitly_wait(10)
    login = Login()
    login.user_login(driver, "test_name", 'test_pwd')
    sleep(3)
    login.user_logout(driver)

    login.user_login(driver, "test_name2", 'test_pwd2')
    sleep(5)
    login.user_logout(driver)

    关键字驱动测试

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

    from selenium import webdriver
    import time
    
    class KeyTest():
    
        def __init__(self,br=None):
            if "IE" == br:
                self.driver = webdriver.Ie()
            elif "Firefox" == br:
                self.driver = webdriver.Firefox()
            else:
                self.driver = webdriver.Chrome()
    
        def open(self,url):
            self.driver.get(url)
    
        def send_keys(self,text):
            try:
                self.driver.find_element_by_id('kw').send_keys(text)
            except:
                print("click fail!")
                raise
    
    
        def click(self,id):
            try:
                self.driver.find_element_by_id(id).click()
            except:
                print("click fail!")
                raise
    
        def sleep(self,times):
            time.sleep(int(times))
            
        def quit(self):
            self.driver.quit()
            
    if __name__ == '__main__':
        dr = KeyTest()
        #打开浏览器
        dr.open('http://www.baidu.com')
        #输入"自动化测试"
        dr.send_keys('自动化测试')
        #点击搜索
        dr.click('su')
        dr.quit()
  • 相关阅读:
    一只小爬虫(转)
    easyui +ASP.NET 前后台乱码解决方法
    轻松搞定 easyui datagrid 二次加载的问题(转)
    easyui combobox默认选中项
    VS2010新建Web网站与新建Web应用程序的区别 (转)
    关于html+ashx开发中几个问题的解决方法 (转)
    如何使用.net访问Access数据库 (转)
    ACCESS的System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误
    Ajax 中正常使用jquery-easyui (转)
    会动的文字Marquee应用(转)
  • 原文地址:https://www.cnblogs.com/watery/p/13871799.html
Copyright © 2011-2022 走看看