文章目录

  • web自动化测试
    • 第一章 web自动化入门
      • 1.什么是自动化?
        • 1.1 优点
      • 2.什么是自动化测试?
        • 2.1 自动化测试能解决什么问题?
        • 2.2 自动化相关知识
          • 2.2.1优点
          • 2.2.2 误区
        • 2.3 自动化测试分类
      • 3.什么是Web自动化测试?
        • 3.1 什么Web项目适合做自动化测试?
        • 3.2 Web自动化测试在什么时候开始?
        • 3.3 Web自动化测试所属分类
      • 4.Web自动化测试工具
        • 1.主流的web自动化测试工具
    • 第二章 Selenium-API操作
      • 1.什么是Selenium?
        • 1.1Selenium特点
        • 1.2 环境搭建
          • 1.2.1 安装Python 开发环境
          • 1.2.2 安装selenium包
          • 1.2.3 安装浏览器
          • 1.2.4 下载浏览器驱动
          • 1.2.5 配置浏览器驱动环境变量
        • 1.3 科普path
        • 1.4 入门案例初体验
        • 1.5 谷歌浏览器安装selenium IDE 插件
      • 2.元素定位
        • 2.1目标
        • 2.2 如何进行元素定位
      • 3.元素定位方式(8种)
        • 3.1 ID定位
        • 3.2 NAME定位
        • 3.3 CSS_SELECTOR 定位
        • 3.4 XPATH 表达式定位
        • 3.5 LINK_TEXT
      • 4.标准用例结构
      • 5.浏览器操作
      • 6.UI练习平台
      • 7.强制等待与隐式等待
      • 8.常见组件交互方法
        • 8.1 操作组件
        • 8.2 获取元素属性信息
      • 9.项目案例
        • 9.1 测试用例分析
    • 第三章 接口自动化测试

web自动化测试

第一章 web自动化入门

1.什么是自动化?

由机器设备代替人工完成指定目标的过程

1.1 优点

1. 减少人工劳动力
2. 提高工作效率(批量生产)
3. 提高产品质量
4. 规格统一标准

2.什么是自动化测试?

软件测试:校验系统是否满足规定的需要,弄清预期结果和实际结果之间的差别

概念:让程序代替人工去验证系统功能的过程

2.1 自动化测试能解决什么问题?

1.解决-回归测试 [重点]:项目发布新版本之后对项目之前的功能进行验证
2.解决-压力测试:多用户同时去操作软件
3.解决-兼容性测试:不同浏览器(IE Firefox Chrome)等
4.提高测试效率,保证产品质量

2.2 自动化相关知识

2.2.1优点
1.较短的时间内运行更多的测试用例
2.自动化脚本可重复执行
3.减少人为的错误
4.克服手工测试的局限性
2.2.2 误区
1.自动化测试完全可以替代手工测试
2.自动化测试一定比手工测试厉害
3.自动化测试可以发掘更多的功能
4.自动化测试适用于所有功能

2.3 自动化测试分类

1.web-自动化测试
2.移动-自动化测试(app自动化)
3.接口-自动化测试(工具,代码)
4.单元测试-自动化测试

3.什么是Web自动化测试?

概念:让程序代替人工自动验证web项目功能的过程

3.1 什么Web项目适合做自动化测试?

1.需求变化不频繁
2.项目周期长
3.项目需要回归测试
4.需要频繁回归的场景
5.核心场景

什么是回归测试?

回归测试是指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,对软件的任何新版本,都需要进行回归测试。

3.2 Web自动化测试在什么时候开始?

功能测试完毕(手工测试)

3.3 Web自动化测试所属分类

1.黑盒测试(功能测试)Web自动化测试属于黑盒测试
2.白盒测试(单元测试)
3.灰盒测试(接口测试)

4.Web自动化测试工具

1.主流的web自动化测试工具

1.QTP 收费 支持 Web和桌面
2.Selenuim (免费常用)
3.Robot framework

第二章 Selenium-API操作

1.什么是Selenium?

selenium官方网站

Selenium是一个用于Web应用程序的自动化工具,中文意思是(硒)

1.1Selenium特点

1.免费开源
2.跨平台
3.支持多种浏览器
4.支持多语言
5.成熟稳定
6.功能强大

1.2 环境搭建

