Python 请问一下大家,自动化测试编码结构是怎么样的?

小小Prcc · 2020年08月06日 · 最后由 小小Prcc 回复于 2020年08月06日 · 2567 次阅读

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

共收到 6 条回复 时间 点赞
匿名 #1 · 2020年08月06日

测试用例的数据还是要保持在文件里读取较好,而且不用测试框架 你有没有想过多个用例执行时怎么办

用例数据放在文件里这种方式我们以前也是这么做的,但实际并不怎么好用,后来都是放在类里面继承使用,连读文件都省了

匿名 #3 · 2020年08月06日
tianfuzhiguo 回复

不单单是用例数据,还有各种定位数据,如果直接写在代码里,你们不用维护脚本的嘛;

都写在类里面,反正除了一些公共数据我是不喜欢把数据放在文件里面

😂 是很多,1 条用例就要写 1 个方法,24 个必填项就是 24 个方法

tianfuzhiguo 回复

因为现在只写了必填项验证,没考虑数据,之后涉及到数据验证的(登录、边界值等)我打算是把数据单独放一个文件,然后继承或者导入来读取,就是不知道可行度怎么样,之前没有做过自动化😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册