This commit is contained in:
zhaoyafan 2022-08-31 04:24:00 +08:00
parent 1959dc267b
commit 224cb999ef
19 changed files with 7 additions and 697 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.pyc
*.pyo
~$*.*
venv
__pycache__

View File

@ -992,6 +992,7 @@ class HTMLTestRunner(Template_mixin):
self.passrate = None
self.errormsg = None
self.logspath = log and os.path.abspath(log)
self.logspath and open(self.logspath, 'wb').close()
self.logo = logo
self.sign = sign
self.stream = stream or (report and open(os.path.abspath(report), 'wb'))

View File

@ -1,689 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>测试报告</title>
<meta name="generator" content="HTMLTestRunner"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<link rel="stylesheet" href="https://www.fanscloud.net/res/bootstrap/3.0.3/css/bootstrap.min.css">
<script src="https://www.fanscloud.net/res/jquery/2.0.0/jquery.min.js"></script>
<script src="https://www.fanscloud.net/res/bootstrap/3.0.3/js/bootstrap.min.js"></script>
<script src="https://img.hcharts.cn/highcharts/highcharts.js"></script>
<script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
<style type="text/css" media="screen">
body { font-family: Microsoft YaHei;padding: 20px; font-size: 100%; }
table { font-size: 100%; }
.table tbody tr td{
vertical-align: middle;
}
/* -- header ---------------------------------------------------------------------- */
.header .description, .attribute {
clear: both;
}
/* --- 失败和错误合集样式 -- Gelomen --- */
.failCollection, .errorCollection {
width: auto;
float: left;
}
#failedCaseOl li {
color: red
}
#errorsCaseOl li {
color: orange
}
/* --- 打开截图特效样式 -- Gelomen --- */
.data-img{
cursor:pointer
}
.pic_looper{
width:100%;
height:100%;
position: fixed;
left: 0;
top:0;
opacity: 0.6;
background: #000;
display: none;
z-index: 100;
}
.pic_show{
width:100%;
position:fixed;
left:0;
top:0;
right:0;
bottom:0;
margin:auto;
text-align: center;
display: none;
z-index: 100;
}
.pic_box{
padding:10px;
width:90%;
height:90%;
margin:40px auto;
text-align: center;
overflow: hidden;
}
.pic_box img{
max-width: 100%;
max-height: 100%;
width: auto;
height: auto;
-moz-box-shadow: 0px 0px 20px 0px #000;
-webkit-box-shadow: 0px 0px 20px 0px #000;
box-shadow: 0px 0px 20px 0px #000;
}
/* --- 饼状图样式 */
#container {
max-width: 100%;
width: 450px;
height: 350px;
float: left;
}
#container_extend {
max-width: 100%;
width: 550px;
height: 400px;
float: left;
}
/* -- report ------------------------------------------------------------------------ */
#total_row { font-weight: bold; }
.passedCase { color: #3FB83F; font-family: Menlo,Monaco,Consolas,"Courier New",monospace; font-size: 14px; font-weight: bold; }
.failedCase { color: #D9433F; font-family: Menlo,Monaco,Consolas,"Courier New",monospace; font-size: 14px; font-weight: bold; }
.errorsCase { color: #F0A02F; font-family: Menlo,Monaco,Consolas,"Courier New",monospace; font-size: 14px; font-weight: bold; }
.hiddenRow { display: none; }
.testcase { margin-left: 1em; word-break: break-all; white-space: pre-wrap; }
.screenshot:link { text-decoration: none;color: deeppink; }
.screenshot:visited { text-decoration: none;color: deeppink; }
.screenshot:hover { text-decoration: none;color: darkcyan; }
.screenshot:active { text-decoration: none;color: deeppink; }
</style>
</head>
<body >
<script language="javascript" type="text/javascript">
$(function(){
// 修改 失败 和 错误 用例里对应按钮的颜色ClassName为动态加载 -- Gelomen
$("button").each(function () {
var text = $(this).text();
if(text == "失败"){
$(this).addClass("btn-danger")
}else if(text == "错误") {
$(this).addClass("btn-warning")
}else if(text == "通过") {
$(this).addClass("btn-success")
}
});
// 给失败和错误合集加样式 -- Gelomen
var p_attribute = $("p.attribute");
p_attribute.eq(4).addClass("failCollection");
p_attribute.eq(5).addClass("errorCollection");
// 打开截图,放大,点击任何位置可以关闭图片
$(".screenshot").click(function(){
var img = $(this).attr("img");
$('.pic_show img').attr('src', img);
$('.pic_looper').fadeIn(200);
$('.pic_show').fadeIn(200);
var browserHeight = $(window).height();
var pic_boxHeight = $(".pic_box").height();
var top = (browserHeight - pic_boxHeight)/2;
$('.pic_box').css("margin-top", top + "px")
});
$('.pic_looper, .pic_show').click(function(){
$('.pic_looper').fadeOut(200);
$('.pic_show').fadeOut(200)
});
var resize_action = function(){
// 改变窗口大小时,自动改变图表边距
var browserWidth = $(window).width();
var margin_left = browserWidth - 360 - 450 - 550 - 40;
if(margin_left <= 0){
$("#container").css("width", "100%");
$("#container_extend").css("width", "100%");
$("#testinfo").css("width", "100%");
$("#container").css("margin-left", "0px");
}else {
$("#container").css("width", "450px");
$("#container_extend").css("width", "550px");
$("#testinfo").css("width", "25%");
$("#container").css("margin-left", (margin_left - 1 - 16) + "px");
}
}
resize_action();
$(window).resize(function(){
// 改变窗口大小时,自动改变图片与顶部的距离
var browserHeight = $(window).height();
var pic_boxHeight = $(".pic_box").height();
var top = (browserHeight - pic_boxHeight)/2;
$('.pic_box').css("margin-top", top + "px");
resize_action();
});
// 超过浏览器高度时,回到顶部按钮出现
$(window).scroll(function(){
var browserHeight = $(window).height();
var top = $(window).scrollTop();
if(top >= browserHeight){
$("#toTop").css("display", "block")
}else {
$("#toTop").css("display", "none")
}
})
// 增加回到顶部过程动画
$("#toTop").click(function() {
$("html,body").animate({"scrollTop":0}, 500)
})
// 增加条形图
$('#container_extend').highcharts({
chart: {
type: 'bar'
},
credits: {
enabled: false
},
navigation: {
buttonOptions: {
enabled: false
}
},
title: {
text: '用例集合情况'
},
xAxis: {
categories: ["测试用例"]
},
yAxis: {
min: 0,
title: {
text: '用例数量'
},
reversedStacks: false
},
legend: {
reversed: false
},
plotOptions: {
series: {
stacking: 'normal'
}
},
series: [{
name: '通过',
color: '#64bb64',
data: [4]
}, {
name: '失败',
color: '#f16d7e',
data: [0]
}, {
name: '错误',
color: '#fdc68c',
data: [0]
}]
})
// 增加饼状图
$('#container').highcharts({
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
spacing : [0, 0, 0, 0]
},
credits: {
enabled: false
},
navigation: {
buttonOptions: {
enabled: false
}
},
title: {
floating: true,
text: '测试结果占比'
},
tooltip: {
pointFormat: '<text style="font-size:10px">{series.name}: {point.percentage:.1f}%</text>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
colors: ['#64bb64', '#f16d7e', '#fdc68c'],
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
},
point: {
events: {
mouseOver: function(e) { // 鼠标滑过时动态更新标题
chart.setTitle({
text: e.target.name+ '\t'+ e.target.y + ' 个'
});
}
}
}
}
},
series: [{
type: 'pie',
innerSize: '80%',
name: '比例',
data: [
['通过', 4], ['失败', 0], ['错误', 0]
]
}]
}, function(c) {
// 环形圆心
var centerY = c.series[0].center[1],
titleHeight = parseInt(c.title.styles.fontSize);
c.setTitle({
x:0,
y:centerY + titleHeight/2
});
chart = c;
});
// 查看 失败 和 错误 合集链接文字切换 -- Gelomen
$(".showDetail").click(function () {
if($(this).html() == "点击查看"){
$(this).html("点击收起")
}else {
$(this).html("点击查看")
}
})
});
output_list = Array();
/*level 调整增加只显示通过用例的分类 --Findyou / 修复筛选显示bug --Gelomen
0:Summary //all hiddenRow
1:Failed //pt&et hiddenRow, ft none
2:Passed //pt none, ft&et hiddenRow
3:Errors //pt&ft hiddenRow, et none
4:All //all none
*/
function showCase(level) {
trs = document.getElementsByTagName("tr");
for (var i = 0; i < trs.length; i++) {
tr = trs[i];
id = tr.id;
if (id.substr(0,2) == 'ft') {
if (level == 2 || level == 0 || level == 3) {
tr.className = 'hiddenRow';
}
else {
tr.className = '';
// 切换筛选时只显示预览 -- Gelomen
// 失败
$("div[id^='div_ft']").attr("class", "collapse");
$("div[id^='div_et']").attr("class", "collapse");
$("div[id^='div_pt']").attr("class", "collapse");
}
}
if (id.substr(0,2) == 'pt') {
if (level == 1 || level == 0 || level == 3) {
tr.className = 'hiddenRow';
}
else {
tr.className = '';
// 切换筛选时只显示预览 -- Gelomen
// 通过
$("div[id^='div_ft']").attr("class", "collapse");
$("div[id^='div_et']").attr("class", "collapse");
$("div[id^='div_pt']").attr("class", "collapse");
}
}
if (id.substr(0,2) == 'et') {
if (level == 1 || level == 0 || level == 2) {
tr.className = 'hiddenRow';
}
else {
tr.className = '';
// 切换筛选时只显示预览 -- Gelomen
// 错误
$("div[id^='div_ft']").attr("class", "collapse");
$("div[id^='div_et']").attr("class", "collapse");
$("div[id^='div_pt']").attr("class", "collapse");
}
}
}
//加入详细切换文字变化
detail_class=document.getElementsByClassName('detail');
if (level == 4) {
for (var i = 0; i < detail_class.length; i++){
detail_class[i].innerHTML="收起"
}
}
else{
for (var i = 0; i < detail_class.length; i++){
detail_class[i].innerHTML="详细"
}
}
}
function showClassDetail(cid, count) {
var id_list = Array(count);
var toHide = 1;
for (var i = 0; i < count; i++) {
//ID修改.为_
tid0 = 't' + cid.substr(1) + '_' + (i+1);
tid = 'f' + tid0;
tr = document.getElementById(tid);
if (!tr) {
tid = 'p' + tid0;
tr = document.getElementById(tid);
if (!tr) {
tid = 'e' + tid0;
tr = document.getElementById(tid);
}
}
id_list[i] = tid;
if (tr.className) {
toHide = 0;
}
}
for (var i = 0; i < count; i++) {
tid = id_list[i];
//修改点击无法收起的BUG加入【详细】切换文字变化 --Findyou
if (toHide) {
document.getElementById(tid).className = 'hiddenRow';
document.getElementById(cid).innerText = "详细"
}
else {
document.getElementById(tid).className = '';
document.getElementById(cid).innerText = "收起"
}
}
}
function html_escape(s) {
s = s.replace(/&/g,'&amp;');
s = s.replace(/</g,'&lt;');
s = s.replace(/>/g,'&gt;');
return s;
}
</script>
<div class='pic_looper'></div>
<div class='pic_show'>
<div class='pic_box'>
<img src=''/>
</div>
</div>
<div class='header'>
<div id="testinfo" style="max-width: 360px; width: auto; float: left;">
<h1 style="margin: 5px 0px 10px 0px; font-family: Microsoft YaHei;">测试报告</h1>
<p class='attribute'><strong>开始时间 : </strong> 2022-08-21 02:45:51</p>
<p class='attribute'><strong>合计耗时 : </strong> 00:00:03</p>
<p class='attribute'><strong>测试结果 : </strong> 总共 4通过 4失败 0错误 0通过率 100.00%</p>
<p class='attribute'><strong>失败用例 : </strong></p>
<p class='attribute'><strong>错误用例 : </strong></p>
<p class='description'></p>
</div>
<div id="container"></div>
<div id="container_extend"></div>
</div>
<div style="width: auto; clear: both;">
<p id='show_detail_line'>
<a class="btn btn-primary" href='javascript:showCase(0)'>概要 100.00%</a>
<a class="btn btn-success" href='javascript:showCase(2)'>通过 4</a>
<a class="btn btn-danger" href='javascript:showCase(1)'>失败 0</a>
<a class="btn btn-warning" href='javascript:showCase(3)'>错误 0</a>
<a class="btn btn-info" href='javascript:showCase(4)'>全部 4</a>
</p>
</div>
<table id='result_table' class="table table-condensed table-bordered table-hover">
<colgroup>
<col align='left' style="width: 300px;"/>
<col align='right' style="width: 285px;"/>
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' />
<col align='right' style="width: 120px;"/>
</colgroup>
<tr id='header_row' class="text-center success" style="font-weight: bold;font-size: 14px;">
<td>测试用例</td>
<td>说明</td>
<td>总计</td>
<td>通过</td>
<td>失败</td>
<td>错误</td>
<td>耗时</td>
<td>详细</td>
</tr>
<tr class='passClass warning'>
<td>测试用例</td>
<td></td>
<td class="text-center">4</td>
<td class="text-center">4</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">3.008秒</td>
<td class="text-center"><a href="javascript:showClassDetail('c1',4)" class="detail" id='c1'>查看全部</a></td>
</tr>
<tr id='pt1_1' class='hiddenRow'>
<td class='passedCase' style="vertical-align: middle"><div class='testcase'>test0001_login2</div></td>
<td style="vertical-align: middle">P0:测试正常登录</td>
<td colspan='5' align='center'>
<button id='btn_pt1_1' type="button" class="btn btn-xs" data-toggle="collapse" data-target='#div_pt1_1'>通过</button>
<div id='div_pt1_1' class="collapse in">
<pre style="text-align:left;font-family:monospace;font-size:12px;color:#119611">pt1_1:
2022-08-21 02:45:51,565 - D: test0001_login2
2022-08-21 02:45:51,902 - D:
[-&gt;]
GET / HTTP/1.1
Host: www.fanscloud.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
[&lt;-]
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 20 Aug 2022 18:45:51 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
&lt;!doctype html&gt;
&lt;html lang="zh-cn"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&gt;
&lt;title&gt;阿凡的Blog🌿&lt;/title&gt;
&lt;meta name="keywo ... [MORE 98% OMITTED HERE]
</pre>
</div>
</td>
<td class='passedCase' style="vertical-align: middle"></td>
</tr>
<tr id='pt1_2' class='hiddenRow'>
<td class='passedCase' style="vertical-align: middle"><div class='testcase'>test0002_login4</div></td>
<td style="vertical-align: middle">P0:测试正常登录</td>
<td colspan='5' align='center'>
<button id='btn_pt1_2' type="button" class="btn btn-xs" data-toggle="collapse" data-target='#div_pt1_2'>通过</button>
<div id='div_pt1_2' class="collapse in">
<pre style="text-align:left;font-family:monospace;font-size:12px;color:#119611">pt1_2:
2022-08-21 02:45:52,410 - D: test0002_login4
2022-08-21 02:45:52,709 - D:
[-&gt;]
GET / HTTP/1.1
Host: www.fanscloud.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
[&lt;-]
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 20 Aug 2022 18:45:52 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
&lt;!doctype html&gt;
&lt;html lang="zh-cn"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&gt;
&lt;title&gt;阿凡的Blog🌿&lt;/title&gt;
&lt;meta name="keywo ... [MORE 98% OMITTED HERE]
</pre>
</div>
</td>
<td class='passedCase' style="vertical-align: middle"></td>
</tr>
<tr id='pt1_3' class='hiddenRow'>
<td class='passedCase' style="vertical-align: middle"><div class='testcase'>test0003_login1</div></td>
<td style="vertical-align: middle">P1:测试正常登录</td>
<td colspan='5' align='center'>
<button id='btn_pt1_3' type="button" class="btn btn-xs" data-toggle="collapse" data-target='#div_pt1_3'>通过</button>
<div id='div_pt1_3' class="collapse in">
<pre style="text-align:left;font-family:monospace;font-size:12px;color:#119611">pt1_3:
2022-08-21 02:45:53,136 - D: test0003_login1
2022-08-21 02:45:53,426 - D:
[-&gt;]
GET / HTTP/1.1
Host: www.fanscloud.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
[&lt;-]
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 20 Aug 2022 18:45:53 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
&lt;!doctype html&gt;
&lt;html lang="zh-cn"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&gt;
&lt;title&gt;阿凡的Blog🌿&lt;/title&gt;
&lt;meta name="keywo ... [MORE 98% OMITTED HERE]
</pre>
</div>
</td>
<td class='passedCase' style="vertical-align: middle"></td>
</tr>
<tr id='pt1_4' class='hiddenRow'>
<td class='passedCase' style="vertical-align: middle"><div class='testcase'>test0004_login3</div></td>
<td style="vertical-align: middle">P1:测试正常登录</td>
<td colspan='5' align='center'>
<button id='btn_pt1_4' type="button" class="btn btn-xs" data-toggle="collapse" data-target='#div_pt1_4'>通过</button>
<div id='div_pt1_4' class="collapse in">
<pre style="text-align:left;font-family:monospace;font-size:12px;color:#119611">pt1_4:
2022-08-21 02:45:53,883 - D: test0004_login3
2022-08-21 02:45:54,188 - D:
[-&gt;]
GET / HTTP/1.1
Host: www.fanscloud.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
[&lt;-]
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 20 Aug 2022 18:45:54 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
&lt;!doctype html&gt;
&lt;html lang="zh-cn"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"&gt;
&lt;title&gt;阿凡的Blog🌿&lt;/title&gt;
&lt;meta name="keywo ... [MORE 98% OMITTED HERE]
</pre>
</div>
</td>
<td class='passedCase' style="vertical-align: middle"></td>
</tr>
<tr id='total_row' class="text-center active">
<td colspan='2'>总计</td>
<td>4</td>
<td>4</td>
<td>0</td>
<td>0</td>
<td>3.008秒</td>
<td>通过100.00%</td>
</tr>
</table>
<div id='footer'>&nbsp;</div>
<div id="toTop" style="position:fixed;right:50px; bottom:30px; width:20px; height:20px;cursor:pointer; display: none">
<a>
<span class="glyphicon glyphicon-eject" style = "font-size:28px;color:#b0b0b0" aria-hidden="true">
</span>
</a>
</div>
<div style='width: auto; height: auto; border: 1px solid #e3e3e3; text-align: center; color: #505050; padding: 4px 0px 4px 0px;'>
<img src='' style='width: auto; height: auto; max-height: 40px;'>
<a href='#' style='font-size: 14px; color: #505050; text-align: center|bottom;'></a>
</div>
</body>
</html>

