目录:导读
前言
util 包
util 包属于第一层的测试工具层:用于实现测试过程中调用的工具类方法,例如读取配置文件、页面元素的操作方法、操作 Excel 文件、生成测试报告、发送邮件等。
global_var.py
本模块用于定义测试过程中所需的全局变量。
import os
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# APP配置信息路径
INI_FILE_PATH = os.path.join(PROJECT_DIR, "conf", "desired_caps_config.ini")
# 异常截图路径
EXCEPION_PIC_PATH = os.path.join(PROJECT_DIR, "exception_pic")
# 日志配置文件路径
LOG_CONF_FILE_PATH = os.path.join(PROJECT_DIR, "conf", "logger.conf")
# 测试数据文件路径
TEST_DATA_FILE_PATH = os.path.join(PROJECT_DIR, "test_data", "test_case.xlsx")
# 测试报告存放路径
TEST_REPORT_FILE_DIR = os.path.join(PROJECT_DIR, "test_report")
# Appium server地址
APPIUM_SERVER = 'http://localhost:4723/wd/hub'
# 测试数据文件中,测试用例sheet中部分列对应的数字序号
TESTCASE_CASE_NAME_COL_NO = 0
TESTCASE_FRAMEWORK_TYPE_COL_NO = 1
TESTCASE_CASE_STEP_SHEET_NAME_COL_NO = 2
TESTCASE_DATA_SOURCE_SHEET_NAME_COL_NO = 3
TESTCASE_IS_EXECUTE_COL_NO = 4
TESTCASE_TEST_TIME_COL_NO = 5
TESTCASE_TEST_RESULT_COL_NO = 6
# 用例步骤sheet中,部分列对应的数字序号
CASESTEP_NAME_COL_NO = 0
CASESTEP_ACTION_COL_NO = 1
CASESTEP_LOCATE_METHOD_COL_NO = 2
CASESTEP_LOCATE_EXPRESSION_COL_NO = 3
CASESTEP_OPERATION_VALUE_COL_NO = 4
CASESTEP_IS_EXECUTE_COL_NO = 5
CASESTEP_TEST_TIME_COL_NO = 6
CASESTEP_TEST_RESULT_COL_NO = 7
CASESTEP_EXCEPTION_INFO_COL_NO = 8
CASESTEP_EXCEPTION_PIC_DIR_COL_NO = 9
# 数据源sheet中,是否执行列对应的数字编号
DATASOURCE_DATA = 0
DATASOURCE_KEYWORD = 1
DATASOURCE_IS_EXECUTE = 2
DATASOURCE_TEST_TIME = 3
DATASOURCE_TEST_RESULT = 4
# 测试执行结果统计
TOTAL_CASE = 0
PASS_CASE = 0
FAIL_CASE = 0
if __name__ == "__main__":
print(PROJECT_DIR)
find_element_util.py
本模块封装了基于显式等待的界面元素定位方法。
from selenium.webdriver.support.ui import WebDriverWait
# 显式等待一个元素
def find_element(driver, locate_method, locate_exp):
# 显式等待对象(最多等10秒,每0.2秒判断一次等待的条件)
return WebDriverWait(driver, 10, 0.2).until(lambda x: x.find_element(locate_method, locate_exp))
# 显式等待一组元素
def find_elements(driver, locate_method, locate_exp):
# 显式等待对象(最多等10秒,每0.2秒判断一次等待的条件)
return WebDriverWait(driver, 10, 0.2).until(lambda x: x.find_elements(locate_method, locate_exp))
excel_util.py
本模块封装了对 excel 的读写操作(openpyxl 版本:3.0.4)。
import os
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font, Side, Border
from util.datetime_util import *
from util.global_var import *
from util.log_util import *
# 支持excel读写操作的工具类
class Excel:
# 初始化读取excel文件
def __init__(self, file_path):
if not os.path.exists(file_path):
return
self.wb = load_workbook(file_path)
# 初始化默认sheet
self.ws = self.wb.active
self.data_file_path = file_path
# 初始化颜色字典,供设置样式用
self.color_dict = {
"red": "FFFF3030", "green": "FF008B00"}
def get_all_sheet(self):
return self.wb.get_sheet_names()
# 打开指定sheet
def get_sheet(self, sheet_name):
if sheet_name not in self.get_all_sheet():
print("sheet名称【%s】不存在!" % sheet_name)
return
self.ws = self.wb.get_sheet_by_name(sheet_name)
return True
# 获取最大行号
def get_max_row_no(self):
# openpyxl的API的行、列索引默认都从1开始
return self.ws.max_row
# 获取最大列号
def get_max_col_no(self):
return self.ws.max_column
# 获取所有行数据
def get_all_row_data(self, head_line=True):
# 是否需要标题行数据的标识,默认需要
if head_line:
min_row = 1 # 行号从1开始,即1为标题行
else:
min_row = 2
result = []
# min_row=None:默认获取标题行数据
for row in self.ws.iter_rows(min_row=min_row, max_row=self.get_max_row_no(), max_col=self.get_max_col_no()):
result.append([cell.value for cell in row])
return result
# 获取指定行数据
def get_row_data(self, row_num):
# 0 为标题行
return [cell.value for cell in self.ws[row_num+1]]
# 获取指定列数据
def get_col_data(self