自动化测试框架

本文介绍了自动化测试框架的概念和核心功能,包括驱动测试中的数据驱动、关键字驱动和页面驱动,以及辅助测试的各个方面。强调了框架的可复用性、可维护性和可扩展性,旨在提高测试效率和降低测试成本。同时,详细阐述了页面对象模型(Page Object Model)以及自动化测试的常用文件结构和相关模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动化测试框架的概念
自动化测试框架就是一个能够进行自动化测试的程序,其本质也是一堆“按照特定结构组织”的代码。自动化测试框架可以提高代码的可复用性、可维护性、可扩展性。

●可复用性:编写的代码不仅适用于一个模块和项目,同时也适用于其他的模块和项目
●可维护性:减少代码维护时的工作量,比如修改某个功能代码时,只需要修改一处即可,不需要每处代码去单独修改
●可扩展性:当要增加或者扩展功能时,可以不影响原有模块

框架设计比较灵活,并没有通用的标准来规定框架必须具备什么结构或功能,框架的目的只有一个,提高测试效率,降低测试成本。

两大核心功能
●驱动测试
○数据驱动(ddt)
○关键字驱动(kdt)
○页面驱动(pom)
●辅助测试
○数据管理
○报告管理
○配置管理
○日志管理等

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

关键字驱动
主打易用性,将测试代码、测试业务和测试数据相分离,灵活性高。
使用时,只需要考虑三个问题,对谁做,做什么,参数
关键字驱动的表达式:object.action(parameters)

data.txt

PowerShell复制代码

# 关键字驱动的脚本
# action;object;parameters
goto;https://segmentfault.com/
delay;2
singleclick;xpath://nav[@class='p-0 navbar navbar-expand navbar-light']
singleclick;xpath://a[@data-mode='password']
delay;2
input;xpath://input[@placeholder="手机号或邮箱"];18423262925
input;xpath://input[@placeholder="密码"];xujiao5770
singleclick;xpath://button[@class='sflex-center btn btn-primary btn-block btn-lg']

util.py

PowerShell复制代码

# 导入Excel的模块
import openpyxl


class Util:

    @classmethod
    def get_test_data_from_txt(cls, path):
        with open(path, 'r', encoding='utf-8') as f:
            cmds = []
            while True:
                # 读取一行:
                line = f.readline()
                # 读取结束
                if not line:
                    break
                cmds.append(line.strip())
            return cmds

    @classmethod
    def get_test_data_from_xlsx(cls, path):
        # 从Excel中读取数据
        workbook = openpyxl.load_workbook(path)
        worksheet = workbook.active
        test_data = []
        for row in range(2, worksheet.max_row + 1):
            cmd = ''
            for column in range(1, worksheet.max_column + 1):
                content = worksheet.cell(row=row, column=column).value
                if content:
                    cmd += str(content)
                    cmd += ';'
            test_data.append(cmd[:-1])
        return test_data


if __name__ == '__main__':
    # cmds = Util.get_test_data_from_txt('data.txt')
    cmds = Util.get_test_data_from_xlsx('data.xlsx')
    print(cmds)

keywords.py

PowerShell复制代码

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.maximize_window()


class KeyWord:

    @classmethod
    def goto(cls, *args):
        print('参数:{}'.format(args))
        if args and len(args) >= 2:
            driver.get(args[1])
            return True
        else:
            print('goto命令不正取,请检查')
            return False

    @classmethod
    def input(cls, *args):
        print('input的参数:{}'.format(*args))
        if args and len(args) >= 3:
            element_split = args[1].split(':')
            # element_split[0]是查找定位的方式
            # element_split[1]是要查找的元素
            driver.find_element(element_split[0], element_split[1]).send_keys(args[2].strip())
            return True
        else:
            print('input命令不正取,请检查')
            return False

    @classmethod
    def singleclick(cls, *args):
        print('singleclick的参数:{}'.format(args[1]))
        if args and len(args) >= 2:
            element_split = args[1].split(':')
            driver.find_element(element_split[0], element_split[1]).click()
            return True
        else:
            print('singleclick命令不正取,请检查')
            return False

    @classmethod
    def delay(cls, *args):
        print('睡眠参数:{}'.format(args[1]))
        if args and len(args) >= 2:
            time.sleep(int(args[1]))
            return True
        else:
            print('delay命令参数不正取,请检查')
            return False

run.py

PowerShell复制代码

from selenium import webdriver
from util import Util
from keywords import KeyWord


def run_case_from_txt():
    data = Util.get_test_data_from_txt('data.txt')
    for line in data:
        print('当前执行:{}'.format(line))
        if line.startswith('#'):
            continue
        key_words = line.split(";")
        # 判断是否有这个方法
        if hasattr(KeyWord, key_words[0]):
            # 调用关键字对应的方法
            action = getattr(KeyWord, key_words[0])
            result = action(*key_words)
            if not result:
                print('{}命令执行错误,测试终止'.format(action))
                break
            else:
                print('{}命令执行成功'.format(action))
    pass


if __name__ == '__main__':
    ru
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值