• 软件测试基础


    
    

    软件流程:需求分析-设计-编码-单元测试-集成测试-系统测试-验收测试

    单元测试:对程序中的单个子程序或独立功能的代码进行测试的过程

    集成测试:通过单元模块组装成系统或子系统,在进行测试,重点检查模块的接口是否正确

    系统测试:对整个产品进行测试

    验收测试:验证是否满足用户需求

    -------------------------------------------------------------------------------------------------------------------

    功能测试可以分为:逻辑功能测试、界面功能测试、易用性测试、安装测试、兼容性测试。。

    性能测试:利用自动化工具模拟多种正常,峰值以及异常负载条件对系统的各项性能指标进行测试

    自动化测试:以人为驱动的测试转化为机器的一种过程:功能自动化,性能自动化

    -----------------------------------------------------------------------------------------------------------------

    适合自动化的项目:

    1.任务明确,需求变更不频繁

    2.比较频繁的回归测试

    3.软件开发周期时间长

    4.脚本可以重复使用

    ----------------------------------------------------------------------------------------------------------------------

    自动化测试工具:

    QTP:提供强大的录制回放功能

    Roboot Framework :python编写的自动化测试框架

    selenium:用于web程序测试工具,支持多平台,多预览,多语言实现自动化

    --------------------------------------------------------------------------------------------------------------------

    selenium:开源。免费,支持多平台、多语言

    selenium IDE:Firefox的一个插件,支持录制和回放功能

    selenium Grid:可以再多台机器上和构建环境中进行多个测试事项:并发执行、通过一个主机统一控制用例在不同环境,不同机器下进行

    selenium RC:支持不同语言编写自动化脚本

    webdriver:是selenium RC的代替品,提供一系列方法对网站端进行操作

    ----------------------------------------------------------------------------------------------------------------------

    python +webdriver API

    1.最大化

    driver.maximize_window()

    2.最小化

    driver.minimize_window()

    3.设置浏览器尺寸

    driver.set_window_size(100,200)

    4.控制浏览器前进后退

    driver.back()

    driver.forward()

    driver.refresh()--刷新

    5.关闭

    driver.qult()

    --------------------------------------------------------------------------

    定位单个元素:

    id,name(优先使用)

    driver.find_element_by_id()

    driver.find_element_by_name()

    tag name ,class name

    driver.find_element_by_class_name()

    当class属性bg s_ge,中间有空格即为符合型,直选一个属性值就可以了如“s_ge”

    tag标签

    driver.find_element_by_tag_name("div")   #适用于层级定位,不靠谱,同一界面容易出现相同的tag name

    link text与partial link text

    b.find_element_by_partial_link_text("首页").click()  #模糊匹配

    -------------------------------------------------------------------------------------------------------------------

    xpath定位

    xpath是一种在XML文档中定位元素的语言

     1.绝对路径:driver.find_element_by_xpath("/html/body/div[2]/form/span/input").click()

    1.相对路径:b.find_element_by_xpath("//*[@id="u1"]/a[5]").click()

    //表示显示要查找的所有元素

    css定位

    driver.findElement(by.cssSelector( " input[value=’1’] " )).click(); 属性 value 值为 1 ,类型为 input

    操作测试对象

    clear()----清空元素

    send_keys()----输入文字

    click()  ----点击

    submit()---提交表单

    ---------------------------------------------------------------------------

    size:返回元素尺寸

    >>> t =b.find_element_by_id("kw").size
    >>> print(t)
    {'height': 22, 'width': 500}

    text:获取元素文本

    >>> t =b.find_element_by_id("su").text
    >>> print(t)

    attribute---获取元素属性值

    >>> t =b.find_element_by_id("su").get_attribute("typy")
    >>> print(t)

    is_displayed()

    >>> t =b.find_element_by_id("su").is_displayed()
    >>> print(t)
    True

    鼠标事件

    ActionChains 类鼠标操作常用方法

    context_click()   右击

    double_click()   双击

    drag_and_drop()   移动

    move_to_element()   鼠标悬停到一个元素上

    click_and_hold()  按下鼠表左键在一个元素上

    #先导入ActionChains包
    from selenium.webdriver.common.action_chains import ActionChains
    #元素定位
    context=b.find_element_by_link_text("地图") 
    #右键点击
    ActionChains(b).context_click(context).perform()
    ------------------------------------------------------
    #双击
    ActionChains(b).double_click(context).perform()
    -------------------------------------------------------
    #移动
    above=b.find_element_by_link_text("xxx") #目标路径
     ActionChains(b).drag_and_drop(context,abrove).perform()
    -----------------------------------------------------------
    #鼠标悬停
    ActionChains(b).move_to_element(context).perform()
    ----------------------------------------------------------------
    #鼠标左键
    ActionChains(b).click_and_hold(abrove).perform()

    键盘信息

    from selenium import webdriver
    #导入模块
    from selenium.webdriver.common.keys import Keys
    import time
    driver = webdriver.Chrome()
    
    driver.get("http://www.baidu.com")
    #输入字符串
    driver.find_element_by_id("kw").send_keys("selenium")
    time.sleep(3)
    #删除多输入的一个m
    driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
    #输入空格
    driver.find_element_by_id("kw").send_keys(Keys.SPACE)
    #CTROL+A全选
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
    ----------------------------------------------------------------------
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
    ------------------------------------------------------------------------
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
    ------------------------------------------------------------------------
    #回车
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)

    打印结果输出

    >>> print(driver.title)
    百度一下,你就知道
    >>> print(driver.current_url)
    https://www.baidu.com/

    --------------------------------------------------------------------------------------------------

    时间等待

    1.导入time---------sleep()设置固定时间

    2.implicity_wait():这是webdriver提供的一个超时等待,如果超出设置时间就会抛出异常

    3.WebDriverWait():在设置时间内,默认每隔一段时间检测一次,如果超时报错

    #格式
    from selenium.webdriver.support.ui import WebDriverWait
    
    WebDriverWait(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
    
    driver:Webdirver的驱动程序
    timeout:最长超时时间
    poll_frequency:休眠时间间隔
    ------------------------------------------------
    b = WebDriverWait(driver,30).until(x:x.find_element_by_id())
    
    WebDriverWait一般有until与until_not()方法配合使用
    until(method,message="")
    驱动一个参数,查看返回值为True
    until_not(method,message="")
    驱动一个参数,查看返回值为Flase

    定位一组元素

    find_elements

    #查询所以标签是input的元素
    b = find_elements_by_tag_name("input")
    for s in b:
        if s.get_attribute("type") == "check":
                s.click()

    层级定位

    当页面有很多基本属性相同时,先定位父级再定位子集

    b = find_element_by_id("kw").find_element_by_link_text("kw").click()

    定位frame中对象

    在 web 应用中经常会出现 frame 嵌套的应用,假设页面上有 A、B 两个 frame,其中 B 在 A 内,那么
    定位 B 中的内容则需要先到 A,然后再到 B。
    switch_to_frame 方法可以把当前定位的主体切换了 frame 里。怎么理解这句话呢?我们可以从 frame
    的实质去理解。frame 中实际上是嵌入了另一个页面,而 webdriver 每次只能在一个页面识别,因此才需要
    用 switch_to.frame 方法去获取 frame 中嵌入的页面,对那个页面里的元素进行定位。

    #coding=utf-8
    from selenium import webdriver
    import time
    import os
    driver = webdriver.Firefox()
    file_path = 'file:///' + os.path.abspath('frame.html')
    driver.get(file_path)
    driver.implicitly_wait(30)
    #先找到到 ifrome1(id = f1)
    driver.switch_to_frame("f1")
    #再找到其下面的 ifrome2(id =f2
    driver.switch_to_frame("f2")
    #下面就可以正常的操作元素了
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    time.sleep(3)
    driver.quit()

    Alter弹窗处理;

    switch_to_alter()切到alter

    accept()确认

    dismiss()取消

    send_keys()有输入框时才能使用

    浏览器多窗口处理

    要想在多个窗口之间切换,首先要获得每一个窗口的唯一标识符号(句柄)。通过获得的句柄来区别
    分不同的窗口,从而对不同窗口上的元素进行操作

    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com/")
    #获得当前窗口
    nowhandle=driver.current_window_handle
    #打开注册新窗口
    driver.find_element_by_name("tj_reg").click()
    #获得所有窗口
    allhandles=driver.window_handles
    #循环判断窗口是否为当前窗口
    for handle in allhandles:
    if handle != nowhandle:
    driver.switch_to_window(handle)
    print 'now register window!'
    #切换到邮箱注册标签
    driver.find_element_by_id("mailRegTab").click()
    time.sleep(5)
    driver.close()
    #回到原先的窗口
    driver.switch_to_window(nowhandle)
    driver.find_element_by_id("kw").send_keys(u"注册成功!")
    time.sleep(3)
    driver.quit()

    在本例中所有用到的新方法:
    current_window_handle
    获得当前窗口句柄
    返回的所有窗口的句柄到当前会话
    switch_to_window()
    用于处理多窗口操作的方法,与我们前面学过的 switch_to_frame() 是类似,switch_to_window()用于
    处理多窗口之前切换,switch_to_frame() 用于处理多框架的切换。
    close()
    如果你足够细心会发现我们在关闭“注册页”时用的是 close()方法,而非 quit();close()用于关闭当前
    窗口,quit()用于退出驱动程序并关闭所有相关窗口。

    下拉框要想定

    位下拉框中的内容,首先需要定位到下拉框;这样的二次定位

    上传文件

    文件上传操作也比较常见功能之一,上传功能操作 webdriver 并没有提供对应的方法,关键上传文
    件的思路。
    上传过程一般要打开一个系统的 window 窗口,从窗口选择本地文件添加。所以,一般会卡在如何操
    作本地 window 窗口。其实,上传本地文件没我们想的那么复杂;只要定位上传按钮,通 send_keys 添加
    本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。下面通地例子演示操作过

    滚动条

    用于标识滚动条位置的代码

    <body onload= "document.body.scrollTop=0 ">
    <body onload= "document.body.scrollTop=100000 ">

    -------------------------------------------------------------

    #coding=utf-8
    from selenium import webdriver
    import time
    #访问百度
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    #搜索
    driver.find_element_by_id("kw").send_keys("selenium")
    driver.find_element_by_id("su").click()
    time.sleep(3)
    #将页面滚动条拖到底部 js
    ="var q=document.documentElement.scrollTop=10000" driver.execute_script(js) time.sleep(3) #将滚动条移动到页面的顶部 js_="var q=document.documentElement.scrollTop=0" driver.execute_script(js_) time.sleep(3) driver.quit()

    cookie 

    有时候我们需要验证浏览器中是否存在某个 cookie,因为基于真实的 cookie 的测试是无法通过白盒
    和集成测试完成的。webdriver 可以读取、添加和删除 cookie 信息。
    webdriver 操作 cookie 的方法有:
     get_cookies() 获得所有 cookie 信息
     get_cookie(name) 返回特定 name 有 cookie 信息
     add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
     delete_cookie(name) 删除特定(部分)的 cookie 信息

    #coding=utf-8
    from selenium import webdriver
    import time
    driver = webdriver.Firefox()
    driver.get("http://www.youdao.com")
    #向 cookie 的 name 和 value 添加会话信息。
    driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
    #遍历 cookies 中的 name 和 value 信息打印,当然还有上面添加的信息
    for cookie in driver.get_cookies():
    print "%s -> %s" % (cookie['name'], cookie['value'])
    ##### 下面可以通过两种方式删除 cookie #####
    # 删除一个特定的 cookie
    driver.delete_cookie("CookieName")
    # 删除所有 cookie
    driver.delete_all_cookies()
    time.sleep(2)
    driver.close()
  • 相关阅读:
    intel dpdk在ubuntu12.04中測试testpmd、helloworld程序
    经常使用的MySQL语句整理
    韩国IT业是怎么走向国际我们须要学习什么
    【QT】C++ GUI Qt4 学习笔记3
    【编程之美】2.18 数组分割
    【编程之美】2.8 找符合条件的整数
    【QT】C++ GUI Qt4 学习笔记2
    【QT】C++ GUI Qt4 学习笔记1
    【编程之美】2.7求最大公约数
    【编程之美】2.6 精确表达浮点数
  • 原文地址:https://www.cnblogs.com/wzc27229/p/11295114.html
Copyright © 2020-2023  润新知