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


前言

1、关键字驱动框架简介

原理及特点:
①关键字驱动测试是数据驱动测试的一种改进类型,它也被称为表格驱动测试或者基于动作字的测试。
②主要关键字包括三类:被操作对象(Item)、操作行为(Operation)和操作值(Value),用面向对象形式可将其表现为 Item.Operation(Value)。

③将测试逻辑按照这些关键字进行分解,形成数据文件。

④用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化。

优势:
①执行人员可以不需要太多的技术:一旦框架建立,手工测试人员和非技术人员都可以很容易的编写自动化测试脚本。

②简单易懂:它存在 Excel 表格中,没有编码,测试脚本容易阅读和理解。关键字和操作行为这样的手工测试用例,使它变得更容易编写和维护。

③早期介入:可以在应用未提交测试之前,就可以建立关键字驱动测试用例对象库,从而减少后期工作。使用需求和其它相关文档进行收集信息,关键字数据表可以建立手工测试程序。

④代码的重用性:用关键字的形式将测试用例及数据进行组装并解释执行,提高代码的可重用性。

2、框架结构说明

框架结构:
整个测试框架分为四层,通过分层的方式,测试代码更容易理解,维护起来较为方便。

第一层是“测试工具层”:
util 包:用于实现测试过程中调用的工具类方法,例如读取配置文件、页面元素的操作方法、操作 Excel 文件、生成测试报告、发送邮件等。
conf 包:配置文件及全局变量。
log 目录:日志输出文件。
exception_pic 目录:失败用例的截图保存目录。

第二层是“服务层”:
相当于对测试对象的一个业务封装。对于接口测试,是对远程方法的一个实现;对于 UI 测试,是对页面元素或操作的一个封装。
action 包:封装具体的页面动作,如点击、输入文本等。

第三层是“测试用例逻辑层”:
该层主要是将服务层封装好的各个业务对象,组织成测试逻辑,进行校验。

bussiness_process 包:基于关键字的形式,实现单条、多条用例的测试脚本逻辑。
test_data 目录:Excel 数据文件,包含用例步骤、被操作对象、操作动作、操作值、测试结果等。

第四层是“测试场景层”:
将测试用例组织成测试场景,实现各种级别 cases 的管理,如冒烟,回归等测试场景。

main.py:本框架工程的运行主入口。

31

32

33

框架特点:
①基于关键字测试框架,即使不懂开发技术的测试人员也可以实施自动化测试,便于在整个测试团队中推广和使用自动化测试技术,降低自动化测试实施的技术门槛。

②使用外部测试数据文件,使用Excel管理测试用例的集合和每个测试用例的所有执行步骤,实现在一个文件中完成测试用例的维护工作。

③通过定义关键字、操作元素的定位方式和定位表达式和操作值,就可以实现每个测试步骤的执行,可以更加灵活地实现自动化测试的需求。
④基于关键字的方式,可以进行任意关键字的扩展,以满足更加复杂的自动化测试需求。

⑤实现定位表达式和测试代码的分离,实现定位表达式直接在数据文件中进行维护。
⑥框架提供日志功能,方便调试和监控自动化测试程序的执行。

3、框架代码实现

action 包

action 包为框架第二层“服务层”,相当于对测试对象的一个业务封装。对于接口测试,是对远程方法的一个实现;对于 UI 测试,是对页面元素或操作的一个封装。

page_action.py
本模块基于关键字格式,封装了页面操作的常用函数,如打开 APP、点击、输入文本等。

import traceback
import os
import time
from appium import webdriver
from util.get_desired_caps import get_desired_caps
from util.datetime_util import *
from util.find_element_util import *
from util.global_var import *
from util.log_util import *


DRIVER = ""


# 打开APP,获取webdriver对象
def open_app():
    global DRIVER
    desired_caps = get_desired_caps()
    DRIVER = webdriver.Remote(APPIUM_SERVER, desired_caps)


# 设定开始活动页
def open_start_activity(app_name, start_activity_name):
    global DRIVER
    DRIVER.start_activity(app_name, start_activity_name)


# 退出APP
def quit_app():
    global DRIVER
    DRIVER.quit()


# 在页面输入框中输入数据
def input_string(location_type, locator_expression, input_content):
    global DRIVER
    find_element(DRIVER, location_type, locator_expression).send_keys(input_content)


# 清除输入框默认内容
def clear(location_type, locator_expression):
    global DRIVER
    find_element(DRIVER, location_type, locator_expression).clear()


# 点击页面元素
def click(location_type, locator_expression):
    global DRIVER
    find_element(DRIVER, location_type, locator_expression).click()


# 断言界面源码是否存在某关键字或关键字符串
def assert_string_in_pagesource(assert_string):
    global DRIVER
    try:
        assert assert_string in DRIVER.page_source, "%s not found in page source!" % assert_string
        info("断言成功【关键字:{}】".format(assert_string))
    except:
        error("断言失败【关键字:{}】".format(assert_string))
        raise


# 强制等待
def sleep(sleep_seconds):
    time.sleep(int(sleep_seconds))


# 批量断言
def assert_app_list(location_type, locator_expression, assert_string):
    global DRIVER
    assert_string_list = assert_string.split(",")
    elements = find_element(DRIVER, location_type, locator_expression)
    for element in elements[:3]:
        assert element.text in assert_string_list


# 截图函数
def take_screenshot():
    global DRIVER
    # 创建当前日期目录
    dir = os.path.join(EXCEPION_PIC_PATH, get_chinese_date())
    if not os.path.exists(dir):
        os.makedirs(dir)
    # 以当前时间为文件名
    file_name = get_chinese_time()
    file_path = os.path.join
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值