资讯专栏INFORMATION COLUMN

测试工具研发_脚本(最终版):数据个数以及保存文件的处理

jindong / 3144人阅读

摘要:文章目录数据个数以及保存文件处理代码框架后续研发测试工具的思路数据个数以及保存文件处理默认显示在一个弹出窗体中将保存的数据存入指定文件中清空界面上所有文件的内容根据需要的数量生成测试数据,根据选择确认是否要保存成文件依

1、V4.0 数据个数以及保存文件处理

(1)默认显示在一个弹出窗体中
(2)将保存的数据存入指定文件中
(3)清空界面上所有文件的内容
(4)根据需要的数量生成测试数据,根据选择确认是否要保存成文件

# V4.0 依据组成格式进行测试数据的创建import wximport string, randomimport csv# 定义类class GUI_CreatData:    # 类的初始化    def __init__(self):        # 初始化APP        self.app = wx.App()        # 定义窗体        self.window = wx.Frame(None, title="试验", size=(500, 500))        # 定义panel        self.panel = wx.Panel(self.window)        # 定义标签        self.lblmin = wx.StaticText(self.panel, label="最小长度")        # 定义文本框        self.txtmin = wx.TextCtrl(self.panel)        # 定义标签        self.lblmax = wx.StaticText(self.panel, label="最大长度")        # 定义文本框        self.txtmax = wx.TextCtrl(self.panel)        # 定义复选框        self.chkB1 = wx.CheckBox(self.panel, label="包含大写字母")        self.chkB2 = wx.CheckBox(self.panel, label="包含小写字母")        self.chkB3 = wx.CheckBox(self.panel, label="包含数字")        self.chkB4 = wx.CheckBox(self.panel, label="包含符号")        self.chkB5 = wx.CheckBox(self.panel, label="包含序号")        self.chkB6 = wx.CheckBox(self.panel, label="包含邮箱后缀")        self.chkB7 = wx.CheckBox(self.panel, label="保存到文件")        # 定义标签        self.lblfile = wx.StaticText(self.panel, label="文件名及路径")        # 定义文本框        self.txtfile = wx.TextCtrl(self.panel)        # 定义标签        self.lblshu = wx.StaticText(self.panel, label="数据总数")        # 定义文本框,通过value属性给了一个默认值        self.txtshu = wx.TextCtrl(self.panel, value="1")        # 定义2个按钮        self.butOK = wx.Button(self.panel, label="确定")        self.butreset = wx.Button(self.panel, label="重置")    # 控件布局    def layout(self):        # 设置布局        box1 = wx.BoxSizer()  # 默认是横向的        box1.Add(self.lblmin, flag=wx.LEFT | wx.TOP, border=10)        box1.Add(self.txtmin, flag=wx.LEFT | wx.TOP, border=10)        box1.Add(self.lblmax, flag=wx.LEFT | wx.TOP, border=10)        box1.Add(self.txtmax, flag=wx.LEFT | wx.TOP, border=10)        # 设置第二行的布局        box2 = wx.BoxSizer()  # 默认是横向的        box2.Add(self.chkB1, flag=wx.LEFT | wx.TOP, border=10)        box2.Add(self.chkB2, flag=wx.LEFT | wx.TOP, border=10)        # 设置第三行的布局        box3 = wx.BoxSizer()  # 默认是横向的        box3.Add(self.chkB3, flag=wx.LEFT | wx.TOP, border=10)        box3.Add(self.chkB4, flag=wx.LEFT | wx.TOP, border=10)        # 设置第四行的布局        box4 = wx.BoxSizer()  # 默认是横向的        box4.Add(self.chkB5, flag=wx.LEFT | wx.TOP, border=10)        box4.Add(self.chkB6, flag=wx.LEFT | wx.TOP, border=10)        # 设置第五行的布局        box5 = wx.BoxSizer()  # 默认是横向的        box5.Add(self.chkB7, flag=wx.LEFT | wx.TOP, border=10)        box5.Add(self.lblfile, flag=wx.LEFT | wx.TOP, border=10)        box5.Add(self.txtfile, flag=wx.LEFT | wx.TOP, border=10)        # 设置第六行的布局        box6 = wx.BoxSizer()  # 默认是横向的        box6.Add(self.lblshu, flag=wx.LEFT | wx.TOP, border=10)        box6.Add(self.txtshu, flag=wx.LEFT | wx.TOP, border=10)        # 设置第七行的布局        box7 = wx.BoxSizer()  # 默认是横向的        box7.Add(self.butOK, flag=wx.LEFT | wx.TOP, border=10)        box7.Add(self.butreset, flag=wx.LEFT | wx.TOP, border=10)        # 设置垂直布局        boxFinal = wx.BoxSizer(wx.VERTICAL)        for i in range(1, 8):            boxFinal.Add(eval(f"box{i}"))  # eval函数将字符串转换为对象        self.panel.SetSizer(boxFinal)    # 事件绑定:绑定确定按钮对应的事件    def eventbind(self):        self.butOK.Bind(wx.EVT_BUTTON, self.checkinput)        self.butreset.Bind(wx.EVT_BUTTON, self.reset)    # 事件:对界面进行校验.这是一个事件,用来绑定按钮的,所以入参里面需要带一个event    # 事件:对界面进行校验    def checkinput(self, event):        # 对长度进行校验,并生成指定的测试数据        self.checklen()        # 没有选择任何条件,默认生成字母串        check_result = self.nonemethod()        # 对输入的数量进行校验        number = self.checknum()        # 如果没选条件,且数量不等于0        str1 = ""        if check_result == 0 and number != 0:            for i in range(1, number + 1):                re = self.creatdata()                str1 = str1 + re + "/n"            print(str1)            # 如果没有选择“保存到文件”,            if not self.chkB7.GetValue():                # 则弹出对话框,显示生成                self.showdata(str1)            else:                # 调用文件保存方法                self.savefile(str1)        # 如果选了条件,且数量也不等于0        elif check_result != 0 and number != 0:            for i in range(1, number + 1):                re = self.creatdatamethod(i)                str1 = str1 + re + "/n"            print(str1)            # 如果没有选择“保存到文件”,            if not self.chkB7.GetValue():                # 则弹出对话框,显示生成                self.showdata(str1)            else:                # 调用文件保存方法                self.savefile(str1)    # 文件保存方法    def savefile(self, data):        # 首先判断文件名文本框是否输入合法的路径及文件名内容        filetmp = self.txtfile.GetValue()        # 如果文件路径为空        if filetmp == "":            # 则设置一个错误提示弹框            dlg = wx.MessageDialog(None, "请输入文件名及路径!", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)            # 如果选择yes            if dlg.ShowModal() == wx.ID_YES:                # 则关闭弹框                dlg.Destroy()                return 0        # 路径及文件名正确        else:            # 创建一个文件            file = open(filetmp, "w", newline="")            # 创建编辑器            write = csv.writer(file)            # 用编辑器写入内容            for element in data.split("/n"):                write.writerow([element])                # write.writerow(element)            # 关闭文件            file.close()    # 在新窗口总显示数据    def showdata(self, re):        # 创建一个窗口        self.window = wx.Frame(None, title="显示测试数据", size=(800, 300))        # 创建一个面板(面板里面用来设置各种你想要的控件)        self.panel = wx.Panel(self.window)        # 在面板中设置一个文本框,然后定义其相关属性        wx.TextCtrl(self.panel, value=f"{re}/n", style=wx.TE_MULTILINE, size=(400, 300))  # 文本控件显示多行        # 最后呈现窗口        self.window.Show(True)    # 校验输入的数量    def checknum(self):        # 判断数量的文本框是否为空        if self.txtshu.GetValue() == "" or int(self.txtshu.GetValue()) <= 1:            # 弹出错误提示框            dlg = wx.MessageDialog(None, "请输入数量为大于1的整数!", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)            if dlg.ShowModal() == wx.ID_YES:                dlg.Destroy()        else:            number = int(self.txtshu.GetValue())            return number    # 根据选择的条件生成数据    def creatdatamethod(self, number):        # 判断生成的是哪些条件self.check_list        emaildata = ["@qq.com", "@126.com", "@163.com", "@sina.com"]        self.no = f"{number}"        str1 = ""        if "up" in self.check_list:            str1 = str1 + string.ascii_uppercase * 3        if "low" in self.check_list:            str1 = str1 + string.ascii_lowercase * 3        if "num" in self.check_list:            str1 = str1 + string.digits * 3        if "pnu" in self.check_list:            str1 = str1 + string.punctuation * 3        num = random.randint(int(self.minlen), int(self.maxlen))        # 如果你在界面选择了至少一个条件,那么按照指定规则生成        if str1 != "":            resultdata = "".join(random.sample(str1, num))        # 如果什么都没有选,则自动生成一个        else:            resultdata = self.creatdata()        if "no" in self.check_list:            resultdata = self.no + resultdata        if "email" in self.check_list:            # 任意取出一个邮箱后缀            resultdata = resultdata + random.choice(emaildata)        # print(resultdata)        return resultdata    # 判断最小长度和最大长度    def checklen(self):        # 判断最小长度输入是否为空        self.minlen = self.txtmin.GetValue().strip()  # 去除左右两边的空格        self.maxlen = self.txtmax.GetValue().strip()        if self.minlen == "":            # 给出提示            dlg = wx.MessageDialog(None, "最小长度不能为空!", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)            if dlg.ShowModal() == wx.ID_YES:                dlg.Destroy()                return 0        # 判断最大长度输入是否为空        elif self.maxlen == "":            # 给出提示            dlg = wx.MessageDialog(None, "最大长度不能为空!", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)            if dlg.ShowModal() == wx.ID_YES:                dlg.Destroy()                return 0        elif int(self.minlen) > int(self.maxlen):            # 给出提示            dlg = wx.MessageDialog(None, "最大长度不能小于最小长度!", "错误信息", wx.YES_DEFAULT | wx.ICON_QUESTION)            if dlg.ShowModal() == wx.ID_YES:                dlg.Destroy()                return 0        # 调用生成测试数据,调测用        # if self.minlen != "" and self.maxlen != "" and int(self.minlen) <= int(self.maxlen):        #     self.creatdata()    # 没有选择任何ch框生成子母传    def nonemethod(self):        # 如果大写字母框被选择        self.check_list = []        if self.chkB1.GetValue():            self.check_list.append("up")        if self.chkB2.GetValue():            self.check_list.append("low")        if self.chkB3.GetValue():            self.check_list.append("num")        if self.chkB4.GetValue():            self.check_list.append("pnu")        if self.chkB5.GetValue():            self.check_list.append("no")        if self.chkB6.GetValue():            self.check_list.append("email")        # print(self.check_list)        # 判断list列表是否为空        if len(self.check_list) == 0:            return 0        else:            return 1    # 事件:把界面的内容清空[添加询问ing]    def reset(self, event):        # dlg = wx.MessageDialog(None, "是否需要删除?", "提示信息", wx.YES_NO)        # if dlg.ShowModal() == wx.ID_YES:        #     dlg.Destroy()        #     return 0        self.txtmin.SetValue("")        self.txtmax.SetValue("")        # 将选择的框全部清空        self.chkB1.SetValue(False)        self.chkB2.SetValue(False)        self.chkB3.SetValue(False)        self.chkB4.SetValue(False)        self.chkB5.SetValue(False)        self.chkB6.SetValue(False)    # 创建测试数据    def creatdata(self):        num = random.randint(int(self.minlen), int(self.maxlen))        str1 = string.ascii_letters+string.digits+string.ascii_letters+string.digits        resultdata = "".join(random.sample(str1, num))        # print(resultdata)        return resultdata    # 运行app    def run(self):        self.window.Show(True)        self.app.MainLoop()if __name__ == "__main__":    gui = GUI_CreatData()    gui.layout()    gui.eventbind()    gui.run()

