一,请求引擎的封装

import io.restassured.response.Response; import io.restassured.specification.RequestSpecification;

import java.util.HashMap;

import static io.restassured.RestAssured.given;

/**

  • @description: 请求引擎封装
  • @author: Adi
  • @time: 2020/10/5 11:28 **/

public class Restful { HashMap query = new HashMap(); public RequestSpecification requestSpecification = given(); public Response send(){ requestSpecification = given().log().all(); // entrySet为java8的写法,entry为map内的每一个键值映射单位, // 自带getKey getValue方法,

  1. // 调用流程,先调用 query(map类型),将要传入的数据通过KV对应传入,
  2. // 之后 send内部方法运行,将query内部的请求参数通过键值对的形式压入 requestSpecification对象中
  3. // 之后直接通过requestSpecification对象来进行
  4. query.entrySet().forEach(entry->{
  5. requestSpecification.queryParam(entry.getKey(),entry.getValue());
  6. });
  7. return requestSpecification.when().request("get", "baidu.com");
  8. }

}

  1. - 之后在contact目录下创建一个Contact类来继承Restful
  2. ```java
  3. package com.addicated.wework.contact;
  4. import com.addicated.wework.Restful;
  5. /**
  6. * @description:
  7. * @author: Adi
  8. * @time: 2020/10/5 12:59
  9. **/
  10. public class Contact extends Restful {
  11. // 写一个构造方法,当该类被实例化调用的时候进行初始化
  12. public Contact() {
  13. reset();
  14. }
  15. // 实例化的时候执行reset方法,重新设置token
  16. public void reset() {
  17. requestSpecification = given()
  18. .log().all()
  19. .queryParam("access_token", Wework.getToken())
  20. .contentType(ContentType.JSON);
  21. }
  22. }
  • 之后在Department类中继承Contact ```java package com.addicated.wework.contact;

import com.addicated.wework.Wework; import com.jayway.jsonpath.JsonPath; import io.restassured.response.Response;

import static io.restassured.RestAssured.given;

/**

  • @description:
  • @author: Adi
  • @time: 2020/10/4 19:12 **/

public class Department extends Contact {

  1. public Response list(String id) {
  2. // 直接调用requestSpectfication 来替代原先的封装逻辑
  3. Response response = requestSpecification
  4. .param("id", id)
  5. .when().get("https://qyapi.weixin.qq.com/cgi-bin/department/list")
  6. .then().extract().response();
  7. reset(); // 将map里面的数据清空
  8. return response;
  9. }
  10. // 创建部门
  11. public Response create(String name, String parentid) {
  12. reset();
  13. String body = JsonPath.parse(this.getClass()
  14. .getResourceAsStream("/data/create.json"))
  15. .set("$.name", name)
  16. .set("parentid", parentid).jsonString();
  17. return requestSpecification
  18. .body(body)
  19. .when().post("https://qyapi.weixin.qq.com/cgi-bin/department/create")
  20. .then().log().all().statusCode(200).extract().response();
  21. }
  22. // 删除部门
  23. public Response delete(String id) {
  24. reset();
  25. return requestSpecification
  26. .queryParam("id", id)
  27. .when().get("https://qyapi.weixin.qq.com/cgi-bin/department/delete")
  28. .then().extract().response();
  29. }
  30. // 更新部门
  31. public Response update(String name, String id) {
  32. reset();
  33. String body = JsonPath.parse(this.getClass()
  34. .getResourceAsStream("/data/update.json"))
  35. .set("$.name", name)
  36. .set("id", id).jsonString();
  37. return requestSpecification
  38. .body(body)
  39. .when().post("https://qyapi.weixin.qq.com/cgi-bin/department/update")
  40. .then().extract().response();
  41. }

}

  1. <a name="Wgb6i"></a>
  2. # 二,再优化
  3. - 现在的参数化是通过手动赋值,然后替换参数实现的,仍然有过多细节暴露在调用处,进一步进行优化,使用map格式进行参数化
  4. ```java
  5. // 创建部门 参数化优化
  6. public Response createMap(HashMap<String, Object> map) {
  7. reset();
  8. // 首先拿到 读取json文件的对象并保存,之后进行赋值
  9. DocumentContext documentContext = JsonPath.parse(this.getClass()
  10. .getResourceAsStream("/data/create.json"));
  11. // 这种书写方式的有点是,传值可以传一个也可多可,泛用性更强
  12. map.entrySet().forEach(entry -> {
  13. documentContext.set(entry.getKey(), entry.getValue());
  14. });
  15. return requestSpecification
  16. .body(documentContext.jsonString())
  17. .when().post("https://qyapi.weixin.qq.com/cgi-bin/department/create")
  18. .then().log().all().statusCode(200).extract().response();
  19. }
  20. ------------- 测试方法中
  21. @Test
  22. void createByMap() {
  23. HashMap<String, Object> map = new HashMap<String, Object>() {
  24. {
  25. put("name", String.format("seveniruby_d1_map%s", random));
  26. put("parentid", "1");
  27. }
  28. };
  29. department.createMap(map).then().body("errcode", equalTo(0));
  30. }
  31. // 直接通过hashmap传值即可