day25-关键字驱动

自动化测试框架的概念

  • 使用框架可以提高自动化测试代码的可复用性、可维护性和可扩展性。
  • 框架设计比较灵活,并没有通用的标准来规定框架必须具备什么结构或功能,框架的目的只有一个,就是提高测试效率,降低测试成本。

自动化测试框架的两大核心功能:驱动测试、辅助测试。

  • 驱动测试
    • 数据驱动(DDT)
    • 关键字驱动(KDT)
    • 页面驱动(POM)
  • 辅助测试
    • 数据管理
    • 报告管理
    • 配置管理
    • 日志管理

数据驱动

  • 将测试代码和测试数据分离,一般用于一个测试场景需要多个不同的测试数据的条件下
  • 通过数据驱动测试(有多少条测试数据,测试就会执行多少次)
  • 典型的应用:unittest的ddt模块

关键字驱动

如果所有测试操作都用一个表达式来表示,应该怎么表示

关键字驱动的表达式:object.action(parameters)

  • 主打易用性,将测试代码、测试业务和数据相分离,灵活性最高。
  • 使用时只考虑三个问题
    • 对谁做(object)
    • 做什么(action)
    • 参数(parameters)
import time


class Keyword:
    @classmethod
    def goto(cls, driver, *args):
        if len(args) >= 2 and args[0] == 'goto':
            driver.get(args[1])
            return True
        else:
            print('参数错误')
            return False

    @classmethod
    def send(cls, driver, *args):
        if len(args) >= 2 and args[0] == 'send':
            if args[1].startswith('id'):
                driver.find_element('id', args[1][3:]).send_keys(args[2])
            else:
                driver.find_element('xpath', args[1][6:]).send_keys(args[2])
            return True
        else:
            print('参数错误')
            return False

    @classmethod
    def onclick(cls, driver, *args):
        if len(args) >= 2 and args[0] == 'onclick':
            if args[1].startswith('id'):
                driver.find_element('id', args[1][3:]).click()
            else:
                driver.find_element('xpath', args[1][6:]).click()
            return True
        else:
            print('参数错误', args[1][6:])
            return False

    @classmethod
    def checkout(cls, driver, *args):
        if len(args) >= 2 and args[0] == 'checkout':
            if args[1].startswith('id'):
                driver.find_element('id', args[1][3:]).click()
            else:
                driver.find_element('xpath', args[1][6:]).click()
            return True
        else:
            print('参数错误', args[1][6:])
            return False

    @classmethod
    def delay(cls, driver, *args):
        if len(args) >= 2 and args[0] == 'delay':
            time.sleep(int(args[1]))
            return True
        else:
            print('参数错误')
            return False

    @classmethod
    def close(cls, driver, *args):
        driver.quit()
        return True

day25-关键字驱动_第1张图片

def run_case_text(driver):
    rows = Util.get_data_line()
    for row in rows:
        data = row.split('#')
        print(f'正在运行{row}')
        if hasattr(Keyword, data[0]):   # 判断Keyword类中是否有目标属性 如 goto

            action = getattr(Keyword, data[0])  # 获取目标属性
            result = action(driver, *data)

            if not result:
                print('命令失败')
                break
            else:
                print('命令成功')

通过以上方法就是关键字驱动,判断关键字是否为能解析的属性,然后根据的对应的关键字做出对应的操作

day25-关键字驱动_第2张图片

你可能感兴趣的:(软件测试,驱动开发,软件测试,测试工程师,测试工具)