java - 如何从 json 文件中设置发布请求有效负载再保证
问题描述
在以下情况下需要帮助:
我有以下 pojo 类,当我使用 reassured 进行后调用时,我不想在我的 java 类中设置每个字段。要实现这些,需要维护一个createissue.json 文件。 在进行后期调用时,我想从createissue.json 文件中读取每个字段。
下面是我的 pojo 类CreateIssuepayload.java
公共类 CreateIssuepayload {
@JsonProperty("summary")
private String summary;
@JsonProperty("description")
private String description;
@JsonProperty("issuetype")
private IssueType issuetype;
@JsonProperty("project")
private Project project;
public CreateIssuepayload(Project project, IssueType issuetype,String description, String summary) {
this.summary = summary;
this.description = description;
this.issuetype = issuetype;
this.project = project;
}
public CreateIssuepayload(Project project,IssueType issuetype,String description) {
this.description = description;
this.issuetype = issuetype;
this.project = project;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public IssueType getIssuetype() {
return issuetype;
}
public void setIssuetype(IssueType issuetype) {
this.issuetype = issuetype;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
}
我的createissue.json 文件
{
"fields":{
"summary":"Please look into issue",
"description":"Unable to create my JIRA ticket 3",
"issuetype":{
"name":"Bug"
},
"project":{
"key":"BP"
}
}
}
和我的测试用例发出发布请求
@Test(enabled = false)
public static void test1() throws JsonProcessingException {
IssueType issuetype = new IssueType("**Bug**");
Project project = new Project("**BP**");
CreateIssuepayload mypojo = new CreateIssuepayload(project, issuetype, "**Unable to create my JIRA ticket 3**",
"**Please look into issue.....**");
Fields f = new Fields(mypojo);
RestAssured.baseURI = "http://localhost:8080";
Response res = given().header("Content-Type", "application/json")
.header("cookie", "JSESSIONID=" + Basic.sessionGen() + "").body(f).expect()
.body(containsString("greeting")).when().post("/rest/api/2/issue").then().extract().response();
}
在这里,我不想在 java 类中的测试用例中设置我的测试数据,如 Bug、BP 等。我想从 json 文件中动态读取它
注意:我也不想将整个 json 文件作为我的正文发布。
任何帮助都值得赞赏。谢谢你。
解决方案
您可以使用 Java 中的 json-simple 库来读取 json 文件。Maven 仓库
然后将值作为字符串检索并创建CreateIssuepayload
对象和Fields
对象。
@Test(enabled = false)
public static void test1() throws JsonProcessingException {
// Read the json file
org.json.simple.JSONObject jsonObject = new org.json.simple.JSONObject();
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("createissue.json"));
jsonObject = (org.json.simple.JSONObject) obj;
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
JSONObject fieldsObject = (JSONObject) jsonObject.get("fields");
JSONObject issueTypeObject = (JSONObject) fieldsObject.get("issuetype");
JSONObject projectObject = (JSONObject) fieldsObject.get("project");
IssueType issueType = new IssueType(issueTypeObject.get("name").toString());
Project project = new Project(projectObject.get("key").toString());
String summary = fieldsObject.get("summary").toString();
String description = fieldsObject.get("description").toString();
CreateIssuepayload mypojo = new CreateIssuepayload(project, issuetype, description, summary);
Fields f = new Fields(mypojo);
RestAssured.baseURI = "http://localhost:8080";
Response res =
given()
.header("Content-Type", "application/json")
.header("cookie", "JSESSIONID=" + Basic.sessionGen() + "").body(f).expect()
.body(containsString("greeting"))
.when().post("/rest/api/2/issue")
.then().extract().response();
}
如果您按如下方式更改 json 文件,您可以使用Gson轻松完成此操作
{
"summary": "Please look into issue",
"description": "Unable to create my JIRA ticket 3",
"issuetype": {
"name": "Bug"
},
"project": {
"key": "BP"
}
}
而且您也不需要添加@JsonProperty()
注释。
然后使用Gson
将json对象反序列化为Java对象
@Test(enabled = false)
public static void test1() throws JsonProcessingException {
Gson gson = new Gson();
CreateIssuepayload mypojo = null;
try {
BufferedReader bf = new BufferedReader(new FileReader("createissue.json"));
mypojo = gson.fromJson(bf, CreateIssuepayload.class);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
RestAssured.baseURI = "http://localhost:8080";
Response res = given()
.header("Content-Type", "application/json")
.header("cookie", "JSESSIONID=" + Basic.sessionGen() + "")
.body(mypojo).expect()
.body(containsString("greeting")).when().post("/rest/api/2/issue").then().extract().response();
}
推荐阅读
- python - 如何在 barplot seaborn 中为不同的子组设置颜色
- javascript - 根据另一个数组项更新数组对象值
- node.js - 为什么我必须在猫鼬预保存中间件中使用 next()
- search - 我找不到 SharePoint 项目
- html - 如何使用:悬停在两个相同的元素上
- unit-testing - 为什么 php artisan make: test PostTest --unit 命令创建一个新的测试不是从 Tests\TestCase 而是从 PHPUnit\Framework\TestCase 扩展的?拉拉维尔 8
- python - 我的链表是基于我的解决方案的回文吗?
- javascript - AJAX 拒绝向 PHP 发送变量(检查所有其他答案)
- spring-boot - 如何在测试中提高 H2 碱基
- spring-data-jpa - @ControllerAdvice 异常处理程序的 Spring 激活