前些天问过大家 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 个方法。
所以在此想请教大家,测试用例是必须写在测试框架里的吗?还有我这个可以怎么进行优化呢?还望大家不吝赐教,谢谢!


↙↙↙阅读原文可查看相关链接,并与作者交流