上一篇已经把添加联系人的测试用例写好了。
一.先把生成函数表达式的函数封装一下
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()
混合驱动框架的内容到此为止