针对公司项目,我在老师上课讲的基础之上,在yaml解析方法中加入了步骤显示等待和步骤返回值的处理,这样做是因为:1、我需要针对某些步骤做特定的显示等待,2、我需要其中某些步骤的返回值来做断言。代码如下:
测试步骤:
config_output:
# 1、点击“客户端”
- by: xpath
locator: "//[div[text()='客户端']]"
action: click
# 2、点击第一个客户端的呼出设备
- by: xpath
locator: '//*'
action: click
wait: clickable
# 3、点击选择框
- by: xpath
locator: '//*'
action: click
# 4、选择第2个呼出设备
- by: xpath
locator: '//*'
action: click
# 5、获取设备名称
- by: xpath
locator: '//*'
return_value:
# 6、点击保存
- by: xpath
locator: '//*'
action: click
# 7、获取设备名称
- by: xpath
locator: '//*'
return_value:
yaml解析方法
def steps(self,path):
with open(path) as f:
name = inspect.stack()[1].function
steps = yaml.safe_load(f)[name]
rvs = [] # 存放步骤中返回的值,用于最后用例断言
for step in steps:
if "return_value" in steps.keys():
# 执行步骤前,先判断是否该步骤有返回值,有返回值就提取其文本到rvs中
rv = self.get_element(step['by'],step['locator']).text
rvs.append(rv)
if "action" in steps.keys():
action = step["action"]
if action == 'click':
if "wait" in step.keys():
self.wait_element_clickable(step['by',step['locator']]).click()
elif "sleep" == step["wait"]:
self.get_element(step['by'],step['locator']).click()
else:
self.get_element(step['by'],step['locator']).click()
elif action == 'send':
self.get_element(step['by'],step['locator']).send_keys(step['value'])
return rvs
麻烦老师指点下:
1、我这样处理步骤中需要的返回值和步骤需要的显示等待合适吗?有没有考虑不周全的地方(已测试能跑通)和更优的解决方案呢?
2、当需要从外部传入多个测试数据且每个测试数据会有不同的预期(如传入1,预期显示1,传入100,弹出错误提示),这种我知道可以通过pytest的parametrize进行数据驱动,但是不同的预期我该怎么写在yaml解析方法中进行处理呢?
3、这种设计思想与其说是测试步骤的数据驱动,是不是不如叫关键字驱动更合适呢?