提交 463e0ba2 authored 作者: mry's avatar mry

feat(base): 新增了测试报告接口

上级 e18356b6
......@@ -150,20 +150,6 @@
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.quhaodian/freemaker -->
<dependency>
<groupId>com.quhaodian</groupId>
<artifactId>freemaker</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
......
package org.matrix.testNg.web;
/**
* 执行testNg测试接口
*
* @author MRY
*/
public interface TestNg {
}
package org.matrix.testNg.web.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 模板中的公共部分
*
* @author MRY
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataBean {
/**
* 用例总数
*/
private Integer total;
/**
* 通过用例数
*/
private Integer passNum;
/**
* 失败用例数
*/
private Integer failNum;
/**
* 执行总时间
*/
private Long allTime;
/**
* 用例通过率
*/
private Integer probability;
/**
* 前置行动ID组,例如:1,2,3
*/
private String moveBefore;
/**
* 后置行动ID组,例如:1,2,3
*/
private String moveAfterCase;
/**
* 测试执行后行动ID组,例如:1,2,3
*/
private String moveAfterTest;
}
package org.matrix.testNg.web.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.matrix.actuators.checkpoint.CheckPointResult;
/**
* 模板中的非公共部分
*
* @author MRY
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataBeans {
/**
* 用例名称
*/
private String testCaseName;
/**
* 用例类型
*/
private String type;
/**
* 详情参数
*/
private String detail;
/**
* 测试描述
*/
private String description;
/**
* 执行结果
*/
private Boolean result;
/**
* 单个测试时间
*/
private String duration;
/**
* 结果信息
*/
private CheckPointResult resultMessage;
}
package org.matrix.testNg.web.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author MRY
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataBeansJobVo {
private List<DataBeansVo> dataBeansVoList;
}
package org.matrix.testNg.web.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 整个模板需要的信息
*
* @author MRY
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataBeansVo {
/**
* 报告公共部分
*/
private DataBean dataBean;
/**
* 细节部分
*/
private List<DataBeans> dataBeanLists;
}
package org.matrix.testNg.web.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author MRY
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReportMessage {
/**
* 报告生成的地址
*/
private String url;
}
package org.matrix.testNg.web.report;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.matrix.exception.GlobalException;
import org.matrix.testNg.web.entity.DataBean;
import org.matrix.testNg.web.entity.DataBeans;
import org.matrix.testNg.web.entity.ReportMessage;
import org.matrix.util.ReporterUtils;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author mruny
*/
public class GenerateReporter {
private static final LocalDateTime TIME = LocalDateTime.now();
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
private static final String STRING = DATE_TIME_FORMATTER.format(TIME);
private static final String OUTPUT_FOLDER = System.getProperty("user.dir") + "/";
private static final String FILE_NAME = STRING + "-testNg.html";
public ReportMessage generateReport() {
try {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Template temp = cfg.getTemplate("overviewBeautiful.ftl");
Map context = new HashMap();
ReporterData reporterData = new ReporterData();
DataBean dataBean = reporterData.testDataBean();
List<DataBeans> dataBeansList = reporterData.testDataBeans();
// 这里是公共的信息.
for (DataBeans bean : dataBeansList) {
context.put("overView", dataBean);
if (bean.getResult()) {
context.put("pass", bean);
} else {
context.put("fail", bean);
}
}
//文件夹不存在的话进行创建
File reportDir = new File(OUTPUT_FOLDER);
if (!reportDir.exists() && !reportDir.isDirectory()) {
reportDir.mkdir();
}
// 输出流
FileOutputStream out = new FileOutputStream(OUTPUT_FOLDER + "/" + FILE_NAME);
Writer writer = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
// 转换输出
temp.process(context, writer);
writer.flush();
ReportMessage reportMessage = new ReportMessage();
reportMessage.setUrl(OUTPUT_FOLDER + "/" + FILE_NAME);
return reportMessage;
} catch (Exception e) {
throw new GlobalException(e.getMessage());
} finally {
ReporterUtils.map = new HashMap<>();
}
}
}
\ No newline at end of file
package org.matrix.testNg.web.report;
import org.matrix.testNg.web.entity.DataBean;
import org.matrix.testNg.web.entity.DataBeans;
import org.matrix.testNg.web.entity.DataBeansVo;
import org.matrix.util.ReporterUtils;
import java.util.List;
/**
* @author mruny
*/
public class ReporterData {
/**
* 模板公共部分
*
* @return 补全了的所有报告信息
*/
public DataBean testDataBean() {
DataBeansVo dataBeansVo = ReporterUtils.map.get("dataBeansVo");
int passNum = 0;
int failNum = 0;
// 测试结果汇总数据
DataBean dataBean = dataBeansVo.getDataBean();
List<DataBeans> dataBeanLists = dataBeansVo.getDataBeanLists();
for (DataBeans dataBeanList : dataBeanLists) {
if (dataBeanList.getResult()) {
passNum += 1;
} else {
failNum += 1;
}
}
//成功
dataBean.setPassNum(passNum);
//失败
dataBean.setFailNum(failNum);
//总数
dataBean.setTotal(passNum + failNum);
//通过率
dataBean.setProbability(passNum / (passNum + failNum));
// TODO 时间需要处理
return dataBean;
}
/**
* 模板的细节部分
*
* @return 报告中细节部分的信息
*/
public List<DataBeans> testDataBeans() {
return ReporterUtils.map.get("dataBeansVo").getDataBeanLists();
}
}
\ No newline at end of file
package org.matrix.testNg.web.report;
/**
* @author MRY
*/
public class ReporterDataJob {
}
package org.matrix.testNg.web.report;
import org.matrix.testNg.web.TestNg;
import org.matrix.testNg.web.entity.DataBeansVo;
import org.matrix.testNg.web.entity.ReportMessage;
import org.matrix.util.ReporterUtils;
import org.springframework.stereotype.Component;
/**
* @author MRY
*/
@Component
public class TestNgImpl implements TestNg {
/**
* 报告生成的位置
*
* @param dataBeansVo 报告中需要的信息
* @return 报告位置信息
*/
public ReportMessage getReportUrl(DataBeansVo dataBeansVo) {
ReporterUtils.map.put("dataBeansVo",dataBeansVo);
GenerateReporter generateReporter = new GenerateReporter();
ReportMessage reportMessage = generateReporter.generateReport();
return reportMessage;
}
}
package org.matrix.testNg.report;
package org.matrix.testNg.xml.reportXml;
import lombok.AllArgsConstructor;
import lombok.Data;
......
package org.matrix.testNg.report;
package org.matrix.testNg.xml.reportXml;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import org.matrix.exception.GlobalException;
import org.matrix.testNg.TestPigeon;
import org.matrix.util.ReporterUtils;
import org.testng.*;
import org.testng.xml.XmlSuite;
......@@ -36,7 +36,7 @@ public class GenerateReporter implements IReporter {
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
//freemaker的模板文件
Template temp = cfg.getTemplate("overview.ftl");
Template temp = cfg.getTemplate("overviewBeautiful.ftl");
Map context = new HashMap();
for (ISuite suite : suites) {
Map<String, ISuiteResult> suiteResults = suite.getResults();
......@@ -70,8 +70,8 @@ public class GenerateReporter implements IReporter {
} catch (Exception e) {
throw new GlobalException(e.getMessage());
} finally {
TestPigeon.resultMap = new HashMap<>();
TestPigeon.userResultMap = new HashMap<>();
ReporterUtils.resultMap = new HashMap<>();
ReporterUtils.userResultMap = new HashMap<>();
}
}
}
\ No newline at end of file
package org.matrix.testNg.report;
package org.matrix.testNg.xml.reportXml;
import org.matrix.database.entity.TestCase;
import org.matrix.database.service.ITestCaseService;
......
package org.matrix.testNg.report;
package org.matrix.testNg.xml.reportXml;
import lombok.extern.slf4j.Slf4j;
import org.matrix.actuators.checkpoint.CheckPointResult;
......@@ -6,7 +6,7 @@ import org.matrix.actuators.usecase.TestCaseExecuteResult;
import org.matrix.database.entity.TestCase;
import org.matrix.database.service.ITestCaseService;
import org.matrix.exception.GlobalException;
import org.matrix.testNg.TestPigeon;
import org.matrix.util.ReporterUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.testng.*;
......@@ -72,12 +72,12 @@ public class ReporterData {
ReportUnits units = new ReportUnits();
for (ITestResult result : sortByTime(map.getAllResults())) {
List<TestCaseExecuteResult> testCaseExecuteResults;
Map<Long, List<TestCaseExecuteResult>> longListMap = TestPigeon.userResultMap.get(1L);
Map<Long, List<TestCaseExecuteResult>> longListMap = ReporterUtils.userResultMap.get(1L);
Set<Long> longs = longListMap.keySet();
for (Long caseId : longs) {
TestCase testCase = java.util.Optional.of(testCaseService.getById(caseId))
.orElseThrow(() -> new GlobalException(String.format("没有找到id = %d 的TestCase", caseId)));
testCaseExecuteResults = TestPigeon.resultMap.get(caseId);
testCaseExecuteResults = ReporterUtils.resultMap.get(caseId);
for (TestCaseExecuteResult testCaseExecuteResult : testCaseExecuteResults) {
data.setDuration(units.formatDuration(result.getEndMillis()
- result.getStartMillis()));
......
package org.matrix.testNg;
package org.matrix.testNg.xml.testXml;
import java.sql.*;
import java.util.HashMap;
......@@ -13,6 +13,7 @@ public class DataProviderForDb implements Iterator<Object[]> {
ResultSet resultSet;
ResultSetMetaData resultSetMetaData;
Boolean first = true;
public DataProviderForDb(String driver, String url
, String userName, String password, String sql) {
try {
......@@ -28,10 +29,10 @@ public class DataProviderForDb implements Iterator<Object[]> {
@Override
public boolean hasNext() {
if (first){
if (first) {
first = false;
return true;
}else {
} else {
boolean flag = false;
try {
flag = resultSet.next();
......
package org.matrix.testNg;
package org.matrix.testNg.xml.testXml;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
......@@ -14,6 +14,7 @@ import org.matrix.database.service.ITestCaseService;
import org.matrix.database.service.ITestDataService;
import org.matrix.exception.GlobalException;
import org.matrix.socket.vo.CaseExecuteVo;
import org.matrix.util.ReporterUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -24,18 +25,22 @@ import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import static org.matrix.util.ReporterUtils.resultMap;
/**
* 执行xml测试
*
* @author mry
*/
@Slf4j
@Component
@SpringBootTest(classes = BaseBootApplication.class)
public class TestPigeon extends AbstractTestNGSpringContextTests {
public class TestXml extends AbstractTestNGSpringContextTests {
String sql;
Long envId;
......@@ -76,7 +81,6 @@ public class TestPigeon extends AbstractTestNGSpringContextTests {
this.projectId = projectId;
}
/**
* XML中的SQL决定了执行什么用例, 执行多少条用例, SQL的搜索结果为需要测试的测试用例
*/
......@@ -85,32 +89,29 @@ public class TestPigeon extends AbstractTestNGSpringContextTests {
return new DataProviderForDb(driver, url, username, password, sql);
}
public static Map<Long, Map<Long, List<TestCaseExecuteResult>>> userResultMap = new HashMap<>();
public static Map<Long, List<TestCaseExecuteResult>> resultMap = new HashMap<>();
@Test(dataProvider = "testData")
public void test(Map<String, String> data) {
// log.info("这是testData");
// String id = data.get("id");
// long caseId = Long.parseLong(id);
// TestCase testCase = java.util.Optional.of(caseService.getById(caseId))
// .orElseThrow(() -> new GlobalException(String.format("没有找到id = %d 的TestCase", caseId)));
// List<TestData> testDataList = java.util.Optional.of(dataService.list(Wrappers.lambdaQuery(TestData.class)
// .eq(TestData::getTestCaseId, caseId)))
// .orElseThrow(() -> new GlobalException(String.format("没有找到testCaseId = %d 的TestData", caseId)));
// CaseExecuteVo caseExecuteVo = new CaseExecuteVo();
// caseExecuteVo.setProjectId(testCase.getProjectId());
// caseExecuteVo.setEnvId(envId);
// caseExecuteVo.setUserId(1L);
// caseExecuteVo.getTestCaseListDataBtoList().add(
// new TestCaseListDataBto(
// testCase,
// testDataList
// )
// );
// List<TestCaseExecuteResult> testCaseExecuteResults = caseActuator.runTestCase(null, caseExecuteVo);
// resultMap.put(caseId, testCaseExecuteResults);
// userResultMap.put(1L, resultMap);
log.info("这是testData");
String id = data.get("id");
long caseId = Long.parseLong(id);
TestCase testCase = java.util.Optional.of(caseService.getById(caseId))
.orElseThrow(() -> new GlobalException(String.format("没有找到id = %d 的TestCase", caseId)));
List<TestData> testDataList = java.util.Optional.of(dataService.list(Wrappers.lambdaQuery(TestData.class)
.eq(TestData::getTestCaseId, caseId)))
.orElseThrow(() -> new GlobalException(String.format("没有找到testCaseId = %d 的TestData", caseId)));
CaseExecuteVo caseExecuteVo = new CaseExecuteVo();
caseExecuteVo.setProjectId(projectId);
caseExecuteVo.setEnvId(envId);
caseExecuteVo.setUserId(1L);
caseExecuteVo.getTestCaseListDataBtoList().add(
new TestCaseListDataBto(
testCase,
testDataList
)
);
List<TestCaseExecuteResult> testCaseExecuteResults = caseActuator.runTestCase(null, caseExecuteVo);
resultMap.put(caseId, testCaseExecuteResults);
ReporterUtils.userResultMap.put(1L, resultMap);
}
......
package org.matrix.util;
import org.matrix.actuators.usecase.TestCaseExecuteResult;
import org.matrix.testNg.web.entity.DataBeansVo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author MRY
*/
public class ReporterUtils {
public static Map<Long, Map<Long, List<TestCaseExecuteResult>>> userResultMap = new HashMap<>();
public static Map<Long, List<TestCaseExecuteResult>> resultMap = new HashMap<>();
public static Map<String, DataBeansVo> map = new HashMap<>();
public static Map<String, String> mapUrl = new HashMap<>();
}
......@@ -11,11 +11,11 @@ spring:
url: jdbc:mysql://192.168.100.248:3306/key_stone?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: root
zentao:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.100.247:3306/zentao?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
# zentao:
# driverClassName: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://192.168.100.247:3306/zentao?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&&zeroDateTimeBehavior=convertToNull
# username: root
# password: 123456
mybatis-plus:
type-enums-package: org.matrix.enums
......
......@@ -7040,28 +7040,13 @@
<div class="col-sm-6 b-r" style="height:350px;width: 50%;">
<form class="form-horizontal" style="width: 100%;">
<div class="form-group" style="width: 100%;">
<label class="col-sm-2 control-label text-navy" style="width: 15%;">项目名称:</label>
<div class="col-sm-5" style="width: 55%;">
<span class="form-control" id="testName" ></span>
</div>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">测试总数:</label>
<div class="col-sm-5" style="width: 15%;">
<span class="form-control" id="testAll" ></span>
</div>
</div>
<div class="form-group" style="width: 100%;">
<label class="col-sm-2 control-label text-navy" style="width: 15%;">启动时间:</label>
<div class="col-sm-5" style="width: 55%;">
<span class="form-control" id="beginTime"></span>
</div>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">通过:</label>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">用例总数:</label>
<div class="col-sm-5" style="width: 15%;">
<span class="form-control" id="testPass"></span>
</div>
</div>
<div class="form-group" style="width: 100%;" >
<label class="col-sm-2 control-label text-navy" style="width: 15%;">耗费时间:</label>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">通过:</label>
<div class="col-sm-5" style="width: 20%;">
<span class="form-control" id="totalTime"></span>
</div>
......@@ -7075,26 +7060,17 @@
</div>
</div>
<div class="form-group" style="width: 100%;" >
<label class="col-sm-2 control-label text-navy" style="width: 15%;">总数:</label>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">未执行:</label>
<div class="col-sm-5" style="width: 20%;">
<span class="form-control" id="query_total_count"></span>
</div>
<label class="col-sm-2 control-label text-warning" style="width: 15%;">处理数量:</label>
<div class="col-sm-5" style="width: 15%;">
<span class="form-control text-warning" id="query_lable_count"></span>
</div>
<label class="col-sm-2 control-label text-danger" style="width: 15%;">处理比例:</label>
<div class="col-sm-5" style="width: 20%;">
<span class="form-control text-danger" id="query_lable_percent"></span>
</div>
</div>
<div class="form-group" style="width: 100%;">
<label class="col-sm-2 control-label text-navy" style="width: 15%;">版本信息:</label>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">执行时间(s):</label>
<label text-warning style="width: 85%;" id="testVersion"></label>
</div>
<div class="form-group" style="width: 100%;">
<label class="col-sm-2 control-label text-navy" style="width: 15%;">API信息:</label>
<label class="col-sm-2 control-label text-navy" style="width: 15%;">用例通过率:</label>
<label text-warning style="width: 85%;" id="testAPI"></label>
</div>
</form>
......@@ -7126,37 +7102,20 @@
<div class="ibox-title">
<h5>详细数据</h5>
</div>
<div class="ibox-content" style="width: 100%;" >
<div class="input-group panel-heading" style="width: 100%; background-color: #1ab394; margin-bottom: 10px; text-align: left; font-family: Consolas;">
<label style="color: snow;width: 10%;">根据ContentID过滤:</label>
<select class="chosen-select form-control" data-placeholder="请选择" style="width: 10%;" name="filterClass" id="filterClass">
<option value="" style="width: 30%;">请选择</option>
</select>
<label style="color: snow;width: 10%;">&nbsp;&nbsp;&nbsp;&nbsp;根据Result过滤:</label>
<select class="chosen-select form-control" data-placeholder="请选择" style="width: 10%;" name="filterResult" id="filterResult">
<option value="" style="width: 30%;">请选择</option>
</select>
<label style="color: snow;width: 10%;">&nbsp;&nbsp;&nbsp;&nbsp;根据Type过滤:</label>
<select class="chosen-select form-control" data-placeholder="请选择" style="width: 10%;" name="filterDomain" id="filterDomain">
<option value="" style="width: 30%;">请选择</option>
</select>
<label style="color: snow;width: 11%;">&nbsp;&nbsp;&nbsp;&nbsp;根据Name过滤:</label>
<select class="chosen-select form-control" data-placeholder="请选择" style="width: 10%;" name="filterFailReason" id="filterFailReason">
<option value="" style="width: 30%;">请选择</option>
</select>
</div>
<table class="table table-bordered">
<thead>
<tr style="width:100%;">
<th style="width:5%;">编号</th>
<th style="width:6%;">ContentID</th>
<th style="width:15%;">Contetn</th>
<th style="width:10%;">Type</th>
<th style="width:29%;">DetailInfo</th>
<th style="width:10%;">CosTime</th>
<th style="width:5%;">Result</th>
<th style="width:8%;">Name</th>
<th style="width:5%;">操作</th>
<th style="width:4%;">编号</th>
<th style="width:6%;">用例名称</th>
<th style="width:6%;">用例类型</th>
<th style="width:9%;">详细参数</th>
<th style="width:9%;">前置动作</th>
<th style="width:9%;">中置动作</th>
<th style="width:9%;">后置动作</th>
<th style="width:9%;">用例描述</th>
<th style="width:15%;">执行结果</th>
<th style="width:6%;">执行时间(s)</th>
<th style="width:15%;">执行结果</th>
</tr>
</thead>
<tbody id="detailBody">
......@@ -7347,8 +7306,8 @@
data: [resultData["query_total_count"],resultData["testAll"], resultData["testPass"], resultData["testError"], resultData["testSkip"]]
}]
};
// var chart = echarts.init(document.getElementById("echarts-map-chart"));
// chart.setOption(option);
var chart = echarts.init(document.getElementById("echarts-map-chart"));
chart.setOption(option);
var mainContainer = document.getElementById('echarts-map-chart');
//用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
......@@ -7409,8 +7368,8 @@
}
]
};
// var chart = echarts.init(document.getElementById("echarts-map-chart2"));
// chart.setOption(option);
var chart = echarts.init(document.getElementById("echarts-map-chart2"));
chart.setOption(option);
var mainContainer = document.getElementById('echarts-map-chart2');
//用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
......@@ -7472,9 +7431,9 @@
}
]
};
// var chart = echarts.init(document.getElementById("echarts-map-chart3"));
// chart.resize("")
// chart.setOption(option);
var chart = echarts.init(document.getElementById("echarts-map-chart3"));
chart.resize("")
chart.setOption(option);
var mainContainer = document.getElementById('echarts-map-chart3');
//用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
......@@ -7499,21 +7458,21 @@
pie3();
// var mainContainer = document.getElementById('echarts-map-div');
// //用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
// var resizeMainContainer = function () {
// mainContainer.style.width = window.innerWidth*0.8+'px';
// mainContainer.style.height = window.innerHeight*0.3+'px';
// };
// //设置div容器高宽
// resizeMainContainer();
// // 初始化图表
// var mainChart = echarts.init(mainContainer);
// $(window).on('resize',function(){//
// //屏幕大小自适应,重置容器高宽
// resizeMainContainer();
// mainChart.resize();
// });
var mainContainer = document.getElementById('echarts-map-div');
//用于使chart自适应高度和宽度,通过窗体高宽计算容器高宽
var resizeMainContainer = function () {
mainContainer.style.width = window.innerWidth*0.8+'px';
mainContainer.style.height = window.innerHeight*0.3+'px';
};
//设置div容器高宽
resizeMainContainer();
// 初始化图表
var mainChart = echarts.init(mainContainer);
$(window).on('resize',function(){//
//屏幕大小自适应,重置容器高宽
resizeMainContainer();
mainChart.resize();
});
$(function(){
......
......@@ -129,7 +129,11 @@
<div class="failBtn">失败</div><#--<th>执行结果</th>-->
</td>
<td>${failCase.duration!}</td><#--<th>执行时间(s)</th>-->
<td>${failCase.throwable!}</td><#--<th>结果信息</th>-->
<td>
${failCase.throwable!}
</br> <#--<th>结果信息</th>-->
${failCase.resultMessage!}
</td>
</tr>
</#list>
<#list pass as passCase>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -7,11 +7,11 @@
<parameter name="envId" value="1"/>
<parameter name="projectId" value="2"/>
<classes>
<class name="org.matrix.testNg.TestPigeon"/>
<class name="org.matrix.testNg.xml.testXml.TestXml"/>
</classes>
</test>
<listeners>
<listener class-name="org.matrix.testNg.report.GenerateReporter"/>
<listener class-name="org.matrix.testNg.xml.reportXml.GenerateReporter"/>
</listeners>
</suite>
\ No newline at end of file
......@@ -92,6 +92,20 @@
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.quhaodian/freemaker -->
<dependency>
<groupId>com.quhaodian</groupId>
<artifactId>freemaker</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论