07.2 PO模式演练
2024年10月28日大约 3 分钟
07.2 PO模式演练
目标
1. 熟悉自动化测试的流程 2. 能够对一个web项目实现自动化测试 3. 熟练使用selenium常用的API 4. 能够把UnitTest应用到项目中 5. 能够把PO模式应用到项目中 6. 能够把数据驱动应用到项目中 7. 能够把日志收集功能应用到项目中
代码[../others/project-ui-auto]
1. 自动化测试流程
1. 自动化测试的流程
1. 需求分析
2. 挑选适合做自动化测试的功能
3. 设计测试用例
4. 搭建自动化测试环境 [可选]
5. 设计自动化测试项目的架构 [可选]
6. 编写代码
7. 执行测试用例
8. 生成测试报告并分析结果
2. 项目介绍
项目名称
TPshop开源商城系统
项目描述
TPshop是一个电子商务B2C电商平台系统,功能强大,安全便捷。适合企业及个人快速构建个性化网上商城。
包含PC+IOS客户端+Adroid客户端+微商城,系统PC+后台是基于ThinkPHP MVC构架开发的跨平台开源软件,设计得非常灵活,具有模块化架构体系和丰富的功能,易于与第三方应用系统无缝集成,在设计上,包含相当全面,以模块化架构体系,让应用组合变得相当灵活,功能也相当丰富。
项目架构
3. 用例设计
1. 编写自动化测试用例的原则
1. 自动化测试用例一般只实现核心业务流程或者重复执行率较高的功能。
2. 自动化测试用例的选择一般以“正向”逻辑的验证为主。
3. 不是所有手工用例都可以使用自动化测试来执行。
4. 尽量减少多个用例脚本之间的依赖。
5. 自动化测试用例执行完毕之后,一般需要回归原点。
2. 编写测试用例
4. 项目搭建
1. 初始化项目
1. 新建项目
- 项目名称:webAutoTestTPshop
2. 创建目录结构
3. 安装依赖包
- 安装 selenium 包
- 安装 parameterized 包
- 添加 HTMLTestRunner
2. 初始化代码
- 封装驱动工具类
- 封装PO基类,定义 BasePage 和 BaseHandle
5. 编写代码
1. 抽取PO
根据用例分析待测功能,提取页面对象
1. 定义页面对象文件
登录页:login_page.py
首页:index_page.py
后台页面(个人中心页):home_page.py
商品搜索页:goods_search_page.py
商品详情页:goods_detail_page.py
购物车页:cart_page.py
下订单页:order_page.py
订单支付页:order_pay_page.py
我的订单页:my_order_page.py
2. 分别编写对象库层、操作层、业务层的代码
2. 编写测试脚本
1. 定义测试脚本文件
登录模块:test_login.py
购物车模块:test_cart.py
订单模块:test_order.py
2. 使用unittest管理测试脚本
3. 执行测试脚本
1. 使用unittest执行测试脚本
2. 调试代码
6. 完善代码
1 . 数据驱动
1. 定义数据文件
定义存放测试数据的目录,目录名称:data
分模块定义数据文件
登录模块:login.json 购物车模块:cart.json 订单模块:order.json
根据业务编写用例数据
2. 测试数据参数化
- 修改测试脚本,使用 parameterized 实现参数化
2. 日志收集
- 使用logging模块实现日志的收集
1. 示例代码
import logging.handlers
import os
# 工程目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
def init_log_config():
"""
初始化日志配置
"""
# 日志输出格式
fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
# 创建日志器
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 创建格式化器
formatter = logging.Formatter(fmt)
# 输出到控制台
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)
# 输出到文件,每日一个文件
log_path = os.path.join(BASE_DIR, "log", "tpshop.log")
fh = logging.handlers.TimedRotatingFileHandler(log_path, when='MIDNIGHT', interval=1, backupCount=3)
fh.setFormatter(formatter)
logger.addHandler(fh)
3. 生成测试报告
使用HTMLTestRunner生成测试报告
report_file = "./report/report{}.html".format(time.strftime("%Y%m%d-%H%M%S")) with open(report_file, "wb") as f: runner = HTMLTestRunner(f, title="TPshop商城自动化测试报告", description="Win10.Firefox") runner.run(suite)