电子商城Web自动化测试实战

师资培训

霍格沃兹测试开发 ceshiren.com

大纲

  • Web 自动化测试实战
  • Web 自动化测试技术与体系

Web 自动化测试实战

师资培训

安装 Selenium 库

pip 命令来安装 Selenium 库:

pip install selenium

访问百度验证环境

  1. 创建项目。
  2. 编写代码打开百度首页。
import time
# 导入selenium 包
from selenium import webdriver

# 创建一个 Chromdriver 的实例。Chrome()会从环境变量中寻找浏览器驱动
driver = webdriver.Chrome()
# 打开网址
driver.get("https://ceshiren.com/")
# 强等10s 秒
time.sleep(10)

课堂练习

  1. 安装 Selenium。
  2. 配置 chromedriver。
  3. 编写访问ceshiren论坛的自动化脚本验证环境。

Selenium IDE

  • 介绍
  • 安装
  • 录制脚本并导出
  • 回放验证脚本

Selenium IDE 介绍

Selenium IDE 安装

  1. 下载 Selenium IDE CRX 文件 保存在熟悉的位置。

  2. 打开 Google Chrome 浏览器。

  3. 导航至 扩展程序 ,或从菜单中选择 更多工具 --> 扩展程序

  4. 请确保右上角的 开发者模式 选项已启用。

  5. 单击页面左上角的 加载已解压的扩展程序 按钮。

  6. 浏览到您保存 CRX 文件的文件夹并选择该文件夹。然后点击 选择文件夹 来安装。

  7. 完成安装后,Selenium IDE 图标将出现在 Chrome 的工具栏上。

录制场景

  1. 打开百度首页。
  2. 输入搜索关键字:Selenium。
  3. 找到 Selenium 官网 打开。
  4. 标题文本断言。
  5. 录制脚本导出。
  6. 脚本回放验证。

课堂练习

  1. 打开测试人论坛
  2. 输入搜索关键字:Selenium。
  3. 打开第一个帖子链接。
  4. 标题文本断言。
  5. 录制脚本导出。
  6. 脚本回放验证。

用例结构

自动化测试用例 作用
用例标题 测试包、文件、类、方法名称 用例的唯一标识
前提条件 setup、setup_class(Pytest);
BeforeEach、BeforeAll(JUnit)
测试用例前的准备动作,比如读取数据或者 driver 的初始化
用例步骤 测试方法内的代码逻辑 测试用例具体的步骤行为
断言 assert 实际结果 = 预期结果 断言,印证用例是否执行成功
后置动作 teardown、teardown_class(Pytest);
@AfterEach、@AfterAll(JUnit)
脏数据清理、关闭 driver 进程

Allure2 介绍

  • Allure 是由 Java 语⾔开发的⼀个轻量级,灵活的测试报告⼯具。
  • Allure 多平台的 Report 框架。
  • Allure ⽀持多语⾔,包括 python、JaveScript、PHP、Ruby 等。
  • 可以为开发/测试/管理等人员提供详尽的的测试报告,包括测试类别、测试步骤、日志、图片、视频等。
  • 可以为管理层提供高水准的统计报告。
  • 可以集成到 Jenkins 生成在线的趋势汇总报告。

Allure2 报告展示

github 地址:https://github.com/allure-framework/allure2

Allure2 安装

  1. 安装 Java,需要配置环境变量。
  2. 安装 Allure ,需要配置环境变量。
  3. 安装插件
    • Python:pip install allure-pytest
    • Java:Maven插件安装。

Allure2 下载与安装

  1. 先下载 Allure 源码包到本地。
  2. 配置环境变量:解压后将 bin 目录加入 PATH 环境变量。

详细安装步骤参考:https://ceshiren.com/t/topic/3386

Allure 环境验证

  • 执行命令验证环境
# 环境验证
allure --version

插件安装-Python

  • 安装 Python 插件 allure-pytest
    • 执行命令:pip install allure
# linux/mac
> pip list |grep allure
allure-pytest         x.xx.x

# windows
> pip list |findstr allure
allure-pytest         x.xx.x

生成测试报告流程

使用 Allure2 运行方式-Python

  • 使用 --alluredir 参数生成测试报告。
# 在测试执行期间收集结果
pytest [测试用例/模块/包] --alluredir=./result/  (—alluredir这个选项 用于指定存储测试结果的路径)

# 生成在线的测试报告
allure serve ./result

高级定位CSS

css 选择器概念

  • css 选择器有自己的语法规则和表达式
  • css 定位通常分为绝对定位和相对定位
  • 和Xpath一起常用于UI自动化测试中的元素定位

