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

Posted 腾哥儿的测试之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试工具研发_脚本(最终版):数据个数以及保存文件的处理相关的知识,希望对你有一定的参考价值。

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

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

# V4.0 依据组成格式进行测试数据的创建
import wx
import string, random
import 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、后续研发测试工具的思路

以上是关于测试工具研发_脚本(最终版):数据个数以及保存文件的处理的主要内容,如果未能解决你的问题,请参考以下文章

桌面版postman 脚本存在本地还是服务器上

测试工具研发_生成随机用户名

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

链接脚本

链接脚本

链接脚本