1.Python 开发环境
2.安装selenium包
3.安装浏览器
4.安装浏览器驱动
1.2.1 安装Python 开发环境

下载Pyhon3.10

1.2.2 安装selenium包
  • 安装最新版selenium pip install selenium
  • 检查版本 pip show selenium
Name: selenium
Version: 2.48.0
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author:
Author-email:
License: UNKNOWN
Location: d:\python\lib\site-packages
Requires:
Required-by:Name: selenium
Version: 4.8.3
Summary:
Home-page: https://www.selenium.dev
Author:
Author-email:
License: Apache 2.0
Location: d:\python\lib\site-packages
Requires: certifi, trio, trio-websocket, urllib3
Required-by:
  • 卸载 selenium pip uninstall selenium
  • 安装指定版本 pip install selenium==2.48.0
1.2.3 安装浏览器

下载谷歌浏览器

1.2.4 下载浏览器驱动

下载谷歌浏览器驱动

1.2.5 配置浏览器驱动环境变量

将浏览器驱动所在位置添加到环境变量比如: D:\soft\chromedriver

1.3 科普path

dos 命令执行顺序:1. 检测是否为内部命令2. 检测是否为当前目录下的可执行文件3. 检测是否是环境变量path指定的目录

1.4 入门案例初体验

# 导包 webdriver
from selenium import webdriver
from time import sleep# 获取谷歌浏览器对象
driver = webdriver.Chrome()# 打开百度
driver.get("http://www.baidu.com")# 休眠3秒
sleep(3)# 关闭浏览器
driver.quit()
  1. 导包 from selenium import webdriver
  2. 获取浏览器驱动对象 driver=webdriver.Chrome()
  3. 打开url driver.get("url")
  4. 关闭驱动 driver.quit()

1.5 谷歌浏览器安装selenium IDE 插件

2.元素定位

2.1目标

掌握 id name class_name tag_name link_text partial_link_text等定位方式的使用

为什么要学习元素定位?
让程序操作指定元素,就必须先找到此元素。

2.2 如何进行元素定位

<input id="username" type="text" name="username" placeholder="用户名"/>
<div id="my_cart"><span>我的购物车</span>
</div>

元素定位是通过元素的信息或元素层级结构定位元素

3.元素定位方式(8种)

Selenium提供了八种定位元素方式:
1.id
2.name
3.class_name (根据元素的class属性定位)
4.tag_name (标签名定位)
5.link_text  (定位 超链接a标签)
6.partial_link_text   (定位 超链接a标签 模糊)
7.XPath (基于元素路径)
8.CSS  (元素选择器)

汇总:

  1. 基于元素属性的特有定位方式 :id name class_name
  2. 基于元素标签名称的定位 tag_name
  3. 定位超链接文本: link_text partial_link_text
  4. 基于元素路径定位:XPath
  5. 基于选择器:csss_selector

3.1 ID定位

id 定位即通过元素的id来定位元素,HTML规定id属性在整个HTML文档中必须唯一
前提:元素有id属性

2.48.0版本 id定位方法

element = driver.find_element_by_id(id)
from selenium import webdriver
from time import sleepclass TestSoGou:def test_sogou(self):driver = webdriver.Chrome()driver.get("https://www.sogou.com/")driver.find_element_by_id("query").click()driver.find_element_by_id("query").send_keys("什么是java")driver.find_element_by_id("stb").click()sleep(5)driver.quit()

4.8.3版本 id定位方法

from selenium import webdriver
from time import sleepfrom selenium.webdriver.common.by import Byclass TestSoGou:def test_sogou(self):driver = webdriver.Chrome()driver.get("https://www.sogou.com/")driver.find_element(By.ID, "query").click()driver.find_element(By.ID, "query").send_keys("什么是java")driver.find_element(By.ID, "stb").click()sleep(5)driver.quit()

3.2 NAME定位

web_element = driver.find_element(By.NAME, "locate")

3.3 CSS_SELECTOR 定位

  • 复制绝对定位
  • 编写css_selector表达式
web_element = driver.find_element(By.CSS_SELECTOR, "#locate_id > a > span")

3.4 XPATH 表达式定位

  • 复制绝对定位
  • 编写XPath表达式
web_element = driver.find_element(By.XPATH, '//*[@id="locate_id"]/a/span')

3.5 LINK_TEXT

  • 定位的元素是a标签
  • 输入的元素是标签内的文本
