全网最牛,Appium自动化测试框架-关键字驱动+数据驱动实战(二)


前言

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
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值