web自动化基础

一.自动化测试
大中型项目或长期项目可以采用自动化测试:
自动化功能测试:
    1)单元测试
         程序员搞定
    2)功能测试
    3)接口测试
自动化性能测试:
Loadrunner、Jmeter等,对软件进行压力测试、负载测试、强度测试等
测试一个web站点的服务能力,需要模拟上千上万的请求
二.自动化测试条件和使用范围
使用自动化的前提条件:
    1.手动测试已完成,不影响后期进度逐渐实现自动化
    2.项目周期长,重复性大
    3.需求稳定,项目变动不大
    4.自动化脚本不复杂
    5.可重复利用
使用自动化测试的场景:
    1.频繁的回归测试
    2.冒烟测试
    3.互联网迭代
    4.需求变化不大,应用频繁
    5.性能测试
三.web自动化常用工具
    1.QTP
    2.Selenium
    3.RFT
    4.Watir
    5.Sahi
四.元素定位
      工具:CSS选择器,xpath

补充:

//*[text()=“x’x’x”] 文本内容是xxx的元素

//*[starts-with(@attribute,’xxx’)] 属性以xxx开头的元素

//*[contains(@attribute,’xxxxx’)] 属性中含有xxx的元素

//*[@attribute1=value1 and @attribute2=value2] 同时有两个属性值的元素

五.Selenium自动化测试框架

环境配置:

1.python3.6

2.Firefox35

3.selenium 2/3

4.浏览器驱动--必装

chrome

Phantomjs

ie

Firefox

seleniumAPI基础:

# 库的导入 from selenium import webdriver #创建浏览器对象 driver = webdriver.Firefox() #最大化 driver.maximize_window() #获取浏览器尺寸 driver.get_window_size() #设置浏览器尺寸 driver.set_window_size(700, 800) # 获取浏览器位置 driver.get_window_position() # 设置浏览器位置 driver.set_window_position(20,30) # 请求某个url对应的响应 driver.get("http://www.baidu.com") # 刷新页面操作 driver.refresh() # 回退到之前的页面 driver.back() # 前进到之后的页面 driver.forward() # 关闭当前标签/窗口 driver.close() # 关闭所有标签/窗口 driver.quit()

断言:

获取断言信息

current_url 获取当前访问页面url title 获取当前浏览器标题 get_screenshot_as_png() 保存图片 get_screenshot_as_file(file)直接保存 page_source 网页源码

元素定位:

直接调用型(推荐方式):

driver.find_element_by_xxx(value)

使用By类型(需要导入By):

from selenium.webdriver.common.by import By

driver.find_element(By.xxx,value)

定位一组元素:

driver.find_elements_by_xxx(value)

元素操作:element = driver.find_element_by_xxx(value)
点击和输入:
element.click()             点击操作
element.clear()            清空输入框
element.send_keys(data)    输入数据
element.submit()  提交
获取元素信息:
element.text获取文本内容(既开闭标签之间的内容)
element.get_attribute(value)获取属性值(获取element元素的value属性的值)
element.size获取元素尺寸(了解)
element.is_dispalyed()获取元素是否可见(了解)
            
多标签之间的切换:
获取所有窗口的句柄handles = driver.window_handlers()
通过窗口的句柄进入的窗口
    driver.switch_to_window(handles[n])
    driver.switch_to.window(handles[n])

多表单切换:
实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
直接使用id值切换进表单
    driver.switch_to.frame(value)/driver.switch_to_frame(value)
定位到表单元素,再切换进入
    el = driver.find_element_by_xxx(value)
    driver.switch_to.frame(el)/driver.switch_to_frame(el)
跳回最外层的页面
driver.switch_to.default_content()
跳回上层的页面
driver.switch_to.parent_frame()

鼠标和键盘操作:
鼠标操作:
导入动作链类,动作链可以储存鼠标的动作,并一起执行
    from selenium.webdriver import ActionChains
    ActionChains(driver)

 执行ActionChains中储存的所有动作
    perform()
        
 鼠标右击
    el = driver.find_element_by_xxx(value)
    context_click(el)
    对el执行右击
 双击操作
    el = driver.find_element_by_xxx(value)
    ActionChains(driver).double_click(el).perform()
    
 鼠标悬停
    el = driver.find_element_by_xxx(value)
     ActionChains(driver).move_to_element(el).perform()