web_element = driver.find_element(By.LINK_TEXT, "元素定位")

4.标准用例结构

用例标题 类型 前提条件 用例步骤 预期结果 实际结果 后置动作
搜狗搜索功能 正例 进入搜狗主页 1.输入搜索关键词
2.按下回车键
1.搜索成功
2.搜索结果包含关键字
实现搜索 关闭driver进程

5.浏览器操作

import timefrom selenium import webdriverdef open_browser():# 打开浏览器driver = webdriver.Chrome()# 调用get方法访问urldriver.get("https://ceshiren.com/")time.sleep(3)# 刷新浏览器driver.refresh()# 退回上一步driver.get("https://www.baidu.com")# 从百度退回到测试人driver.back()# 最大化浏览器窗口driver.maximize_window()time.sleep(2)# 最小化浏览器窗口driver.minimize_window()time.sleep(2)# 最小化
if __name__ == '__main__':open_browser()

6.UI练习平台

UI练习平台

from selenium import webdriver
from selenium.webdriver.common.by import Bydef web_locate():# 实例化driver对象driver = webdriver.Chrome()# 打开一个网页driver.get("https://vip.ceshiren.com/#/ui_study")# 定位 第一个参数传递定位方式 第二个参数传递定位元素,返回WebElement对象# 1. ID 定位# web_element = driver.find_element(By.ID, "locate_id")# 2. NAME 定位# web_element = driver.find_element(By.NAME, "locate")# 3. CSS_SELECTOR 定位# web_element = driver.find_element(By.CSS_SELECTOR, "#locate_id > a > span")# 4. XPATH 定位# web_element = driver.find_element(By.XPATH, '//*[@id="locate_id"]/a/span')# 5. 通过 LINX_TEXT 链接文本的方式# 5.1 元素一定是a标签# 5.2 输入的元素是标签内的文本web_element = driver.find_element(By.LINK_TEXT, "元素定位")print(web_element)if __name__ == '__main__':web_locate()

7.强制等待与隐式等待

  • 强制等待

    • 等待时间过长,影响执行效率
    • 等待时间过短,渲染未能完成
    • time.sleep()
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Bydef wait_sleep():"""如果直接执行,不加任何等待,可能会报错"""driver = webdriver.Chrome()driver.get("https://vip.ceshiren.com/#/layout/section?classid=1614")# 不加等待,可能会因为网速等原因产生报错# =========报错 -> no such element: Unable to locate element# =========原因 -> 页面未完成加载,就去查找元素,此时元素还没加载出来# =========解决方案 -> 在报错的元素前强制等待,等待页面渲染完成# 强制等待(直接等待) 线程休眠一定时间time.sleep(3)driver.find_element(By.XPATH, "//*[text()='个人中心']")if __name__ == "__main__":wait_sleep()
  • 隐式等待

    • 解决难以确定元素加载的具体等待时间
    • 设置等待时间,轮询查找
driver.implicitly_wait()
  • 显式等待

    • WebDriverWait()
import timefrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWaitdef wait_sleep():"""如果直接执行,不加任何等待,可能会报错"""driver = webdriver.Chrome()driver.get("https://vip.ceshiren.com/#/layout/section?classid=1614")# 不加等待,可能会因为网速等原因产生报错# *********1.强制等待# =========报错 -> no such element: Unable to locate element# =========原因 -> 页面未完成加载,就去查找元素,此时元素还没加载出来# =========解决方案 -> 在报错的元素前强制等待,等待页面渲染完成# =========缺点 -> 不确定页面的加载时间,可能会因为等待时间过长而影响用例执行效率,时间过短仍然报错# 强制等待(直接等待) 线程休眠一定时间# time.sleep(3)# *********2.隐式等待# =========使用方法:代码一开始运行的时候就添加隐式等待,隐式等待全局生效,所有的find_element之前执行# =========问题:只能解决元素查找,不能解决元素交互driver.implicitly_wait(3)driver.find_element(By.XPATH, "//*[text()='个人中心']")driver.find_element(By.XPATH, "//*[text()='题库']")# *********3.显式等待def wait_show():driver = webdriver.Chrome()driver.get("https://vip.ceshiren.com/#/ui_study/frame")# driver.implicitly_wait(5)# 元素可以找到,但未触发点击效果# 第一个参数是driver,第二个参数是最长等待时间# until方法内容需要结合 expected_conditions 或者自己封装# expected_conditions 传入一个元组,即多一个小括号WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.ID, "success_btn")))driver.find_element(By.ID, "success_btn").click()time.sleep(5)if __name__ == "__main__":# wait_sleep()wait_show()

