Commit 013f22ff by Li Yongyu

支持用例带{}的

parent aeb72780
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<classes> <classes>
<class name="com.puhui.test.RenMai_APITest"> <class name="com.puhui.test.RenMai_APITest">
<methods> <methods>
<include name="f" invocation-numbers="0 1 2 3 4 5 6 "/> <include name="f" invocation-numbers="0 1 2 3 "/>
</methods> </methods>
</class> </class>
</classes> </classes>
......
package com.offcn.TestUnti;
import io.restassured.response.Response;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class HttpRequest {
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static void main(String[] args) {
// Response s=HttpRequest.sendGet("http://beta.alitest.eoffcn.com/template/addStuden/sign/a75f95ec663ebda46b51f0429b8706ff",
// "user_info=[{\"package_id\":391634,\"username\":\"aaa\",\"phone\":15652333337,\"sso_id\":1}]&timestamp=1548839088&appid=jiaowu");
Response re = HttpRequest.sendGet("http://beta.alitest.eoffcn.com/template/addStudent/sign/1c7e3e07567efbcd42b2fa6cd936784e",
"user_info=[{\"package_id\":391634,\"username\":\"aaa\",\"phone\":15652333337,\"sso_id\":1}]&timestamp=1548841430&appid=jiaowu");
System.out.println(re.getStatusCode());
System.out.println(re.asString());
// try {
// String s1=new String(s.getBytes(),"utf-8");
// System.out.println(s1);
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
}
public static Response sendGet(String url, String param) {
String result = "";
String val="";
BufferedReader in = null;
Response re=null;
try {
// String urlNameString = url ;
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("Authorization", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NSwicGhvbmUiOiIxODUxMTg1MjA0OSIsImlhdCI6MTQ4NzEzMjU0OX0.2aZ8FcfE52CYpXc4VUYjdfzzLzXwVOE-J8CnMlhUPic");
connection.setRequestProperty("Content-Type", "application/json");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
String va=map.get(key).toString();
//System.out.println(key + "--->" + va);
if(va.contains("HTTP/1.1")){
val=va.toString().substring(10, va.toString().length()-4);
//System.out.println(val);
}
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
// o.write(line+"\r\n");
result += line;
result += "\r\n";
}
// o.close();
IoResponse ir=new IoResponse();
re=ir.setResponseValue(val,result);
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return re;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("Authorization", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NSwicGhvbmUiOiIxODUxMTg1MjA0OSIsImlhdCI6MTQ4NzEzMjU0OX0.2aZ8FcfE52CYpXc4VUYjdfzzLzXwVOE-J8CnMlhUPic");
conn.setRequestProperty("Content-Type", "application/json");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
result += "\r\n";
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
package com.offcn.TestUnti;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import io.restassured.http.Cookie;
import io.restassured.http.Cookies;
import io.restassured.http.Headers;
import io.restassured.mapper.ObjectMapper;
import io.restassured.mapper.ObjectMapperType;
import io.restassured.path.json.JsonPath;
import io.restassured.path.json.config.JsonPathConfig;
import io.restassured.path.xml.XmlPath;
import io.restassured.path.xml.XmlPath.CompatibilityMode;
import io.restassured.path.xml.config.XmlPathConfig;
import io.restassured.response.Response;
import io.restassured.response.ResponseBody;
import io.restassured.response.ValidatableResponse;
public class IoResponse {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public Response setResponseValue(final String StatusCode,final String asString){
Response re= new Response() {
@Override
public ValidatableResponse then() {
// TODO Auto-generated method stub
return null;
}
@Override
public long timeIn(TimeUnit arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public long time() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Response thenReturn() {
// TODO Auto-generated method stub
return null;
}
@Override
public String statusLine() {
// TODO Auto-generated method stub
return null;
}
@Override
public int statusCode() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String sessionId() {
// TODO Auto-generated method stub
return null;
}
@Override
public Headers headers() {
// TODO Auto-generated method stub
return null;
}
@Override
public String header(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getTimeIn(TimeUnit arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public long getTime() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getStatusLine() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getStatusCode() {
// TODO Auto-generated method stub
return Integer.valueOf(StatusCode);
}
@Override
public String getSessionId() {
// TODO Auto-generated method stub
return null;
}
@Override
public Headers getHeaders() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getHeader(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Cookies getDetailedCookies() {
// TODO Auto-generated method stub
return null;
}
@Override
public Cookie getDetailedCookie(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<String, String> getCookies() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getCookie(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getContentType() {
// TODO Auto-generated method stub
return null;
}
@Override
public ResponseBody getBody() {
// TODO Auto-generated method stub
return null;
}
@Override
public Cookies detailedCookies() {
// TODO Auto-generated method stub
return null;
}
@Override
public Cookie detailedCookie(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<String, String> cookies() {
// TODO Auto-generated method stub
return null;
}
@Override
public String cookie(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String contentType() {
// TODO Auto-generated method stub
return null;
}
@Override
public ResponseBody body() {
// TODO Auto-generated method stub
return null;
}
@Override
public Response andReturn() {
// TODO Auto-generated method stub
return null;
}
@Override
public String asString() {
// TODO Auto-generated method stub
return asString;
}
@Override
public InputStream asInputStream() {
// TODO Auto-generated method stub
return null;
}
@Override
public byte[] asByteArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public XmlPath xmlPath(CompatibilityMode arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public XmlPath xmlPath(XmlPathConfig arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public XmlPath xmlPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T path(String arg0, String... arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public JsonPath jsonPath(JsonPathConfig arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public JsonPath jsonPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public XmlPath htmlPath() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T as(Class<T> arg0, ObjectMapper arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T as(Class<T> arg0, ObjectMapperType arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T as(Class<T> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public String print() {
// TODO Auto-generated method stub
return null;
}
@Override
public String prettyPrint() {
// TODO Auto-generated method stub
return null;
}
@Override
public Response prettyPeek() {
// TODO Auto-generated method stub
return null;
}
@Override
public Response peek() {
// TODO Auto-generated method stub
return null;
}
};
return re;
}
}
...@@ -102,6 +102,7 @@ public class editOutline extends NWN implements API { ...@@ -102,6 +102,7 @@ public class editOutline extends NWN implements API {
parameter = parameter.replace("id=id", "id="+ c_id ); parameter = parameter.replace("id=id", "id="+ c_id );
} }
data.put("parameter", parameter); data.put("parameter", parameter);
return data; return data;
} }
......
...@@ -29,8 +29,7 @@ public class nwngetsign { ...@@ -29,8 +29,7 @@ public class nwngetsign {
sortstring.toString(); sortstring.toString();
System.out.println("sortstring====" + sortstring); System.out.println("sortstring====" + sortstring);
String str = sortstring.toString(); String str = sortstring.toString();
str = str + "bf2h3%^j?ljkj3706kji88697"; //教务的加密,规则固定需要加 str = str + "bf2h3%^j?ljkj3706kji88697"; //教务的加密,规则固定需要加
System.out.println("str===" + str); System.out.println("str===" + str);
NWN.suprise_str = str; NWN.suprise_str = str;
......
package com.offcn.api.nwn.service;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import java.io.UnsupportedEncodingException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.json.simple.JSONArray;
import com.offcn.TestUnti.HttpRequest;
import com.offcn.TestUnti.Log;
import com.offcn.TestUnti.MapUtil;
import com.offcn.TestUnti.RequestDataUtils;
import com.offcn.TestUnti.StringUtils;
import com.offcn.api.nwn.ifUpdatePackage;
import com.offcn.api.nwn.md5.nwngetsign;
import com.offcn.interfaces.API;
import com.offcn.process.NWN;
import com.offcn.process.TK;
import com.offcn.TestUnti.ListUtil;
/**
* 添加学员信息
*
* @author liyy
*
*/
public class addStudent extends NWN implements API {
public String parameter;// 参数集合
public String package_id;// 母板ID
public String phone;//
public String user_info;//
@Override
public void initialize(HashMap<String, Object> data) {
// try {
// Thread.sleep(20000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
@Override
public HashMap<String, Object> handleInput(HashMap<String, Object> data) {
// 获取parameter对应的内容
parameter = MapUtil.getValue("parameter", data);
timestamp = MapUtil.getParameter_get(parameter, "timestamp").trim();
user_info = MapUtil.getParameter_get(parameter, "user_info").trim();
if ((!user_info.equals("")) && user_info.contains("package_id")) {
package_id=ListUtil.getListValue(n_package_idList, 0);
parameter = parameter.replace("\"package_id\":package_id", "\"package_id\":"
+ package_id);
}
if ((!user_info.equals("")) && user_info.contains("phone")) {
phone = "1351" + (new Random().nextInt(9000000) + 1000000);
parameter = parameter.replace("\"phone\":phone", "\"phone\":"
+ phone);
}
if ((!user_info.equals("")) && user_info.contains("phone1")) {
phone = "1331" + (new Random().nextInt(9000000) + 1000000);
parameter = parameter.replace("\"phone\":phone1", "\"phone\":"
+ phone);
}
if ((!user_info.equals("")) && user_info.contains("phone2")) {
phone = "1321" + (new Random().nextInt(9000000) + 1000000);
parameter = parameter.replace("\"phone\":phone2", "\"phone\":"
+ phone);
}
if ((!timestamp.equals("")) && timestamp.equals("timestamp")) {
Long timeString = System.currentTimeMillis();
timestamp = timeString.toString().substring(0, 10);
parameter = parameter.replace("timestamp=timestamp", "timestamp="
+ timestamp);
}
data.put("parameter", parameter);
return data;
}
@Override
public Response SendRequest(HashMap<String, Object> data, String Url,
String Request) {
System.out.println("url ===" + Url);
System.out.println("parameter ===" + parameter);
Response re = HttpRequest.sendGet("http://beta.alitest.eoffcn.com"
+ Url, parameter);
/*
* System.out.println(re.getStatusCode());
* System.out.println(re.asString());
*/
// http://beta.alitest.eoffcn.com/template/addStuden/sign/0e74b43cefd12b43705d22cfdd744efd
// user_info=[{"package_id":391634,"username":"aaa","phone":15652333337,"sso_id":1}]&timestamp=1548837998&appid=jiaowu
/*
* Response re =HttpRequest.sendGet(
* "http://beta.alitest.eoffcn.com/template/addStuden/sign/5d114486999208096dace001ae4bc45a"
* ,
* "user_info=[{\"package_id\":391634,\"username\":\"aaa\",\"phone\":15656333337,\"sso_id\":1}]&timestamp=1548828632&appid=jiaowu"
* );
*/
// Response re =
// HttpRequest.sendGet("http://beta.alitest.eoffcn.com/template/addStudent/sign/2e90e16d93702c6d900577322063463c",
// "user_info=[{\"package_id\":391634,\"username\":\"aaa\",\"phone\":15652333337,\"sso_id\":1}]&timestamp=1548840818&appid=jiaowu");
return re;
}
@Override
public String handleOutput(Response re, HashMap<String, Object> data) {
JsonPath jp = new JsonPath(re.asString());
System.out.println("jp====" + jp);
boolean result = true;
String failReason = "";
String json = re.asString();
System.out.println("response=========="
+ StringUtils.decodeUnicode(json));
json = StringUtils.decodeUnicode(json);
if ((data.get("statusCode") != null)
&& (!data.get("statusCode").toString()
.equals(String.valueOf(re.getStatusCode())))) {
result = result && false;
failReason = failReason + "statusCode is expected "
+ data.get("statusCode").toString() + " but actually "
+ String.valueOf(re.getStatusCode()) + ". ";
}
if (json.length() != 0) {
if (!json.contains(data.get("msg").toString())) {
result = result && false;
failReason = failReason + "msg is expected "
+ data.get("msg").toString() + " but actually "
+ jp.getString("msg") + ".";
}
if (data.get("custom") != null && json != null) {
// 如果自定义结果包含多个希望结果,也就是有逗号,那么就切割,包含比较。
if (data.get("custom").toString().contains(",")) {
String[] strCustomStrings = data.get("custom").toString()
.split(",");
System.out.println(strCustomStrings.length);
for (int i = 0; i < strCustomStrings.length; i++) {
if (!json.contains(strCustomStrings[i])) {
result = result && false;
failReason = failReason + "custom is expected "
+ data.get("custom").toString()
+ " but actually " + strCustomStrings[i]
+ ".";
break;
}
}
} else {// 如果只有一个希望结果,就直接包含比较。
if (!json.contains(data.get("custom").toString())) {
result = result && false;
failReason = failReason + "custom is expected "
+ data.get("custom").toString()
+ " but actually "
+ data.get("custom").toString() + ".";
}
}
}
if (json.contains(data.get("msg").toString())) {
// 是否验证数据库
/*
* if (!isProduct) {
*
* String
* data_res=jp.getString("data").substring(0,jp.getString(
* "data").length());
*
* System.out.println("data_res====="+ data_res ); try { String
* sql
* ="SELECT MAX(id) AS id FROM `n_package` WHERE template_id = "
* + template_id; //SELECT id FROM n_template ORDER BY id DESC
* LIMIT 1 ResultSet rs_bankcard = this.sqlFromDB(sql);
* rs_bankcard.last();
* System.out.println("after findedupack ============"+
* rs_bankcard.getString("id"));
* if(Integer.parseInt(rs_bankcard.getString("id")) >=
* Integer.parseInt("1")) {
* n_package_idList.add(rs_bankcard.getString("id")); }else {
* result = result && false; failReason = failReason +
* "edupack info in DB is wrong;"; }
*
*
* } catch (Exception e) { result = result && false; failReason
* = failReason + "cannot verify edupack info in DB;";
* e.printStackTrace(); } }
*/
}
}
if (result)
return "Pass";
else
return "Fail:" + failReason;
}
}
...@@ -152,7 +152,7 @@ public class APITest_nwn extends NWN{ ...@@ -152,7 +152,7 @@ public class APITest_nwn extends NWN{
//测试结束删除测试所用的数据 //测试结束删除测试所用的数据
if (!isClearMysql) { if (!isClearMysql) {
this.cleann_n_admin_card_no_List_FromDB(); this.cleann_n_admin_card_no_List_FromDB();
//this.cleann_n_package_List_FromDB(); this.cleann_n_package_List_FromDB();
this.cleann_user_id_List_FromDB(); this.cleann_user_id_List_FromDB();
this.cleann_getcode_id_List_FromDB(); this.cleann_getcode_id_List_FromDB();
try { try {
......
...@@ -35,11 +35,11 @@ public class MakeTestCases { ...@@ -35,11 +35,11 @@ public class MakeTestCases {
public static void main(String[] args) { public static void main(String[] args) {
make("TestData/CaseMake.xls","Sheet1"); make("TestData/CaseMake.xls","Sheet1","put","put");
} }
public static void make(String FilePath,String SheetName){ public static void make(String FilePath,String SheetName,String getOrPost,String qudao){
//获取用例 //获取用例
List<String> listSum=TestCase(FilePath,SheetName); List<String> listSum=TestCase(FilePath,SheetName);
Set<String> set=new HashSet<String>(); Set<String> set=new HashSet<String>();
...@@ -47,9 +47,9 @@ public class MakeTestCases { ...@@ -47,9 +47,9 @@ public class MakeTestCases {
listSum.clear(); listSum.clear();
listSum.addAll(set); listSum.addAll(set);
for (String string : listSum) { // for (String string : listSum) {
System.out.println(string); // System.out.println(string);
} // }
List<String> TeseName= TestCaseName(listSum); List<String> TeseName= TestCaseName(listSum);
// System.out.println("用例数"+listSum.size()); // System.out.println("用例数"+listSum.size());
...@@ -76,13 +76,20 @@ public class MakeTestCases { ...@@ -76,13 +76,20 @@ public class MakeTestCases {
String jieKouMing=apipath[0]; String jieKouMing=apipath[0];
//生成测试用例 //生成测试用例
for(int i=0;i<listSum.size();i++){ for(int i=0;i<listSum.size();i++){
outCase(i,leiming,jieKouMing,TeseName.get(i),path,listSum.get(i),name,"OutPage"); String cases=listSum.get(i);
if("get".equals(getOrPost)){
cases=cases.replace(":", "=");
cases=cases.replace("\"", "");
cases=cases.replace(",", "&");
}
System.out.println(cases);
outCase(i,leiming,jieKouMing,TeseName.get(i),path,cases,name,"OutPage",getOrPost,qudao);
} }
} }
//第一个参数是数量,第二个参数是接口类名,第三个参数是中文名 //第一个参数是数量,第二个参数是接口类名,第三个参数是中文名
public static void outCase(int i,String leiming,String jieKouMing,String TeseName,String path,String cases,String wenjianming,String Sheet){ public static void outCase(int i,String leiming,String jieKouMing,String TeseName,
String path,String cases,String wenjianming,String Sheet,String getOrPost,String qudao){
Date d = new Date(); Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
...@@ -91,15 +98,15 @@ public class MakeTestCases { ...@@ -91,15 +98,15 @@ public class MakeTestCases {
//数据回写 //数据回写
SheetUtils sheet = new SheetUtils(wenjianming,Sheet); SheetUtils sheet = new SheetUtils(wenjianming,Sheet);
sheet.writeExcel( sheet.writeExcel(
// s,
(i+1)+"", (i+1)+"",
leiming + "_" + (i+1), leiming + "_" + (i+1),
(i+1)+"", (i+1)+"",
jieKouMing+"-"+TeseName, jieKouMing+"-"+TeseName,
"nwn", qudao,
path, path,
"N", "N",
"post", getOrPost,
"200", "200",
cases cases
); );
...@@ -545,7 +552,7 @@ public class MakeTestCases { ...@@ -545,7 +552,7 @@ public class MakeTestCases {
if(w!=0){ if(w!=0){
linshi="\""+name+"\""+":"+w; linshi="\""+name+"\""+":"+w;
}else{ }else{
linshi="\""+name+"\""+":"+0;//字符串转换成int类型失败后,将字符串变为0 linshi="\""+name+"\""+":"+1;//字符串转换成int类型失败后,将字符串变为0
// System.out.println(linshi); // System.out.println(linshi);
} }
}else if("int".equals(obj[j])){ }else if("int".equals(obj[j])){
......
...@@ -59,9 +59,9 @@ public class readExcels { ...@@ -59,9 +59,9 @@ public class readExcels {
Cell cell = r.getCell(j); Cell cell = r.getCell(j);
String brandName = this.getCellValue(cell); String brandName = this.getCellValue(cell);
if(brandName.indexOf("Sheet")!=-1){//如果在文件里找到了包含Sheet的字段就不存储这一行数据 if(brandName.indexOf("Sheet")!=-1){//如果在文件里找到了包含Sheet的字段就不存储这一行数据
MakeTestCases.SheetList.add(brandName);//记录那个sheet页面 MakeTestCases190131.SheetList.add(brandName);//记录那个sheet页面
MakeTestCases.nameList.add(this.getCellValue(r.getCell(1)));//保存包含sheet页面的字段名称 MakeTestCases190131.nameList.add(this.getCellValue(r.getCell(1)));//保存包含sheet页面的字段名称
++MakeTestCases.state; //状态执为true,代表还需要循环读取其他sheet页面 ++MakeTestCases190131.state; //状态执为true,代表还需要循环读取其他sheet页面
listData.clear(); //清理这一行数据的存储 listData.clear(); //清理这一行数据的存储
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment