自动化测试框架的概念
- 使用框架可以提高自动化测试代码的可复用性、可维护性和可扩展性。
- 框架设计比较灵活,并没有通用的标准来规定框架必须具备什么结构或功能,框架的目的只有一个,就是提高测试效率,降低测试成本。
自动化测试框架的两大核心功能:驱动测试、辅助测试。
- 驱动测试
- 数据驱动(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
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('命令成功')
通过以上方法就是关键字驱动,判断关键字是否为能解析的属性,然后根据的对应的关键字做出对应的操作