8.常见组件交互方法

8.1 操作组件

  • 输入 send_keys
  • 清空 clear
  • 点击 click
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Bydef element_interaction():"""元素的操作:1.点击 click2.输入 send_keys3.清空 clear:return:"""# 1.实例化driver对象driver = webdriver.Chrome()# 2.打开一个网页driver.get("https://www.sogou.com/")# 3.定位到输入框driver.find_element(By.ID, "query").send_keys("霍格沃兹测试开发")time.sleep(2)# 4.对输入框进行清空driver.find_element(By.ID, "query").clear()# 5.再次输入driver.find_element(By.ID, "query").send_keys("什么是java")time.sleep(2)# 6.点击搜索driver.find_element(By.ID, "stb").click()time.sleep(2)if __name__ == "__main__":element_interaction()

8.2 获取元素属性信息

  • 获取元素文本 webelement.text
  • 获取元素属性 webelement.getAttriubte
import timefrom selenium import webdriver
from selenium.webdriver.common.by import By# 获取元素属性
def element_get_attr():# 1.实例化driverdriver = webdriver.Chrome()# 2.打开网页driver.get("https://vip.ceshiren.com/#/ui_study/frame")# 3.定位元素web_element = driver.find_element(By.ID, "locate_id")# 4.打印这个元素对象print(web_element)# 5.获取元素信息的文本print(web_element.text)# 6.获取元素的属性信息res = web_element.get_attribute("class")print(res)if __name__ == "__main__":element_get_attr()

9.项目案例

9.1 测试用例分析

用例标题 前提条件 用例步骤 预期结果 实际结果
测试人搜索功能 进入测试人论坛首页 1.点击搜索按钮 2.输入搜索关键词 3.点击搜索按钮 1.搜索成功 2.搜索结果列表中包含关键词
# 结合pytest测试框架
# 用例标题=文件名+类名+方法名
import timefrom selenium import webdriver
from selenium.webdriver.common.by import Byclass TestCeshiren:# 前提条件def setup(self):"""前提条件:进入测试人论坛首页"""# 打开浏览器self.driver = webdriver.Chrome()# 添加3秒隐式等待self.driver.implicitly_wait(3)# 打开被测地址self.driver.get("https://ceshiren.com/search?expanded=true")# 添加后置函数,每一次用例运行结束后都关闭驱动def teardown(self):self.driver.quit()def test_search(self):"""测试步骤:1.输入搜索关键词2.点击搜索按钮:return:"""# 定位到搜索输入框并输入内容self.driver.find_element(By.CSS_SELECTOR, "[placeholder='搜索']").send_keys("appium")# 点击搜索按钮self.driver.find_element(By.CSS_SELECTOR, ".search-cta").click()# 断言=预期结果和实际结果对比的结果# 获取世界结果,即为获取搜素结果列表的标题内容# 第一种方式,获取第一个搜索结果# time.sleep(3)  # 加一个3秒的强制等待,等待页面渲染web_element = self.driver.find_element(By.CSS_SELECTOR, ".topic-title")# 获取元素对应的文本信息 print(web_element.text)# 断言 appium关键词是否在获取的实际结果文本之中# lower()统一转换成小写assert "appium" in web_element.text.lower()
from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestBaidu:# 前提条件def setup(self):self.driver = webdriver.Chrome()self.driver.implicitly_wait(3)self.driver.get("https://www.baidu.com")# 后置动作def teardown(self):self.driver.quit()# 测试情况def test_search(self):self.driver.find_element(By.NAME, "wd").send_keys("python")self.driver.find_element(By.CSS_SELECTOR, ".s_btn").click()web_element = self.driver.find_element(By.CSS_SELECTOR, ".wbrjf67")print(web_element.text)assert "python" in web_element.text.lower()

第三章 接口自动化测试

  • 引入 requests库
