一,应用技术点概述&准备工作

  • java + restassured + junit + allure2

    准备工作

  • 本文中主要代码经过多次迭代, 初始代码已不可考,有部分是从 网上复制而来,重点看思路与实现过程。

  • pom中添加依赖
  • 测试获取token,要调试企业微信的api需要获取到access_token
  • image.png
  • 需要的corpId,自己所有的企业微信的公司id
  • 需要的secret,企业微信中各个应用都有一个单独的密匙,只有拿到密匙才能肆意调戏他的api
  • image.png
  • 本次文章主要以通讯录api的测试为主
  • 然后进行获取token的测试 ```java

package cn.addicated.Wework;

import io.restassured.RestAssured; import io.restassured.response.Response;

/**

  • @author addicated
  • @description */ public class getAccess_token {

    /**

    • 获取wework的access_token
    • @param corpid 企业id
    • @param corpsecret 应用密钥
    • @return */ public Response getToken(String corpid, String corpsecret) { Response response = RestAssured.given()
      1. .log().all() //打印请求头信息
      2. .queryParam("corpid", corpid)
      3. .queryParam("corpsecret", corpsecret)
      4. .when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken") //发送get请求
      5. .then().extract().response();
      return response; }

}

  1. - 直接使用idea中的生成功能,生成对应的测试方法 热键为 alt+ insert
  2. - ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1608527/1601798633052-e1ab2c0e-42fe-4947-8587-f85403be050c.png#align=left&display=inline&height=300&margin=%5Bobject%20Object%5D&name=image.png&originHeight=300&originWidth=268&size=12347&status=done&style=none&width=268)![image.png](https://cdn.nlark.com/yuque/0/2020/png/1608527/1601798670301-0b7008a6-cfa3-4e6a-a8ec-5e40a54715b3.png#align=left&display=inline&height=674&margin=%5Bobject%20Object%5D&name=image.png&originHeight=674&originWidth=606&size=41552&status=done&style=none&width=606)
  3. - 接着去测试方法中进行执行。
  4. ```java
  5. import com.addicated.wework.WeworkConfig;
  6. import com.addicated.wework.Wework;
  7. import org.junit.Test;
  8. /**
  9. * @description:
  10. * @author: Adi
  11. * @time: 2020/9/5 15:53
  12. **/
  13. public class TestGetToken {
  14. @Test
  15. public void testToken() {
  16. // 最基本的一个case ,基于这个然后进行封装,不封装
  17. // 将gettoekn完整的封装成一个api,在其他的case中可以直接进行调用
  18. // given().log().all().queryParam("corpid",com.addicated.test.WeworkConfig.getInstance().corpId).
  19. // queryParam("corpsecret",com.addicated.test.WeworkConfig.getInstance().secret).
  20. // when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken").
  21. // then().log().all().statusCode(200).body("errcode",equalTo(0));
  22. Wework wework = new Wework();
  23. String token = wework.getWeworkToken(WeworkConfig.getInstance().secret);
  24. assert token !=null;
  25. }
  26. }