键盘操作:
导入
from selenium.webdriver.common.key import Key
常用键盘操作
    send_keys(Keys.BACK_SPACE)     删除键(BackSpace)    
    send_keys(Keys.SPACE)         空格键(Space)        
    send_keys(Keys.TAB)             制表键(Tab)    
    send_keys(Keys.ESCAPE)         回退键(Esc)    
    send_keys(Keys.ENTER)         回车键(Enter)
    send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’)     复制(Ctrl+C)    
    send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)    
    send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)
    send_keys(Keys.F1)             键盘 F1
    ……
    send_keys(Keys.F12)             键盘 F12

弹出框操作:
 进入到弹出框中
    driver.switch_to.alert()
接收警告
    accept()
解散警告
    dismiss()
发送文本到警告框
    send_keys(data)

下拉框操作:
 导入Select类
    from selenium.webdriver.support.select import Select
将定位到的下拉框元素传入Select类中
    selobj = Select(element) 下拉框元素已经定位到
调用响应方法选择下拉框中的选项
    select_by_index()            通过索引选择,index 索引从 0 开始
    select_by_value()            通过值选择(option标签的一个属性值)
    select_by_visible_text()        通过文本选择(下拉框的值)
调用响应方法选择下拉框中的选项
        all_selected_options        查看所有已选    
        first_selected_option        查看第一个已选
        is_multiple                查看是否是多选
        options                    查看选项元素列表

        取消选择
            deselect_by_index()
            deselect_by_value()
            deselect_by_visible_text()
JS:
重要的js代码

            * js = "window.scrollTo(x,y) "            
            x为水平拖动距离,y为垂直拖动举例

            * js= "var q=document.documentElement.scrollTop=n"
            
            n为从顶部往下移动滚动举例
        
        2.driver.execute_script(js)            执行js代码

显式等待:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
隐式等待:
隐式等待是根据是件进行等待,等待特定时间
driver.implicitly_wait(n)
n的单位为秒,n为最大值,在这个最大值内只要元素定位到就结束等待

cookies操作:
selenium对cookies的操作
        get_cookies()            获取所有cookies
        get_cookie(key)        获取key对应的值
        add_cookie(cookie_dict)    设置cookies
        delete_cookie(name)    删除指定名称的cookie
        delete_all_cookies()        删除所有cookie

封装:
对selenium的常用操作进行封装
1)封装开启关闭浏览器
    2)封装定位操作
    3)封装对元素的基本操作

六.unittest模块

Unittest单元测试框架是专门用来进行测试的框架

主要概念: test fixture: 代表了用例执行前的准备工作和用例执行之后的清理工作。 test case: 测试用例,这个相信大家都不陌生。是测试的最小单位,一般检查一组输入的响应(输出)是否符合预期。unittest模块提供了TestCase类来帮助我们创建测试用例; test suite: 经常被翻译成”测试套件”,也有人称为”测试套”,是测试用例或测试套件的集合,一般用来把需要一起执行的用例组合到一起; test runner: 用来执行测试用例并输出测试结果的组件。可以是图形界面或命令行界面;

 

unittest基本用法:

1.通过继承unittest.TestCase进行编写,继承unittest.TestCase的类会被框架识别为测试用例。 2.setUp和TearDown是用于事前和事后做相关处理动作的,就是前面说的Test Fixture,会在每个测试用例运行前后被框架自动调用 3.所有以test开头的方法会被框架自动识别为测试用例,并自动调用执行,不是以test开头的不会被调用 4.unittest.main()是最简单的测试执行方式 5.调用unittest.main()方法后,继承自unittest.TestCase类的类会被自动识别为测试用例并且被调用。

unittest断言:

断言是测试用例的核心。我们使用assertEqual()来判断预期结果,用assertTrue()和assertFalse来做是非判断。

unittest命令行接口:

unittest支持命令行接口,我们可以在命令行里指定运行具体的测试用例。

python -m unittest test.Tese1

unittest与selenium:

前面我们简单学习了unittest的用法,接下来我们将unittest与selenium融合在一起进行web自动化测试

1. Commonlib目录存放通用模块(我们封装的selenium模块)

2.创建Business目录 ,根据业务创建测试功能模块

3.创建Testcase目录存放测试用例

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值