import requestsclass TestDemo:def test_get(self):r = requests.get("https://www.baidu.com")print(r.status_code)print(r.text)assert r.status_code == 200# Get Query请求def test_query(self):payload = {"level": 1,"name": "zhangsan"}r = requests.get("https://www.baidu.com", params=payload)print(r.text)assert r.status_code == 200# Form请求参数构造def test_post_form(self):payload = {"level": 1,"name": "lisi"}r = requests.post("https://www.baidu.com", data=payload)print(r.text)assert r.status_code == 200

【web自动化测试】相关推荐

  1. 开源 软件测试自动化工具,开源Web自动化测试工具Selenium IDE

    Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,支持测试用例的录制与回放. 只要在浏览器里装一下插件,就可以开始使用,简直是"开箱即用".我们相信测 ...

  2. 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  3. web自动化测试---概述

    最早的时候是做功能测试,web都是自己手工点击看看有没问题,没有系统的进行测试,更别说自动化测试了,那是一段不堪回首的往事,就是因为这,很多问题都流出去了,这是作为测试人员的一大失职,痛定思痛,开始学 ...

  4. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...

    原标题:Selenium 凭什么成为 Web 自动化测试的首选?(内附源码) 自动化 · 工具 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试. 2. Selenium ...

  5. web自动化测试常见面试题

    一.找不到元素可能出现的原因: 1.元素表达式错误 2.不在指定的frame 3.等待时间短,页面加载速度慢 4.执行脚本打开了新的页面,不在指定的窗口中 二.优化web自动化测试效率 避免使用强制等 ...

  6. Web自动化测试理论知识

    Web 自动化理论知识 1.自动化测试概述 概念:用工具代替/辅助人工完成完成软件测试活动的过程 特点:     可以对程序的新版本自动执行回归测试     可以执行一些手工测试困难或不可能进行的测试 ...

  7. docker+selenium web自动化测试环境的部署

    docker+selenium web自动化测试环境的部署 1.使用SecureCRT或Docker Quickstart Terminal打开docker终端. 2.下载selemiunUI测试需要 ...

  8. 使用C#+Edge (Chromium)进行Web自动化测试

    今天看到了VisualStudio中现在已经自带了Web单元测试项目模板,便试了一下,发现还比较好用,它默认的是Selenium实现的,测试组在用Selenium+Python来写过自动化测试,原来它 ...

  9. Sahi ---实现 Web 自动化测试

    参考网址:http://sahipro.com/docs/sahi-apis/index.html Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具.Sa ...

  10. python selenium po_python+selenium基于po模式的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

最新文章

  1. 百度要造什么车?汽车依然逃不出 BAT 的手掌心 | 撩车
  2. 明白了最基本的压缩原理
  3. PyQt5教程——组件 Ⅱ(八)
  4. 关于跨域请求的二三事
  5. Vim - 编辑多个文件
  6. C/C++中使用函数memset对int型数组赋值(0,-1,max,min)
  7. 人工智能:第六章 专家系统
  8. WINDOWS系统文件讲解
  9. python生成热度图_Python数据可视化 热力图
  10. java.lang.NoClassDefFoundError: weblogic/rmi/extensions/DisconnectListener
  11. n3k配置vpc是否还需要配置hsrp_VPC配置案例
  12. 解释OBJECT_ID和OBJECTPROPERTY
  13. 一个java文件可以有多个类嘛?
  14. 芯烨 Xprinter XP-DT108A 打印机驱动
  15. 【强烈建议收藏保存】70多个免费实用工具,数字激活、数据恢复、配置检测......
  16. [CTF]Dino安全小组第三次内部赛“remix_欧皇的游戏2.0”Writeup
  17. 原生js删除html,javascript删除一个html元素节点的方法
  18. 测试开发知识总结(一)
  19. 宝岛探险(求岛的大小)
  20. 教你免费使用论文检索网,轻松下载

热门文章

  1. Python网络爬虫:爬取CSDN热搜数据 并保存到本地文件中
  2. Time-Ordered Recent Event (TORE) Volumes for Event Cameras论文笔记
  3. Linux网络配置常见问题
  4. Linux学习 十二单元
  5. 1.数组简介:什么是数组???数组有哪四要素???
  6. Hi3516D V300功能介绍
  7. dimission letter exmaple
  8. 学习记录 重叠网络权威知识——多尺度复杂网络社区发现的链接
  9. SVN插件 for VS--VisualSVN
  10. 干货!MetaCorrection:解决无监督域适应的domain gap问题