Commit ce06d421 by 左磊磊

修改lemon项目-新增README操作文件

parent 44468760
...@@ -19,27 +19,27 @@ Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing) ...@@ -19,27 +19,27 @@ Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)
### 本地调试 ### 本地调试
0、测试用例:Excel文件。配置路径:Constants.java文件中EXCEL_PATH。 0、测试用例:Excel文件。配置路径:Constants.java文件中EXCEL_PATH。
![img_10.png](img_10.png) ![img_10.png](img/img_10.png)
![img_11.png](img_11.png) ![img_11.png](img/img_11.png)
![img_12.png](img_12.png) ![img_12.png](img/img_12.png)
1、Maven坐标:更新Maven坐标。 1、Maven坐标:更新Maven坐标。
![img_3.png](img_3.png) ![img_3.png](img/img_3.png)
2、登录接口:token鉴权。因每个系统的登录接口都会返回token,但是token路径不同,故需要更改AuthorizationUtils.java文件中storeToken方法中的token。具体可参考该方法里的备注。 2、登录接口:token鉴权。因每个系统的登录接口都会返回token,但是token路径不同,故需要更改AuthorizationUtils.java文件中storeToken方法中的token。具体可参考该方法里的备注。
`(登录接口需要传参token并保存下来给其余接口使用)` `(登录接口需要传参token并保存下来给其余接口使用)`
![img_1.png](img_1.png) ![img_1.png](img/img_1.png)
3、其余接口:`接口传参需要判断是否需要传递token` 3、其余接口:`接口传参需要判断是否需要传递token`
![img_2.png](img_2.png) ![img_2.png](img/img_2.png)
4、运行代码: 4、运行代码:
(1)idea软件打开preferences设置,在plugins插件中下载TestNG。 (1)idea软件打开preferences设置,在plugins插件中下载TestNG。
![img.png](img.png) ![img.png](img/img.png)
(2)创建并运行TestNG工程 (2)创建并运行TestNG工程
![img_4.png](img_4.png) ![img_4.png](img/img_4.png)
(3)运行mvn并得到Allure报告。 (3)运行mvn并得到Allure报告。
...@@ -47,12 +47,12 @@ Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing) ...@@ -47,12 +47,12 @@ Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)
`mvn io.qameta.allure:allure-maven:serve` `mvn io.qameta.allure:allure-maven:serve`
![img_5.png](img_5.png) ![img_5.png](img/img_5.png)
![img_6.png](img_6.png) ![img_6.png](img/img_6.png)
![img_7.png](img_7.png) ![img_7.png](img/img_7.png)
![img_8.png](img_8.png) ![img_8.png](img/img_8.png)
package com.lemon.cases;
import com.lemon.constants.Constants;
import com.lemon.pojo.API;
import com.lemon.pojo.Case;
import com.lemon.utils.AuthorizationUtils;
import com.lemon.utils.ExcelUtils;
import com.lemon.utils.HttpUtils;
import com.lemon.utils.SqlUtils;
import io.qameta.allure.Description;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* @program: Lemon
* @description:
* @author: ray
* @create: 2022-11-01 13:57
**/
public class AgentCase extends BaseCase {
@Test(dataProvider = "data2", description = "登录出版端") // DTO数据传输
@Description("登录出版端")
public void testAAAAALogin(API api, Case cas) throws Exception {
//1、参数化替换
String params = replace(cas.getParams());
String sql = replace(cas.getCheckSQL());
cas.setParams(params);
cas.setCheckSQL(sql);
//2、数据库前置查询结果(断言必须在接口执行前后都查询)
Object beforeSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//3、调用接口
String body = call(api, cas, false);
// 3.1 将登录的token存储(仅限于登录接口特有)
AuthorizationUtils.storeToken(body);
System.out.println(AuthorizationUtils.env);
//4、断言响应结果,Excel中预期响应数据与实际响应数据进行对比
Boolean assertResponseFlag = assertResponse(cas, body);
//5、添加接口响应回写excel内容
addWBD(Integer.parseInt(cas.getId()), Constants.ACTURL_WRITER_BACK_CELL_NUM, body);
//6、数据库后置查询结果
Object afterSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//7、数据库断言
//8、添加断言回写内容
//9、添加日志
//10、报表断言
}
// 使用对应参数编写接口自动化
@DataProvider(name = "data0")
public Object[][] data0() {
//Object[m][n] m代表执行次数,n代表参数个数
Object[][] datas = {
{"https://ra.raysyun.com/usercenter/v1.0/user/login", "{\"userName\":\"15927555348\",\"pwd\":\"5ec0b6355d9a5fdb2996c5b9950cc1c6\",\"isRemember\":1,\"systemCode\":\"agent\"}"},
};
return datas;
}
// 使用Excel文件传输接口信息和请求信息
@DataProvider(name = "data2")
public Object[][] data1() {
Object[][] data = ExcelUtils.getAPIAndCaseByApiId("2"); // 传参apiID
return data;
}
@Test(dataProvider = "data4", description = "获取用户信息") // DTO数据传输
@Description("获取用户信息")
public void testUserGetInfo(API api, Case cas) throws Exception {
//1、参数化替换
String params = replace(cas.getParams());
String sql = replace(cas.getCheckSQL());
cas.setParams(params);
cas.setCheckSQL(sql);
//2、数据库前置查询结果(断言必须在接口执行前后都查询)
Object beforeSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//3、调用接口
String body = call(api, cas, true);
//4、断言响应结果,Excel中预期响应数据与实际响应数据进行对比
Boolean assertResponseFlag = assertResponse(cas, body);
//5、添加接口响应回写excel内容
addWBD(Integer.parseInt(cas.getId()), Constants.ACTURL_WRITER_BACK_CELL_NUM, body);
//6、数据库后置查询结果
Object afterSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//7、数据库断言
//8、添加断言回写内容
//9、添加日志
//10、报表断言
}
// 使用Excel文件传输接口信息和请求信息
@DataProvider(name = "data4")
public Object[][] data4() {
Object[][] data = ExcelUtils.getAPIAndCaseByApiId("4"); // 传参apiID
return data;
}
@Test(dataProvider = "data5", description = "获取出版信息") // DTO数据传输
@Description("获取出版信息")
public void testAgentGetInfo(API api, Case cas) throws Exception {
//1、参数化替换
String params = replace(cas.getParams());
String sql = replace(cas.getCheckSQL());
cas.setParams(params);
cas.setCheckSQL(sql);
//2、数据库前置查询结果(断言必须在接口执行前后都查询)
Object beforeSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//3、调用接口
String body = call(api, cas, true);
//4、断言响应结果,Excel中预期响应数据与实际响应数据进行对比
Boolean assertResponseFlag = assertResponse(cas, body);
//5、添加接口响应回写excel内容
addWBD(Integer.parseInt(cas.getId()), Constants.ACTURL_WRITER_BACK_CELL_NUM, body);
//6、数据库后置查询结果
Object afterSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//7、数据库断言
//8、添加断言回写内容
//9、添加日志
//10、报表断言
}
// 使用Excel文件传输接口信息和用例信息
@DataProvider(name = "data5")
public Object[][] data5() {
Object[][] data = ExcelUtils.getAPIAndCaseByApiId("5"); // 传参apiID
return data;
}
@Test(dataProvider = "data6", description = "获取出版信息") // DTO数据传输
@Description("获取出版信息")
public void testGetUnReadCountByAgent(API api, Case cas) throws Exception {
//1、参数化替换
String params = replace(cas.getParams());
String sql = replace(cas.getCheckSQL());
cas.setParams(params);
cas.setCheckSQL(sql);
//2、数据库前置查询结果(断言必须在接口执行前后都查询)
Object beforeSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//3、调用接口
String body = call(api, cas, true);
//4、断言响应结果,Excel中预期响应数据与实际响应数据进行对比
Boolean assertResponseFlag = assertResponse(cas, body);
//5、添加接口响应回写excel内容
addWBD(Integer.parseInt(cas.getId()), Constants.ACTURL_WRITER_BACK_CELL_NUM, body);
//6、数据库后置查询结果
Object afterSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//7、数据库断言
//8、添加断言回写内容
//9、添加日志
//10、报表断言
}
// 使用Excel文件传输接口信息和用例信息
@DataProvider(name = "data6")
public Object[][] data6() {
Object[][] data = ExcelUtils.getAPIAndCaseByApiId("6"); // 传参apiID
return data;
}
@Test(dataProvider = "data7", description = "获取出版信息") // DTO数据传输
@Description("获取出版信息")
public void testGetUserQRCode(API api, Case cas) throws Exception {
//1、参数化替换
String params = replace(cas.getParams());
String sql = replace(cas.getCheckSQL());
cas.setParams(params);
cas.setCheckSQL(sql);
//2、数据库前置查询结果(断言必须在接口执行前后都查询)
Object beforeSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
//3、调用接口
String body = call(api, cas, true);
//4、断言响应结果,Excel中预期响应数据与实际响应数据进行对比
Boolean assertResponseFlag = assertResponse(cas, body);
//5、添加接口响应回写excel内容
addWBD(Integer.parseInt(cas.getId()), Constants.ACTURL_WRITER_BACK_CELL_NUM, body);
//6、数据库后置查询结果
Object afterSqlResult = SqlUtils.querySingle(cas.getCheckSQL());
// 7、数据库断言
// 8、添加断言回写内容
// 9、添加日志
// 10、报表断言
}
// 使用Excel文件传输接口信息和用例信息
@DataProvider(name = "data7")
public Object[][] data7() {
Object[][] data = ExcelUtils.getAPIAndCaseByApiId("6"); // 传参apiID
return data;
}
}
...@@ -95,7 +95,7 @@ public class HttpUtils { ...@@ -95,7 +95,7 @@ public class HttpUtils {
public static String jsonGet(String url, Boolean isAuthorization) throws Exception { public static String jsonGet(String url, Boolean isAuthorization) throws Exception {
// login?username=15500110011&password=123456 // login?username=15500110011&password=123456
HttpGet httpGet = new HttpGet(url ); HttpGet httpGet = new HttpGet(url);
// httpGet.addHeader(Constants.HEADER_MEDIA_TYPE_NAME, Constants.HEADER_MEDIA_TYPE_VALUE); // httpGet.addHeader(Constants.HEADER_MEDIA_TYPE_NAME, Constants.HEADER_MEDIA_TYPE_VALUE);
httpGet.setHeader("Content-Type", "application/json, text/plain, */*"); httpGet.setHeader("Content-Type", "application/json, text/plain, */*");
// 添加鉴权头 // 添加鉴权头
......
package com.lemon.utils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.http.impl.client.BasicResponseHandler;
/**
* @program: Lemon
* @description:
* @author: ray
* @create: 2022-11-14 13:54
**/
public class Robot {
public static String WechatWebHook() throws Exception {
String url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fc6f4a8e-b208-47ab-9ceb-e9c7e47564c7";
String json = "{\"msgtype\":\"text\",\"text\":{\"content\":\"msg\",\"mentioned_mobile_list\":[\"17611377226\"]}}";
// 请求url
HttpPost httpPost = new HttpPost(url);
// 请求header
httpPost.setHeader("Content-Type", "application/json");
// 添加请求参数
httpPost.setEntity(new StringEntity(json, "UTF-8"));
//
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
Header[] headers = response.getAllHeaders();
String body = EntityUtils.toString(entity);
return body;
}
public static String httpClientPost(String url, String jsonData) {
String result = "";
// 创建post方式请求对象
HttpPost httpPost = new HttpPost(url);
// 创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
BasicResponseHandler handler = new BasicResponseHandler();
//设置请求格式
StringEntity entity = new StringEntity(jsonData, "utf-8"); //解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
//执行POST请求
result = httpClient.execute(httpPost, handler);
return result;
} catch (Exception e) {
} finally {
//释放连接
try {
httpClient.close();
} catch (Exception e) {
}
}
return result;
}
public static String httpClientGet(String url, String jsonData) {
String result = "";
//创建post方式请求对象
HttpGet httpGet = new HttpGet(url);
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
BasicResponseHandler handler = new BasicResponseHandler();
//设置请求格式
StringEntity entity = new StringEntity(jsonData, "utf-8"); //解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
//执行POST请求
result = httpClient.execute(httpGet, handler);
return result;
} catch (Exception e) {
} finally {
//释放连接
try {
httpClient.close();
} catch (Exception e) {
}
}
return result;
}
public static void main(String[] args) throws Exception {
// 获取最后一次构建的编号
String last_build_url = "http://192.168.92.13:9988/job/ryasdata_api_test/lastBuild/buildNumber";
//
String url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fc6f4a8e-b208-47ab-9ceb-e9c7e47564c7";
String json = "{\"msgtype\":\"text\",\"text\":{\"content\":\"msg\",\"mentioned_mobile_list\":[\"17611377226\"]}}";
String body=WechatWebHook();
System.out.println(body);
}
}
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