css 定位场景

  • 支持web产品
  • 支持app端的webview

css 相对定位的优点

  • 可维护性更强
  • 语法更加简洁
  • 解决各种复杂的定位场景
# 绝对定位
$("#ember63 > td.main-link.clearfix.topic-list-data > span > span > a")
# 相对定位
$("#ember63 [title='新话题']")

css 定位的调试方法

  • 进入浏览器的console
  • 输入:
    • $("css表达式")
    • 或者$$("css表达式")

css基础语法

类型 表达式
标签 标签名
.class属性值
ID #id属性值
属性 [属性名='属性值']
//在console中的写法
// https://www.baidu.com/
//标签名
$('input')
//.类属性值
$('.s_ipt')
//#id属性值
$('#kw')
//[属性名='属性值']
$('[name="wd"]')

css关系定位

类型 格式
并集 元素,元素
邻近兄弟(了解即可) 元素+元素
兄弟(了解即可) 元素1~元素2
父子 元素>元素
后代 元素 元素
//在console中的写法
//元素,元素
$('.bg,.s_ipt_wr,.new-pmd,.quickdelete-wrap')
//元素>元素
$('#s_kw_wrap>input')
//元素 元素
$('#form input')
//元素+元素,了解即可
$('.soutu-btn+input')
//元素1~元素2,了解即可
$('.soutu-btn~i')

css 顺序关系

类型 格式
父子关系+顺序 元素 元素
父子关系+标签类型+顺序 元素 元素
//:nth-child(n)
$('#form>input:nth-child(2)')
//:nth-of-type(n)
$('#form>input:nth-of-type(1)')

css 语法总结

  • 基本语法
  • 关系语法
  • 顺序语法

测试框架-参数化

参数化

  • 通过参数的方式传递数据,从而实现数据和脚本分离。
  • 并且可以实现用例的重复生成与执行。

参数化应用场景

  • 测试登录场景
    • 测试登录成功,登录失败(账号错误,密码错误)
    • 创建多种账号: 中⽂文账号,英⽂文账号
  • 普通测试用例方法
    • Copy 多份代码 or 读⼊入参数?
    • 一次性执⾏多个输⼊入参数
def test_param_login_ok():
    # 登录成功
    username = "right"
    password = "right"
    login(username,password)

def test_param_login_fail():
    # 登录失败
    username = "wrong"
    password = "wrong"
    login(username,password)

参数化实现方案

  • pytest 参数化实现方法
  • 装饰器:@pytest.mark.parametrize
@pytest.mark.parametrize("username,password",[["right","right"], ["wrong","wrong"]])
def test_param(username,password):
    login(username,password)

参数化:单参数情况

  • 单参数,可以将数据放在列表中
search_list = ['appium','selenium','pytest']

@pytest.mark.parametrize('name',search_list)
def test_search(name):
    assert name in search_list

参数化:用例重命名-添加 ids 参数(中文)

@pytest.mark.parametrize("test_input,expected",[
    ("3+5",8),("2+5",7),("7+5",12)
],ids=["3和5相加","2和5相加","7和5相加"])
def test_mark_more(test_input,expected):
    assert eval(test_input) == expected
