关键字 + excel数据 驱动设计 — 基于关键字驱动结构实现RobotFramework测试框架底层核心

rf最为出名的就是关键字驱动结合数据驱动,基于表格编程的形态实现自动化测试。
基于python+Excel实现rf的底层逻辑:
  1.在excel中填入关键字以及对应的参数
  2.读取excel内容
  3.基于excel内容执行相对于的关键字函数,实现自动化测试

1.excel

 

 

2.关键字驱动类

# web_key_demo02.py +++++++++++++++++++++++++++++++++
import time
from selenium import webdriver
​
#基于type生成对应的浏览器对象
def browser(txt):
    try:
        # driver本身只限于webdriver对象
        driver = getattr(webdriver,txt)()
    except Exception as e:
        driver = webdriver.Chrome()
    return driver
​
class KeyDemo:
    def __init__(self, txt):
        self.driver = browser(txt)
    #访问url
    def open(self,txt):
        self.driver.get(txt)
    #元素定位:8种元素定位
    def locator(self,name,value):
        return self.driver.find_element(name.strip(),value.strip())
    #输入
    def input(self, name,value,txt):
        self.locator(name, value).send_keys(txt)
    #点击
    def click(self, name,value):
        self.locator(name.strip(),value.strip()).click()
    #关闭浏览器
    def quit(self):
        self.driver.quit()
    def sleep(self,txt):
        time.sleep(txt)

 

3.读取数据自动化执行

# read.py +++++++++++++++++++++++++++++++++
import openpyxl
from web_key_demo02 import KeyDemo
​
# 生成表格对象
excel = openpyxl.load_workbook('./data/test_case.xlsx')
# 工作表sheet的名字组成的列表
sheets = excel.sheetnames
for sheet in sheets:
    # 工作表对象
    sh = excel[sheet]
    for line_value in sh.values:
        # 一行一行的数据
        # print(line_value)
        # 表头不处理
        if type(line_value[0]) == int:
            data = {}
            data['name'] = line_value[2]
            data['value'] = line_value[3]
            data['txt'] = line_value[4]
            # 去除空数据
            for key in list(data.keys()):
                if not data[key]:
                    del data[key]
            # 实例化driver对象
            if line_value[1] == 'browser':
                kd = KeyDemo(**data)
            else:
                # 反射拿到浏览器对象的各个方法,加括号传入参数执行
                getattr(kd, line_value[1])(**data)
​

 

 

posted @ 2021-05-26 17:00  www.pu  Views(610)  Comments(0Edit  收藏  举报