{ “errcode”: 0, “errmsg”: “ok”, “access_token”: “XQntbz4sN9lyxTMbsoLwmi2sYFMeJZN-L1l52lX5NwJjhhuqbtGmnD2ubk0uo-EQVGi79zM5dDan7IFDUpSc_NPqYucD7TLjgEZl4JrFx1-TznpjOno573pmNq2mpKK7MTcSOW141Fgbp1867LtKtoRnbeKg-ZE46LhBXAzF6qPbO-72Bdx9xHAA1CqXxHweDj97Wg14UHXRvspxo54sUw”, “expires_in”: 7200 }

  1. - 可见已经可以正常的取到token,后续测试工作可以正常向下进行。
  2. - 此处可以进行二次封装方便后面进行直接调用传token操作api
  3. - 新建一个weWorkConfig类,吧取得token所用到的信息定义成为类属性
  4. ```java
  5. package com.addicated.wework;
  6. import com.fasterxml.jackson.core.JsonProcessingException;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
  9. import java.io.IOException;
  10. /**
  11. * @description:
  12. * @author: Adi
  13. * @time: 2020/9/5 16:51
  14. **/
  15. public class WeworkConfig {
  16. // 配置文件,存放一些通用的配置
  17. public String agentId = "1000002";
  18. public String secret = "sScHMyPF5VynfvbRwXVYvmOVjyJX4y2dhBZfP8CQWoU";
  19. // 公司id
  20. public String corpId = "ww01499f8ea8a9861f";
  21. // 通讯录secret
  22. public String contactSecret = "2fUo73u09VhsVhxvdb2ffCvWVkggPa52_KKx9cvXDxA";
  23. // 使用单例、
  24. // 被实例化的时候进行判断是否为空,为空则实例化,否则直接返回已经实例化好的对象
  25. // 以实现单例
  26. private static WeworkConfig weworkConfig;
  27. public static WeworkConfig getInstance() {
  28. if (weworkConfig == null) {
  29. weworkConfig = load("/conf/WeworkConfig.yaml");
  30. System.out.println(weworkConfig);
  31. System.out.println(weworkConfig.agentId);
  32. }
  33. return weworkConfig;
  34. }
  35. // 从配置文件中读取,先定义出来,后期完善
  36. public static WeworkConfig load(String path) {
  37. //fixed read from yaml or json
  38. ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
  39. try {
  40. return mapper.readValue(WeworkConfig.class.getResourceAsStream(path), WeworkConfig.class);
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. return null;
  44. }
  45. // System.out.println(mapper.writeValueAsString(WeworkConfig.getInstance()));
  46. // 读取文件中的配置,并返回一个对应的实例
  47. }
  48. }

使用单例模式来维护全局配置,见上述代码

使用hamcrest来进行断言。

  1. import com.addicated.wework.WeworkConfig;
  2. import com.addicated.wework.Wework;
  3. import com.sun.org.apache.xpath.internal.operations.NotEquals;
  4. import org.junit.Test;
  5. import static org.hamcrest.CoreMatchers.equalTo;
  6. import static org.hamcrest.CoreMatchers.not;
  7. import static org.hamcrest.MatcherAssert.assertThat;
  8. /**
  9. * @description:
  10. * @author: Adi
  11. * @time: 2020/9/5 15:53
  12. **/
  13. public class TestGetToken {
  14. @Test
  15. public void testToken() {
  16. // 最基本的一个case ,基于这个然后进行封装,不封装
  17. // 将gettoekn完整的封装成一个api,在其他的case中可以直接进行调用
  18. // given().log().all().queryParam("corpid",com.addicated.test.WeworkConfig.getInstance().corpId).
  19. // queryParam("corpsecret",com.addicated.test.WeworkConfig.getInstance().secret).
  20. // when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken").
  21. // then().log().all().statusCode(200).body("errcode",equalTo(0));
  22. Wework wework = new Wework();
  23. String token = wework.getWeworkToken(WeworkConfig.getInstance().secret);
  24. assertThat(token, not(equalTo(null)));
  25. }
  26. }

当前代码目录如下

image.png

二,了解企业微信的api

  • 拿到token之后,可以肆意玩弄企业微信的api了,选取几个简单的api进行入门操作,,部门管理模块
  • 企业微信app实战(一)技术选型,准备工作 - 图4
  • 先浏览一下相关功能的api描述和文档
  • 企业微信app实战(一)技术选型,准备工作 - 图5
  • 企业微信app实战(一)技术选型,准备工作 - 图6
  • 企业微信app实战(一)技术选型,准备工作 - 图7
  • 企业微信app实战(一)技术选型,准备工作 - 图8
  • 企业微信app实战(一)技术选型,准备工作 - 图9
  • 先以获取部门列表api为例
  • 为了区分个人负责模块,创建包com.任意.wework.contact contact是通讯录的英文译名。
  • image.png
  • 下建类为业务线,比如通讯录下有部门管理,成员管理,标签管理,contact中放共通代码。