一,应用技术点概述&准备工作
java + restassured + junit + allure2
准备工作
本文中主要代码经过多次迭代, 初始代码已不可考,有部分是从 网上复制而来,重点看思路与实现过程。
- pom中添加依赖
- 测试获取token,要调试企业微信的api需要获取到access_token
- 需要的corpId,自己所有的企业微信的公司id
- 需要的secret,企业微信中各个应用都有一个单独的密匙,只有拿到密匙才能肆意调戏他的api
- 本次文章主要以通讯录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()
return response; }.log().all() //打印请求头信息
.queryParam("corpid", corpid)
.queryParam("corpsecret", corpsecret)
.when().get("https://qyapi.weixin.qq.com/cgi-bin/gettoken") //发送get请求
.then().extract().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;
}
}
- 运行结果大致如下
```html
Request method: GET
Request URI: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww2df66b08696343ff&corpsecret=vj1C5akNwtxZb18MECiNZym4IVBTWEi18L57r1KJF2s
Proxy:
Request params: Query params: corpid=ww2df66b08696343ff
Form params:corpsecret=vj1C5akNwtxZb18MECiNZym4IVBTWEi18L57r1KJF2s
Path params: Headers: Accept=/ Cookies: Multiparts: Body: HTTP/1.1 200 OK Server: nginx Date: Thu, 07 May 2020 08:11:02 GMT Content-Type: application/json; charset=UTF-8 Content-Length: 277 Connection: keep-alive Error-Code: 0 Error-Msg: ok
{ “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)));
}
}
当前代码目录如下
二,了解企业微信的api
- 拿到token之后,可以肆意玩弄企业微信的api了,选取几个简单的api进行入门操作,,部门管理模块
- 先浏览一下相关功能的api描述和文档
- 先以获取部门列表api为例
- 为了区分个人负责模块,创建包com.任意.wework.contact contact是通讯录的英文译名。
- 下建类为业务线,比如通讯录下有部门管理,成员管理,标签管理,contact中放共通代码。