测试工具研发_脚本(最终版):数据个数以及保存文件的处理
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、后续研发测试工具的思路
以上是关于测试工具研发_脚本(最终版):数据个数以及保存文件的处理的主要内容,如果未能解决你的问题,请参考以下文章