View File

@ -604,9 +604,7 @@ class TestCase:
raise Exception('Pre-exec case cannot use data files set.')
self.pre_executed_list.append(case_id)
self._test_unit(func_name=func_name, data=data)
# self.__getattribute__(func_name)(data=data)
self._test_unit(func_name=func_name, data=main_case, main=True)
# self.__getattribute__(func_name)(data=main_case, main=True)
self._l and self._l.clear()
write_test_result(main_case_object_cell, 'Passed')
except AssertionError:
@ -785,6 +783,6 @@ if __name__ == '__main__':
testSuite = unittest.TestSuite()
for obj in config['suite']:
testSuite.addTest(unittest.makeSuite(
testCaseClass=TestCase(workbook=obj['workbook'], testcase=obj['testcase'], module=obj['module'], caseid=obj['caseid'], testlves=obj['levels'], organize_mode=obj['organize'], write_test_result=obj['result']).main(), prefix='test'
testCaseClass=TestCase(workbook=obj['workbook'] or './.xlsx', testcase=obj['testcase'] or '测试用例', module=obj['module'], caseid=obj['caseid'], testlves=obj['levels'], organize_mode=obj['organize'], write_test_result=obj['result']).main(), prefix='test'
))
HTMLTestRunner(verbosity=config['verbosity'], report=abs_path(config['report'] or None), log=abs_path(config['log'] or None), title=config['title'] or None, description=config['description'] or None).run(testSuite)

