混合驱动测试框架(二)_eval执行函数表达式

上一篇已经把添加联系人的测试用例写好了。

一.先把生成函数表达式的函数封装一下

在这里插入图片描述



def Package(operate_value,location_type,location_key,key_word):
    '''
    构建函数表达式
    :param operate_value:
    :param location_type:
    :param location_key:
    :param key_word:
    :return:
    '''
    if operate_value and location_type is None and location_key is None:
        if isinstance(operate_value, int):
            method_express = key_word + "(" + str(operate_value) + ")"
        else:
            method_express = key_word + "('" + operate_value + "')"

    # 只有关键字不为空
    if location_type is None and location_key is None and operate_value is None:
        method_express = key_word + "(" + ")"

    # 只有操作值为空
    if operate_value is None and location_key and location_type:
        method_express = key_word + "('" + location_type + "'" + "," + "'" + location_key + "')"

    # 都不为空
    if operate_value and location_type and location_key:
        if isinstance(operate_value, int):
            method_express = key_word + "('" + location_type + "'" + "," + "'" + location_key + "'" + "," + str(
                operate_value) + ")"
        else:
            method_express = key_word + "('" + location_type + "'" + "," + "'" + location_key + "'" + "," + "'" + operate_value + "')"

    return method_express

还是可以运行成功
在这里插入图片描述

二.测试一下Add_Person.py这个文件代码是否正确

添加成功
在这里插入图片描述

注意在调用elementAction里的函数时要给elementAction里的driver赋值
在这里插入图片描述

三.继续完善项目

因为从头到尾都只使用一个excel,我们将他申明到包Test Cases下的init文件里。(__init__里的变量是该包下的全局变量)
在这里插入图片描述

然后改写Add_person里的函数
在这里插入图片描述
在这里插入图片描述

贴一下修改之后的Add_person.py

from Action import elementAction
from ConfigFiles.ConfigPath import xlsxPath
from Utils.ExcelOperate import ExcelOperate
from Action.elementAction import *
from Utils.Package_Function import Package
from TestCases import excel

def add_person(data_sheet,step_sheet):
    '''
    添加联系人
    :param excel:
    :param data_sheet:
    :param step_sheet:
    :return:
    '''
    try:
        # 获取数据源行数
        data_row_nums = excel.get_rows_nums(data_sheet)
        # 获取步骤行数
        step_row_nums = excel.get_rows_nums(step_sheet)
        # 记录step_sheet成功的行数,若全部成功,则代表添加联系人成功
        success_record = 0
        # data_sheet里数据需要执行的行数
        need_record = 0
        # 读取数据源
        for i in range(2,data_row_nums+1):
            # 判断此条数据是否需要执行
            if excel.get_cell_value(i,6,data_sheet) == 'y':
                need_record += 1
                # 获取该行各单元格的数据
                name = excel.get_cell_value(i,1,data_sheet)
                mail = excel.get_cell_value(i,2,data_sheet)
                phone = excel.get_cell_value(i,3,data_sheet)
                is_star = excel.get_cell_value(i,4,data_sheet)
                remark = excel.get_cell_value(i,5,data_sheet)

                # 记录执行成功的步骤数
                for j in range(2,step_row_nums+1):
                    # 获取执行步骤内的各项数据
                    step_desc = excel.get_cell_value(j,2,step_sheet)
                    key_word = excel.get_cell_value(j,3,step_sheet)
                    location_type = excel.get_cell_value(j,4,step_sheet)
                    location_key = excel.get_cell_value(j,5,step_sheet)
                    operate_value = excel.get_cell_value(j,6,step_sheet)


                    # 当操作之operate_value的形式如同${xxx}用数据源中的xxx来替换掉
                    if isinstance(operate_value,str) and '$' in operate_value and '{' in operate_value and '}' in operate_value:
                        # 做一个切片操作,截取字符串的第三位到倒数第二位
                        operate_value = eval(operate_value[2:-1])
                    # 构建函数表达式
                    method_express = Package(operate_value,location_type,location_key,key_word)

                    # 执行上面构造的函数
                    # print(method_express)
                    if operate_value != '不收藏联系人':
                        # 执行click函数
                        eval(method_express)
                        success_record += 1
                    else:
                        success_record += 1

                # 如果执行成功步骤数 == 总步骤数,代表添加联系人成功
                if success_record +1 == step_row_nums:
                    excel.modify_cell(i,7,'添加联系人成功',data_sheet)
                    print('添加就诊人成功')
                    success_record = 0


    except Exception as e:
        print(e)