# 创建conftest.py 文件 ,将下面内容添加进去,运行脚本
def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时,将收集到的用例名name和用例标识nodeid的中文信息显示在控制台上
    """
    for i in items:
        i.name=i.name.encode("utf-8").decode("unicode_escape")
        i._nodeid=i.nodeid.encode("utf-8").decode("unicode_escape")

Web 自动化测试技术与体系

企业需求

  • 针对普通用户使用的 C 端产品(通常也有 App)
    • 豆瓣
    • 淘宝
  • 定制性比较强的 B 端产品
    • OA 系统
    • 风控系统

招聘需求

  • 字节跳动招聘需求:
    • 薪资: 25K+
    • 要求: 精通 Web 自动化测试工具 Selenium

工作需求

  • 自动化测试用例设计能力
  • 工具使用能力
  • 解决问题能力

教学思路

  • 教学大纲:运用5W1H法设计课程内容。
  • 虚拟实验室:让学生在动手练习过程中有切实体会,帮助老师减轻教学负担。

教学大纲设计

什么是 5W1H?

描述
What 基本介绍
Why 使用价值与收益
Where 应用场景
When 何时使用
Who 由谁完成,谁去做
How 如何使用

Web 自动化测试的基本介绍

Web 功能测试场景

Web 自动化测试场景

Web 自动化测试的价值与收益

手工测试 Web 自动化测试
上手难度 ⭐️ ⭐️⭐️⭐️
执行重复、繁琐的测试 ⭐️⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️
测试效率 ⭐️⭐️⭐️ ⭐️⭐️⭐️⭐️
多浏览器兼容测试 ⭐️⭐️⭐️ ⭐️⭐️⭐️⭐️⭐️

Web 自动化测试应用场景

  • 针对业务进行冒烟以及回归测试
  • 用户体验级别的测试
  • 多浏览器兼容性测试

Web 自动化测试何时使用

  • 基本的功能测试体系已经成熟。
  • 团队具备一定的技术功底。

Web 自动化测试如何学习

知识体系

模块 内容
环境安装与配置 IDE Python/Java
被测环境 PetClinic ApiDemo
自动化库 Selenium Appium
自动化技术 driver element wait
测试用例结构 测试数据 测试步骤 断言
PO 设计模式 封装 POM
测试用例设计 提高测试覆盖

课程设计特点

  • 由浅入深、循序渐进
  • 理论与实践结合
  • 技术与业务结合

Web 自动化测试 (初级)

形式 章节 描述 课时
知识点 Web 自动化测试价值与体系 价值体系 技术选型 学习路线 1 个课时
知识点 环境安装与使用 selenium、 chromedriver、 firefox geckodriver 1 个课时
知识点 自动化用例录制 selenium IDE、录制、回放、基本使用 1 个课时
知识点 自动化测试用例结构分析 录制代码解析,代码结构优化 1 个课时
知识点 capability 配置参数解析 capability 用法 ,firefox chrome 等浏览器的专属 capability 1 个课时
知识点 web 浏览器控制 打开网页、刷新、回退、最大化、最小化 1 个课时
知识点 常见控件定位方法 id name css xpath link 定位 1 个课时
知识点 强制等待与隐式等待 介绍 selenium 经典的三种等待方式 1 个课时
知识点 常见控件交互方法 点击,输入,清空,获取元素文本、尺寸等属性信息 1 个课时
实战 测试人论坛搜索功能自动化测试 用例设计、用例编写、断言 1 个课时

学习收益

  • 搭建 Web 自动化所需基本环境
  • 了解 Web 自动化基本功能的使用
  • 了解 selenium IDE 的基本使用
  • 能够上手编写 Web 自动化测试入门脚本

Web 自动化测试 (中级)

形式 章节 描述
知识点 高级定位-css css 使用场景、语法
知识点 高级定位-xpath xpath 使用场景、语法
知识点 显式等待高级使用 显式等待原理与使用
知识点 高级控件交互方法 右键点击、页面滑动、表单填写等自动化动作
知识点 网页 frame 与多窗口处理 多窗口,多 frame 下的窗口识别与切换
知识点 文件上传弹框处理 文件上传的自动化与弹框处理机制
知识点 自动化关键数据记录 行为日志、截图,page source
实战 电子商务产品实战 用例设计、日志封装、测试报告

学习收益

  • 解决自动化测试数据记录问题。
  • 解决 Web 自动化测试痛点问题:
    • 元素定位不到
    • 用例的可维护性问题
    • 用例执行效率低问题

Web 自动化测试 (高级[选修])

形式 章节 描述
知识点 浏览器复用 利用远程调试技术实现自动化登录
知识点 Cookie 复用 利用 cookie 复用实现自动化登录
知识点 page object 设计模式 page object 模式的发展历史介绍、六大设计原则
知识点 异常自动截图 测试用例失败时自动截图
知识点 测试用例流程设计 测试装置的应用,套件级别的初始化与清理、用例级别的初始化与清理
实战 电子商务产品实战 page object 设计模式应用、BasePage 封装、基于 page object 模式的测试用例编写

学习收益

  • 掌握绕过扫码、滑块、短信校验等认证方法的自动化测试方案。
  • 掌握 Page Object 设计模式,实现测试用例的良好分层。
  • 解决用例爆炸问题。

在企业中Web自动化测试常见痛点(部分)

  • 元素定位不到
  • 用例的可维护性问题
  • 用例执行效率低问题

【虚拟实验室】

  • 教学痛点:
    • 被测系统不稳定。
    • 授课的知识点无法和被测产品很好的融合。
    • 老师备课准备工作繁多。
    • 学生缺少切实的感受与体验。
  • 解决方案:
    • 提供一个稳定的,好用的被测系统。
    • 被测系统需要和课程设计紧密结合。

虚拟实验室体验-元素定位不到

https://vip.ceshiren.com/#/ui_study

  • 接下来将以此系统为被测产品,让学生切实感受到元素定位不到的问题以及对应的解决方案与技术。