数据驱动
- 基于数据流完成流程调度,数据来源于外部,可以从execl,yaml,数据库中获取
- 使用yaml, json等读取数据
- 流程: 读取外部文件 -> 动态创建测试用例
yaml
- pip install pyyaml
- yaml文件操作https://github.com/yaml/pyyaml?spm=a2c6h.12873639.0.0.70ab3ab4BvVbOE
- 简单的步骤驱动例子
- yaml文件: ch2/case.yaml
# 简单的case_yaml模板
- Descripton: 进入搜索页面
Methods: id
Value: ivSearch
Action: click
- Descripton: 搜索测试数据
Methods: id
Value: etSearch
Action: send_keys
data: 测试
- Descripton: 获取搜索值
Methods: id
Value: tvSearchResult
Action: text
- 测试步骤驱动 ch2/test_yaml.py
- 读取yaml文件并且以dict格式输出
- 定义drver: WebDriver (等同于把之前的self.driver传给数据驱动方法)
- 循环每个字典,执行不同的测试步骤
- method函数: 定位有不同方式,这边单独封装,主要涉及的有id,xpath,accessibility_id
- 测试驱动,直接调用self.method函数
class TestCaseTemplate:
def __init__(self, path):
with open(path, 'r', encoding="utf-8") as file:
self.steps = yaml.safe_load(file)
def method(self, driver: WebDriver, method, value):
ele = None
if method == 'id':
ele = driver.find_element_by_id(value)
elif method =='xpath':
ele = driver.find_element_by_xpath(value)
elif method == 'accessibility':
ele = driver.find_element_by_accessibility_id(value)
else:
return 'No element'
return ele
def run(self, driver: WebDriver):
for step in self.steps:
elemet = None
if isinstance(step, dict):
if 'Methods' in step.keys() and 'Value' in step.keys():
elemet = self.method(driver, step['Methods'], step['Value'])
else:
print(step.keys())
if 'Action' in step.keys():
if 'click' in step['Action']:
elemet.click()
elif 'send_keys' in step['Action']:
if 'data' in step.keys():
elemet.send_keys(step['data'])
else:
print('没有输入的测试数据')
elif 'text' in step['Action']:
data = elemet.text
print(data)
github
https://github.com/wangxiao9/appium_demo.git