web自动化06-自动化流程
PO模式是一种面向对象的编程思想,就是把要测试的功能按照页面进行封装,把每一个要测试的页面看作一个PO对象进行封装。在进行PO封装的时候我们把每一个页面拆分成三层(也就是要定义三个类),分别为:对象库层、操作层、业务层。对象库层用来定义页面中都包含了哪些元素,以及封装了定位这些元素的方法,对象库层只做这一件事情。操作层用来定义对页面中的元素要执行什么样的操作,并封装成方法;操作层会直接调用对象库层来获取元素。业务层用来定义页面中都包含了哪些业务操作的功能,并封装成对应的方法。业务层就是将操作层的一个或多个元素的操作组合成一个具体的业务功能。调用关系:业务层会调用操作层,操作层会调用对象库层。
等这些业务代码编写完之后,再根据测试用例编写对应的测试脚本,测试脚本需要调用业务层封装好的方法组合成一个完整的测试用例。我们采用UnitTest来管理测试脚本,之所以使用UnitTest这个测试框架,是因为使用这些测试框架可以很方便的管理和维护很多很多的测试用例;并且提供了丰富的断言方法,方便对用例执行的结果进行判断;而且还可以非常方便的生成测试报告。
我们引入了数据驱动的思想,主要是为了实现测试脚本与测试数据的分离,方便对测试数据的维护。(测试数据直接保存在了JSON文件中)
我们还使用Python的logging日志模块来收集日志,方便对执行失败的测试用例进行问题的定位和排查。
另外,我们还把那些公共的、通用的操作封装成工具类和方法,供其他代码方便直接调用,比如:把获取浏览器驱动对象的方法、获取警告框信息的方法都定义成了工具类。
以上就是我们公司对自动化测试项目架构的设计。
自动化测试流程
1. 自动化测试的流程
1. 需求分析
2. 挑选适合做自动化测试的功能
3. 设计测试用例
4. 搭建自动化测试环境 [可选]
5. 设计自动化测试项目的架构 [可选]
6. 编写代码
7. 执行测试用例
8. 生成测试报告并分析结果

1. 初始化项目
1.1 新建项目
项目名称:webAutoTestTPshop
1.2 创建目录结构
1.3 安装依赖包
- 安装 selenium 包
- 安装 parameterized 包
- 添加 HTMLTestRunner
2. 初始化代码
- 封装驱动工具类
- 封装PO基类,定义 BasePage 和 BaseHandle
编写代码
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. 调试代码
完善代码
1. 数据驱动
1.1 定义数据文件
1. 定义存放测试数据的目录,目录名称:data
2. 分模块定义数据文件
登录模块:login.json
购物车模块:cart.json
订单模块:order.json
3. 根据业务编写用例数据
1.2 测试数据参数化
修改测试脚本,使用 parameterized 实现参数化
2. 日志收集
使用logging模块实现日志的收集
2.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)] - %(messag e)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.Fire fox") runner.run(suite)