PO模型的概念和理解:
PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息、相关操作都放到一个类中,从而使具体的测试用例变成了简单的调用和验证操作。
优点:进行了拆分和分层
缺点:对于复杂的业务page层变了,case也需要去改动
目录结构:
![](https://img.haomeiwen.com/i14633667/7c5ea373ae78e34d.png)
run_main.py 执行文件
common 公共方法
data 存放配置文件、元素定位文件、测试数据文件
logs 存放日志文件
report 测试报告
pageobj 页面元素
action 页面操作
testcase 测试用例
1、执行文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-04-15 09:00:00
# @Author : Canon
# @Link : https://www.python.org
# @Version : 3.6.1
import os
import sys
import unittest
from common.HTMLTestRunner import HTMLTestRunner
from common.logger import Log
# 当前脚本所在文件真实路径
CUR_PATH = os.path.dirname(os.path.realpath(__file__))
# 日志
log = Log()
def add_case(case_name="testcase", rule="test*.py"):
"""
第一步:加载所有的测试用例
:meth case_name: 测试用例文件夹名称 type: str
:meth rule: 匹配规则 type: str
:return:
"""
# 用例文件夹路径
case_path = os.path.join(CUR_PATH, case_name)
# 如果不存在这个case文件夹,就自动创建一个
if not os.path.exists(case_path):
os.mkdir(case_path)
log.info("test case path: %s" % case_path)
# 定义discover方法的参数
discover = unittest.defaultTestLoader.discover(case_path,
pattern=rule,
top_level_dir=None)
return discover
def run_case(all_case, report_name="report"):
"""
第二步:执行所有的用例, 并把结果写入 HTML 测试报告
:meth all_case: 所有测试用例 type: str
:meth report_name: 测试报告文件夹名称 type: str
:return:
"""
# now = time.strftime("_%Y-%m-%d %H-%M-%S")
now = ""
# 测试报告文件夹
report_dir = os.path.join(CUR_PATH, report_name)
# 如果不存在这个report文件夹,就自动创建
if not os.path.exists(report_dir):
os.mkdir(report_dir)
report_abspath = os.path.join(report_dir, "TestResult" + now + ".html")
log.info("report path: %s" % report_abspath)
fp = open(report_abspath, "wb")
runner = HTMLTestRunner(stream=fp,
title='自动化测试报告,测试结果如下:',
description='用例执行情况:')
# 调用 add_case 函数返回值
log.info("----- 开始执行测试用例 -----")
runner.run(all_case)
log.info("----- 结束执行测试用例 -----")
fp.close()
def main():
case_dir = "testcase/gateway/check"
# case_dir = "testcase"
# # 测试项目
# program = sys.argv[1]
# if program == "gateway":
# case_dir = "testcase/gateway/pay"
# elif program == "check":
# case_dir = "testcase/gateway/check"
# 1、加载用例
load_case = add_case(case_dir)
# 2、执行用例
run_case(load_case)
if __name__ == "__main__":
main()
网友评论