View File

@ -1,5 +1,4 @@
import os
import sys
import time
import threading
from Base.Class.GUI import *
@ -121,7 +120,7 @@ if __name__ == '__main__':
window.mainloop()
_root = _Window('接口自动化测试', w=572, h=450, bg=_cl[0])
_ct.append(_root.Labels(row=0, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='测试用例'))
_ct.append(_root.Labels(row=0, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='用例文件'))
_ct.append(_root.Entrys(row=0, col=1, font=_ft, bg=_cl[1], fg=_cl[2], w=54, readonly=True, text=''))
_ct.append(_root.Button(row=0, col=2, font=_ft, bg=_cl[0], fg=_cl[1], text='选择文件', function=_root.open_testcase))
_ct.append(_root.Labels(row=1, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='用例名称'))
@ -141,7 +140,7 @@ if __name__ == '__main__':
_ct.append(_root.Labels(row=8, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='报告输出路径'))
_ct.append(_root.Entrys(row=8, col=1, font=_ft, bg=_cl[1], fg=_cl[2], w=54, readonly=True, text=''))
_ct.append(_root.Button(row=8, col=2, font=_ft, bg=_cl[0], fg=_cl[1], text='选择目录', function=_root.save_report))
_ct.append(_root.Labels(row=9, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='报告输出路径'))
_ct.append(_root.Labels(row=9, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='日志输出路径'))
_ct.append(_root.Entrys(row=9, col=1, font=_ft, bg=_cl[1], fg=_cl[2], w=54, readonly=True, text=''))
_ct.append(_root.Button(row=9, col=2, font=_ft, bg=_cl[0], fg=_cl[1], text='选择目录', function=_root.save_log))
_ct.append(_root.Labels(row=10, col=0, font=_ft, bg=_cl[0], fg=_cl[1], text='报告标题'))

View File