微信接口测试实践含源码

 

环境准备

'junit5'+ 'Rest-Assured'+ 'allure'

JUnit 5是java旗下的一个xunit测试框架

xunit体系

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  • JUnit Platform: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
  • JUnit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。
  • JUnit Vintage:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。

REST Assured 是一个轻量化接口测试框架,它支持发起POST,GET,PUT,DELETE,OPTIONS,PATCH和HEAD请求,并且可以用来验证和校对这些请求的响应信息。

Allure框架是一种灵活的轻量级多语言测试报告工具,它不仅能够以简洁的web报告形式显示已测试的内容,而且允许参与开发过程的每个人从测试的日常执行中提取最大限度的有用信息。

<!-- JUNIN5 -->
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.6.0</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>RELEASE</version>
</dependency>

<!-- rest assured-->
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-path</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>4.1.2</version>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>io.qameta.allure</groupId>
    <artifactId>allure-junit5</artifactId>
    <version>RELEASE</version>
</dependency>

<!--LOG4J  -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

获取接口调用凭证-id:

获取接口调用凭证-密钥:

需要开启api同步

获取接口调用凭证-accesstoken:

public class TokenUtil {
    public static String  getAccessToken(){
      String  accessToken=given()
                .when()
                .param("corpid","ww2371688596201076")  //企业id
                .param("corpsecret","okaj3sQZSWJmGneNjh4s4IHkp5RD8j3v_7ZSa8IHF6Y")  //企业密钥
                .get("https://qyapi.weixin.qq.com/cgi-bin/gettoken") // 请求地址
                .then()
                .extract().response().path("access_token");  // 提取响应
        return accessToken;
    }
}
csv数据驱动
@CsvFileSource(resources = "/data/createDepartment.csv", numLinesToSkip = 1)
创建部门的po模式,分层处理
/**
 *
 * @param userid 用户id
 * @param name 用户名
 * @param alias 别名
 * @param departmentId 所属部门
 * @param accessToken
 * @param  mobile 手机号
 * @return
 */
public static Response creatUser(String userid, String name ,String alias ,String departmentId,String mobile,String accessToken){
    String creatBody ="{\n" +
            "    \"userid\": \""+userid+"\",\n" +
            "    \"name\": \""+name+"\",\n" +
            "    \"alias\": \""+alias+"\",\n" +
            "    \"department\": \""+departmentId+"\",\n" +
            "    \"mobile\": \""+mobile+"\",\n" +
            " \n" +
            "}";
    // 信任证书
    useRelaxedHTTPSValidation();
    Response creatResponse=given().log().all()
            .proxy(8888)    //Charles 代理查看数据
            .contentType("application/json")
            .body(creatBody)
            .queryParam("access_token",accessToken)
            .post("https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token="+accessToken+"")
            .then()
            .log().body()
            .extract()
            .response()
            ;
    return creatResponse;
}

使用  useRelaxedHTTPSValidation(); 可以信任Charles证书,方便查询入参返参

数据清理工具类,可以实现脚本重复执行

@Epic("Epic企业微信接口测试用例")
@Feature("Feature部门相关功能测试")
public class Demo_allure {
    private static final Logger logger = LoggerFactory.getLogger(Demo_allure.class);
    static String accessToken;

    @BeforeAll
    public  static  void  getAccessToken(){
         accessToken = TokenUtil.getAccessToken();
         logger.info(accessToken);
    }
    //数据清理  每次用例启动结束时执
    @BeforeEach
    @AfterEach
    void clearDepartment(){
        EvnHelperTask.clearDpartMentTask(accessToken);
    }

    @Description("Description这个测试方法会测试创建部门的功能-入参数据驱动")
    @Story("stroy创建部门测试")
    @DisplayName("DisplayName创建部门")
    @ParameterizedTest
    @CsvFileSource(resources = "/data/createDepartment.csv", numLinesToSkip = 1) //数据驱动
    void createDepartment(String creatName, String creatEnName, String returnCode) {
        Response response=DepartMentObj.creatDepartMent(creatName,creatEnName,accessToken);
        assertEquals(returnCode,response.path("errcode").toString());
    }

使用Junit5提供的Java 8 lambdas的断言方法,当一个断言失败,剩下的断言依然会执行,脚本的容错性增强

lambdas断言

接口并发测试:

并发测试配置文件

并发测试注解

@RepeatedTest(100)
@Execution(ExecutionMode.CONCURRENT)

 

测试报告:

 

 

测试报告

 

附上源码地址 :https://github.com/zhangcheng170245/seleniumCoding/tree/master/wechatApi

 

posted @ 2020-12-25 11:40  成子吃橙子  阅读(725)  评论(0编辑  收藏  举报