前些天问过大家 WPF 框架的桌面应用怎么 UI 自动化,在此谢谢大家的建议,我都一一尝试过,最后是用 “pywinauto” 进行控件识别配合 “pyautogui” 控制鼠标键盘事件解决的。
我现在写好了一个表单必填项验证的自动化测试脚本,用到的模块如下:
pywinauto #控件识别
pyautogui #键盘鼠标控制
pytest #测试框架
faker #虚拟数据创造
现在是测试一个有 24 项必填项的表单,验证各个必填项是否成功判断。目前我的编码结构如下:
# 1.填写必填项
class Sharp_Instrument_Injury_Required_Fields(object):
# 姓名填写
def name_fill_in(self):
name_window = self.child("S1","Edit")
name_window.type_keys(str(self.fake.name()))
# 2.删除必填项
class Required_Missing(Sharp_Instrument_Injury_Required_Fields):
# 查找姓名填写项,删除内容
def gender_not_filled(self):
self.Operation(self.gender,0.7,'click')
# 调用判断方法返回 True或False
return self.faild_fill_in(self.gender_missing,func = self.gender_fill_in)
# 点击保存按钮
def save_button(self):
save_button_window = self.window_1.child_window(title="保存(S)", control_type="Button")
save_button_window.click_input()
pyautogui.press('Enter')
# 失败判断
def faild_fill_in(self,image,func,**kw):
# 图片坐标作为参数传入
filled_missing = self.imagepath(image)
save_succeed = self.imagepath(self.save_succeed)
# 判断是否"保存成功"
if save_succeed != None:
self.ensure()
self.required_fields_fill_in()
# self.scroll(6,80)
return 'False'
# 判断是否"必填项提示"
elif filled_missing != None:
self.ensure()
# 将函数作为参数传入
func(**kw)
return 'True'
# 判断是否其他提示
else:
self.ensure()
func(**kw)
return 'Exception'
# 3.pytest测试框架
class Test_Required_Missing(object):
# 验证姓名空值是否提示“姓名不能为空”
def test_name_missing(self):
r = Required_Missing()
# 断言
assert r.name_not_filled() == 'True'
我就是这样三层的模式,操作步骤是 “填写必填项”→“删除必填项”→“点击保存按钮”→“断言验证结果”
但不知道是不是正确的,看别人的自动化代码,是将测试用例操作步骤放在 pytest/unittest 框架内的,而我是单独写了一个测试用例操作的类,pytest 仅用来做断言,24 个必填项就有 24 个方法。
所以在此想请教大家,测试用例是必须写在测试框架里的吗?还有我这个可以怎么进行优化呢?还望大家不吝赐教,谢谢!