2、4.0代码框架

3、后续研发测试工具的思路

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121751.html

相关文章

  • 使用 EOLINKER 进行接口测试最佳路径 (上)

    摘要:创建测试环境并导入到用例集操作步骤如下动态图创建测试环境并导入到用例集动态图说明第一个页面为测试项目列表页面。第三个页面为前置用例集列表页面。 本文内容: 测试脚本管理:讲述如何在 EOLINKER 上设计测试项目目录结构。 编写测试脚本:讲述如何在 EOLINKER 上编写接口测试脚本。 测试脚本执行及报告:讲述如何在 EOLINKER 上执行接口测试脚本,及如何查看和下载测试报告...

    lordharrd 评论0 收藏0
  • 使用 EOLINKER 进行接口测试最佳路径 (上)

    摘要:创建测试环境并导入到用例集操作步骤如下动态图创建测试环境并导入到用例集动态图说明第一个页面为测试项目列表页面。第三个页面为前置用例集列表页面。 本文内容: 测试脚本管理:讲述如何在 EOLINKER 上设计测试项目目录结构。 编写测试脚本:讲述如何在 EOLINKER 上编写接口测试脚本。 测试脚本执行及报告:讲述如何在 EOLINKER 上执行接口测试脚本,及如何查看和下载测试报告...

    plokmju88 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<