应用场景:
每次编写好的用例都在每个测试人员的电脑上,长期以往,人员更替,会有很多测试用例莫名的消失,因此希望在Xmind2testcase平台上新增一个保存功能,能把当时写的用例统一都保存到测试服务器上,方便以后相关人员进行查阅.
思路:
在preview.html页面下添加一个保存按钮,当点击此按钮后,需要有个权限的判断(因为公司中使用xmind导入用例后,可将preview页面发送给研发\产品\项目经理等人查看,此按钮只能测试人员来点击,来确定最终版本的测试用例),判断后将相关的用例文件保存到本地
实现效果:
使用Xmind2testcase平台,导入xmind文件后,在preview.html下新增保存本地按钮,测试人员再确定此版本为最终版本后,点击此按钮,判断当前主机ip是否为测试人员ip,如果是则将此次上传的xmind和csv文件保存到对应服务器的某个文件夹下,不是测试人员的ip的话,则弹出无权限的提示;当保存的文件在本地存在的话则会更新此文件,保证保存的文件为最新版本.
功能点实现及代码如下:
1 保存到本地功能(点击保存,需要在指定path下创建文件夹,每个上传的用例创建一个单独的项目文件夹存放,此文件夹下包含xmind文件和csv文件)
修改preview.html文件,添加保存按钮:
<div>
<a href="{{ url_for("local_save", filename= name) }}">
<input style="font-size: 22px;margin-top: -120px;margin-right:150px;float: right" type="submit" class="pure-button " id="save" value="保存最终版本" />
</a>
</div>
修改application.py文件,新增local_save函数:
@app.route('/local_save/<filename>')
def local_save(filename): # 文件保存到本地方法
full_path = join(app.config['UPLOAD_FOLDER'], filename)
if not exists(full_path):
abort(404)
path = r"E:/Testcase/" # 想要创建的文件
if os.path.isdir(path) == False: # 如果该文件不存在,就创建该文件
os.mkdir(path)
dir_path = path + filename[:-6] # 每个项目的路径
if os.path.isdir(dir_path) == False: # 上传项目后,判断dir_path路径下有没有该项目的文件夹,如没有则创建
os.mkdir(path + filename[:-6])
listdir = os.listdir(dir_path)
for i in range(len(listdir)): # 判断是否文件夹下已存在上传文件名称
if listdir[i] == filename:
os.unlink(dir_path + '/' + listdir[i]) # 删除重名文件,替换重名文件
elif listdir[i][:-4] == filename[:-6]:
os.unlink(dir_path + '/' + listdir[i])
zentao_csv_file = xmind_to_zentao_csv_file(full_path) # 生成csv文件
csv_path = os.path.abspath(zentao_csv_file) # 获取当前文件地址
shutil.move(full_path, dir_path) # 将xmind文件移动到指定文件夹下
shutil.move(csv_path, dir_path) # 将csv文件移动到指定文件夹下
return render_template('savefile.html')
还需要新增一个保存成功的页面savefile.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XMind2TestCase</title>
<link rel="shortcut icon" href="{{ url_for('static',filename='favicon.ico') }}" type="image/x-icon"/>
<link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/pure-min.css') }}">
<link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/custom.css') }}">
</head>
<style>
body{ text-align:center}
#main{ margin-top: 20%}
</style>
<body>
<div class="splash-container" >
<div class="splash" id="main">
<h1>
保存成功!
</h1>
<h2><a href="{{ url_for("index") }}" style="color:#FFFFFF; text-shadow: 5px 5px 11px rgba(0, 0, 0, 0.58);">Go Back</a></h2>
</div>
</div>
</body>
</html>
2 点击保存按钮后,需要增加一个权限判断(使用ip增加权限判断,当测试人员点击保存后,判断该测试人员的电脑ip与写好的ip是否一致,不一致则跳转到无权限的提示页面)
application.py文件下,修改上面的local_save函数:
@app.route('/local_save/<filename>')
def local_save(filename): # 文件保存到本地方法
ip_List = ['这里输入可以执行保存操作的ip'] # ip列表
hostname = socket.gethostname() # 获取主机名称
ip = socket.gethostbyname(hostname) # 获取本主机ip
for i in range(len(ip_List)): # 遍历ip列表
if ip_List[i] == ip: # ip和列表中的一致则执行文件保存
full_path = join(app.config['UPLOAD_FOLDER'], filename)
if not exists(full_path):
abort(404)
path = r"E:/Testcase/" # 想要创建的文件
if os.path.isdir(path) == False: # 如果该文件不存在,就创建该文件
os.mkdir(path)
dir_path = path + filename[:-6] # 每个项目的路径
if os.path.isdir(dir_path) == False: # 上传项目后,判断dir_path路径下有没有该项目的文件夹,如没有则创建
os.mkdir(path + filename[:-6])
listdir = os.listdir(dir_path)
for i in range(len(listdir)): # 判断是否文件夹下已存在上传文件名称
if listdir[i] == filename:
os.unlink(dir_path + '/' + listdir[i]) # 删除重名文件,替换重名文件
elif listdir[i][:-4] == filename[:-6]:
os.unlink(dir_path + '/' + listdir[i])
zentao_csv_file = xmind_to_zentao_csv_file(full_path) # 生成csv文件
csv_path = os.path.abspath(zentao_csv_file) # 获取当前文件地址
shutil.move(full_path, dir_path) # 将xmind文件移动到指定文件夹下
shutil.move(csv_path, dir_path) # 将csv文件移动到指定文件夹下
return render_template('savefile.html')
else:
return render_template('permissions.html', name=filename)
新增permissions.html页面,无保存操作权限的提示页面(会返回一个name参数,用来permissions.html页面能返回到preview.html页面时有用例数据):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XMind2TestCase</title>
<link rel="shortcut icon" href="{{ url_for('static',filename='favicon.ico') }}" type="image/x-icon"/>
<link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/pure-min.css') }}">
<link rel="stylesheet" type="text/css" media="all" href="{{ url_for('static',filename='css/custom.css') }}">
</head>
<style>
body{ text-align:center}
#main{ margin-top: 20%}
</style>
<body>
<div class="splash-container" >
<div class="splash" id="main">
<h1>
无权限执行保存操作!
</h1>
<h2><a href="{{ url_for('preview_file',filename = name )}}" style="color:#FFFFFF; text-shadow: 5px 5px 11px rgba(0, 0, 0, 0.58);">Go Back</a></h2>
</div>
</div>
</body>
</html>
以上就完成了这个小功能,有问题或有需要目前修改的源码可私信或评论!