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

  • 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; }

}


- 直接使用idea中的生成功能,生成对应的测试方法 热键为 alt+ insert
- ![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)
- 接着去测试方法中进行执行。
```java
import com.addicated.wework.WeworkConfig;
import com.addicated.wework.Wework;
import org.junit.Test;

/**
 * @description:
 * @author: Adi
 * @time: 2020/9/5 15:53
 **/

public class TestGetToken {
    @Test
    public void testToken() {
        // 最基本的一个case ,基于这个然后进行封装,不封装
        // 将gettoekn完整的封装成一个api,在其他的case中可以直接进行调用
//        given().log().all().queryParam("corpid",com.addicated.test.WeworkConfig.getInstance().corpId).
//                queryParam("corpsecret",com.addicated.test.WeworkConfig.getInstance().secret).
//                when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken").
//                then().log().all().statusCode(200).body("errcode",equalTo(0));
        Wework wework = new Wework();
        String token = wework.getWeworkToken(WeworkConfig.getInstance().secret);
        assert token !=null;
    }
}

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


- 可见已经可以正常的取到token,后续测试工作可以正常向下进行。
- 此处可以进行二次封装方便后面进行直接调用传token操作api
- 新建一个weWorkConfig类,吧取得token所用到的信息定义成为类属性
```java
package com.addicated.wework;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import java.io.IOException;

/**
 * @description:
 * @author: Adi
 * @time: 2020/9/5 16:51
 **/

public class WeworkConfig {
    // 配置文件,存放一些通用的配置

    public String agentId = "1000002";
    public String secret = "sScHMyPF5VynfvbRwXVYvmOVjyJX4y2dhBZfP8CQWoU";
    // 公司id
    public String corpId = "ww01499f8ea8a9861f";
    // 通讯录secret
    public String contactSecret = "2fUo73u09VhsVhxvdb2ffCvWVkggPa52_KKx9cvXDxA";

    // 使用单例、
    // 被实例化的时候进行判断是否为空,为空则实例化,否则直接返回已经实例化好的对象
    // 以实现单例
    private static WeworkConfig weworkConfig;

    public static WeworkConfig getInstance() {

        if (weworkConfig == null) {
            weworkConfig = load("/conf/WeworkConfig.yaml");
            System.out.println(weworkConfig);
            System.out.println(weworkConfig.agentId);
        }
        return weworkConfig;
    }
    // 从配置文件中读取,先定义出来,后期完善
    public static WeworkConfig load(String path) {
        //fixed read from yaml or json
        ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

        try {

            return mapper.readValue(WeworkConfig.class.getResourceAsStream(path), WeworkConfig.class);

        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
//        System.out.println(mapper.writeValueAsString(WeworkConfig.getInstance()));
        // 读取文件中的配置,并返回一个对应的实例

    }

}

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

使用hamcrest来进行断言。

import com.addicated.wework.WeworkConfig;
import com.addicated.wework.Wework;
import com.sun.org.apache.xpath.internal.operations.NotEquals;
import org.junit.Test;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.MatcherAssert.assertThat;

/**
 * @description:
 * @author: Adi
 * @time: 2020/9/5 15:53
 **/

public class TestGetToken {
    @Test
    public void testToken() {
        // 最基本的一个case ,基于这个然后进行封装,不封装
        // 将gettoekn完整的封装成一个api,在其他的case中可以直接进行调用
//        given().log().all().queryParam("corpid",com.addicated.test.WeworkConfig.getInstance().corpId).
//                queryParam("corpsecret",com.addicated.test.WeworkConfig.getInstance().secret).
//                when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken").
//                then().log().all().statusCode(200).body("errcode",equalTo(0));
        Wework wework = new Wework();
        String token = wework.getWeworkToken(WeworkConfig.getInstance().secret);
        assertThat(token, not(equalTo(null)));

    }


}

当前代码目录如下

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中放共通代码。