if __name__ == '__main__':
    # excel = ExcelOperate()
    # excel.load_workbook(xlsxPath)
    data_sheet = excel.get_sheet_by_name('add_person')
    step_sheet = excel.get_sheet_by_name('contract')

    # 登录邮箱
    driver = webdriver.Chrome()
    driver.get('https://mail.163.com/')
    driver.maximize_window()
    iframe = driver.find_element_by_tag_name('iframe')
    driver.switch_to.frame(iframe)
    driver.find_element_by_name('email').send_keys('lsqtester001')
    driver.find_element_by_name('password').send_keys('qwer123')
    driver.find_element_by_id('dologin').click()
    time.sleep(2)

    elementAction.driver = driver
    add_person(data_sheet,step_sheet)

四.再把执行关键字驱动的代码补下

新建一个函数准备执行首页的全部测试用例,是否执行那里为y就执行
在这里插入图片描述
在这里插入图片描述

首先获取数据驱动+关键字驱动的用例并执行,也就是调用我们刚刚完成好的Add_Person里的代码
亲测执行成功
在这里插入图片描述

然后完成不需要数据驱动,仅仅使用关键字驱动的用例
获取到页
在这里插入图片描述

然后需要获取的就是以下四列数据,这部分代码在关键字驱动框架里已经写过了
在这里插入图片描述

获取值成功并生成相应的表达式
在这里插入图片描述

把print换成eval
在这里插入图片描述

那么既可以执行纯关键字驱动的框架用例,也可以执行关键字+数据驱动的用例,混合驱动框架就是这点内容了
把Test_All.py这个页面的代码贴一下

import time

from selenium import webdriver
from Action.elementAction import *
from Action import elementAction
from TestCases import excel
from TestCases.Add_Person import add_person
from Utils.Package_Function import Package
def test_all():
    # 获取首页即用例页的sheet
    first_sheet = excel.get_sheet_by_name('测试用例')
    # 获取用例行数
    case_num = excel.get_rows_nums(first_sheet)
    # 遍历用例
    for i in range(2,case_num+1):
        # 首先判断是否需要执行
        if excel.get_cell_value(i,7,first_sheet) == 'y':
            case_name = excel.get_cell_value(i,2,first_sheet)
            # 获取框架驱动类型
            driver_kind = excel.get_cell_value(i,4,first_sheet)
            # 获取要操作流程的sheet名
            step_sheet_name = excel.get_cell_value(i,5,first_sheet)
            if driver_kind == '数据驱动':
                # 获取数据源sheet名
                data_sheet_name = excel.get_cell_value(i,6,first_sheet)
                data_sheet  = excel.get_sheet_by_name(data_sheet_name)
                step_sheet = excel.get_sheet_by_name(step_sheet_name)
                # 以下的执行用例的代码照抄Add_Person里main函数下的测试代码即可
                driver = webdriver.Chrome()
                driver.get('https://mail.163.com/')
                driver.maximize_window()
                iframe = driver.find_element_by_tag_name('iframe')
                driver.switch_to.frame(iframe)
                driver.find_element_by_name('email').send_keys('lsqtester001')
                driver.find_element_by_name('password').send_keys('qwer123')
                driver.find_element_by_id('dologin').click()
                time.sleep(2)
                elementAction.driver = driver
                add_person(data_sheet,step_sheet)
            elif driver_kind == '关键字':
                # 获取操作流程的sheet页
                step_sheet = excel.get_sheet_by_name(step_sheet_name)
                # 获取步骤数
                step_nums = excel.get_rows_nums(step_sheet)
                # 执行关键字驱动的相关代码,在关键字驱动框架里已经写过了
                for j in range(2,step_nums+1):
                    key_word = excel.get_cell_value(j,3,step_sheet)
                    location_type = excel.get_cell_value(j,4,step_sheet)
                    location_key = excel.get_cell_value(j,5,step_sheet)
                    operate_value = excel.get_cell_value(j,6,step_sheet)
                    # 获取了这四个值接下来就是生成表达式了
                    method_express = Package(operate_value,location_type,location_key,key_word)
                    eval(method_express)

if __name__ == '__main__':
    test_all()

混合驱动框架的内容到此为止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值