赛前辅导-web自动化测试

学习路径

环境搭建

安装selenium

  • 命令行安装: pip install selenium
  • 界面化安装:settings → project → python interpreter

安装 chromedriver

旧版本:https://chromedriver.storage.googleapis.com/index.html

新版本:Chrome for Testing availability

配置环境变量:
win:path 配置下载的目录 d:\chromedrive
mac: export PATH=$PATH:[chromedriver所在路径]

命令行输入:chromedriver --version 出现版本信息验证成功

控件定位和交互

控件定位

八大定位

定位方式 描述
class name class 属性对应的值
css selector(重点) css 表达式
id(重点) id 属性对应的值
name(重点) name 属性对应的值
link text 查找其可见文本与搜索值匹配的锚元素
partial link text 查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素
tag name 标签名称
xpath(重点) xpath 表达式

css 常见操作

表达式 描述
.intro class=“intro” 的所有元素
#firstname id=“firstname” 的所有元素
a[target=“_blank”] 具有属性 target=“_blank” 的所有 a 元素
p:nth-child(2) 属于其父元素的第二个 p 元素

xpath 规则

表达式 结果
/ 从该节点的子元素选取
// 从该节点的子孙元素选取
* 通配符
nodename 选取此节点的所有子节点
.. 选取当前节点的父节点
@ 选取属性

控件交互

  1. 元素查找
    • 查找单个元素 find_element
    • 查找多个元素 find_elements
  2. 元素操作
    • 点击 ele.click()
    • 清空 ele.clear()
    • 输入 ele.send_keys()
  3. 元素获取
    • 获取元素文本 ele.text
    • 获取元素属性 ele.get_attribute

自动化测试用例结构

自动化测试用例 作用
用例标题 测试包、文件、类、方法名称 用例的唯一标识
前提条件 setup、setup_class 测试数据构造,
用例步骤 测试方法内的代码逻辑 测试用例具体的步骤行为
预期结果 assert 实际结果 = 预期结果 断言,印证用例是否执行成功
实际结果 assert 实际结果 = 预期结果 断言,印证用例是否执行成功
后置动作 teardown、teardown_class(Pytest) 数据清理,数据还原

自动化关键数据记录

  • 日志
  • 页面源码:driver.page_source
  • 截图: driver.save_screenshot
import logging
import os
from logging.handlers import RotatingFileHandler

# 绑定绑定句柄到logger对象
logger = logging.getLogger(__name__)
# 获取当前⼯具⽂件所在的路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 拼接当前要输出⽇志的路径
log_dir_path = os.sep.join([root_path, '..', f'/logs'])
if not os.path.isdir(log_dir_path):
    os.mkdir(log_dir_path)
# 创建⽇志记录器,指明⽇志保存路径,每个⽇志的⼤⼩,保存⽇志的上限
file_log_handler = RotatingFileHandler(os.sep.join([log_dir_path, 'log.txt']),
                                       maxBytes=1024 * 1024, backupCount=10, encoding="utf-8")
# 设置⽇志的格式
date_string = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter(
    '[%(asctime)s] [%(levelname)s] [%(filename)s]/[line: %(lineno)d]/[%(funcName)s] %(message)s ', date_string)
# ⽇志输出到控制台的句柄
stream_handler = logging.StreamHandler()
# 将⽇志记录器指定⽇志的格式
file_log_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# 为全局的⽇志⼯具对象添加⽇志记录器
# 绑定绑定句柄到logger对象
logger.addHandler(stream_handler)
logger.addHandler(file_log_handler)
# 设置⽇志输出级别
logger.setLevel(level=logging.INFO)

实战练习

用例

用例标题 类型 前提条件 用例步骤 预期结果 实际结果
雪球搜索功能 正例 进入雪球首页 1.输入搜索关键词
2.点击搜索按钮
3.点击讨论
4.选择第一篇文章(可以跳转新页面)
搜索成功,正文包含搜索的关键字

要求:

  • 完成自动化用例编写
  • 添加日志、截图和源码信息
  • 添加对应的断言信息

总结

  • 知识点梳理
  • 环境搭建
  • 知识点回顾
  • 实战练习

web_自动化测试代码.zip (1.0 MB)