一.POM模式
POM结构:
项目名称文件:
common文件夹:
base.py文件:对selenium二次封装:
1.打开浏览器
2.打开地址
3.元素定位
4.元素操作
page文件夹:
1.对项目每个页面封装
2.page文件夹:将页面分为三层
表现层:页面中可见的元素
操作层:对可见元素的操作
业务层:由操作层组合形成场景/业务
3.page类:
编写内容:
①封装表现层:制作定位器
②封装操作层:对定位器中各个元素操作,将操作形成方法
③page类继承Base
script文件夹:
存放测试用例,使用unittest管理用例
1.只关注操作步骤,如果涉及到测试数据,暂时写成死数据
2.确定断言
3.关注测试数据灵活性
二.unittest框架
1.作用:
规范自动化测试用例编写
管理自动化测试用例的执行
2.基本概念
测试夹具:test fixture 处理测试前的数据准备和测试后的数据清理
测试套件:test suite 批量收集需要执行的测试用例
测试用例:test case 核心部分,编写的测试用例符合unittest框架的要求
测试执行:test runner 执行测试套件收集的测试用例
3.特殊方法
setUp:在一个py文件,在测试用例执行之前先执行,有多少测试用例,执行多少次
tearDown:在一个py文件中,在测试用例执行之后再执行,有多少测试用例,执行多少次
setUpClass:在一个py文件中,在测试类执行之前先执行,需要@classmethod装饰
tearDownClass:在一个py文件中,在测试类执行之后再执行,需要@classmethod装饰
4.用例编写注意事项
①测试用例文件名称以test开头
②测试用例类名称Tset开头
③测试用例方法名称test开头
④测试用例的执行顺序:对用例名称按照ASCII字符集排序
5.断言
语法:
assertEqual(a,b,msg="当断言失败时输出")
#判断a和b是否相等,如果相等则断言成功,反之断言失败-->用例执行失败
assertTrue(x,msg="当断言失败时输出")
#当条件x为True时.断言成功,反之断言失败-->用例执行失败
断言的添加位置:在测试用例中添加
注意:
断言来说,只有失败的断言才会有提示
断言失败的关键字:AssertionError,表示用例执行失败,不是代码错误
5.测试套件&测试执行
①测试套件:
unittest.defaultTestLoader
②测试执行
unittest.TxetTestRunner
编写步骤:
添加测试用例存放路径
将需要执行的测试用例添加到测试套件中
执行测试用例
6.测试报告
生成html格式的测试报告
操作步骤
①复制HTMLTestRunnerPlugins.py文件到python安装目录中/lib目录下
②导入unittest和HTMLTestRunnerPlugins
③确定测试用例存放路径
④确定测试报告存放路径
⑤命名测试报告的名字,打开预定的测试报告,准备写入内容
⑥将需要执行的测试用例,放入测试套件中
⑦执行测试用例,并生成html格式的测试报告
举例:
# 1.导入unittest和HTMLTestRunnerPlugins
import unittest
import HTMLTestRunnerPlugins
import time
import os
# 2.确定测试用例存放路径
case_dir = "./script"
# 3.确定测试报告存放路径
report_dir = "./report"
# 4.命名测试报告的名,打开预定的测试报告,准备写入内容
# 以当前时间来命名测试报告
now = time.strftime("%Y-%m-%d %H_%M_%S")
report_name = now + "report.html" # 测试报告名称
with open(os.path.join(report_dir,report_name),"wb") as fp:
# 5.将需要执行的测试用例,放入测试套件中
discover = unittest.defaultTestLoader.discover(case_dir)
# 6.执行测试用例,并生成html格式的测试报告
runner = HTMLTestRunnerPlugins.HTMLTestRunner(title="ECShop自动化测试报告",
description="登录,注册,购物车功能",
stream=fp,
verbosity=2)
runner.run(discover)
7.unittest参数化
①ddt模块实现参数化
②准备测试数据
③在测试类前使用:@ddt.ddt
④在测试用例前使用
@ddt.data(*数据源)
def 测试用例(self,data)
#准备数据为列表嵌套字典格式
@ddt.data(*数据源)
@ddt.unpark
def 测试用例(参数)
#适用于数据源为列表嵌套列表格式
8.文件版数据源
"""
1.读取csv文件/excel表格
2.使用pandas模块读取
3.下载pandas模块
pip install pandas
pip install xlrd
"""
import pandas
import os
class OperationData:
def __init__(self,filename):
"""
os.path.dirname(__file__) # 表示当前路径
os.path.abspath(__file__) # 表示绝对路径
os.path.dirname(os.path.dirname(__file__)) # 表示文件所在上级目录
:param filename: 文件名
"""
base_path = os.path.dirname(os.path.dirname(__file__)) + "/data" # 回到项目根目录下,进入data目录
file_path = os.path.join(base_path,filename)
if filename.split(".")[-1] == "csv": # 通过判断文件后缀是否是csv分流
self.file = pandas.read_csv(file_path) # 读取csv文件
else:
self.file = pandas.read_excel(file_path) # 读取excel表格
def get_data_to_dict(self):
"""将数据读取成列表嵌套字典格式[{},{},{}]"""
# data = [] # 创建一个空列表存放数据
# for i in self.file.index.values: # 遍历所有的行
# row_data = self.file.loc[i].to_dict() # 将每一个行的值转化成字典格式
# data.append(row_data)
#
# return data
# 列表生成器
return [self.file.loc[i].to_dict() for i in self.file.index.values]
def get_data_to_list(self):
"""将数据读取成列表嵌套列表格式[[],[],[]]"""
return self.file.values.tolist()
if __name__ == '__main__':
oper = OperationData("userdata.xls")
# data = oper.get_data_to_dict()
data = oper.get_data_to_list()
print(data)
来源:CSDN
作者:Alias_h
链接:https://blog.csdn.net/weixin_46009577/article/details/104302831