zoukankan      html  css  js  c++  java
  • restassured|把请求和响应写到allure2报告中实战

    一、需求背景

    在某个时间点,线上的某个接口不正常。开发说把接口名称以及其请求和响应发出来,我去后台查看具体的日志。那么我们的restassured接口框架有没有办法实现呢

    二、解决方案

    使用restassured的Filters

    三、官网说明

    过滤器允许您在实际提交之前检查和更改请求,并在返回到期望值之前检查和更改响应。 您可以将其视为 AOP 术语中的“环绕建议”。 过滤器可用于实现自定义身份验证方案、会话管理、日志记录等。要创建过滤器,您需要实现 io.restassured.filter.Filter 接口。 要使用过滤器,您可以执行以下操作:

    given().filter(new MyFilter()). ..

    REST Assured 提供了几个可供使用的过滤器:

    • io.restassured.filter.log.RequestLoggingFilter: A filter that'll print the request specification details.
    • io.restassured.filter.log.ResponseLoggingFilter: A filter that'll print the response details if the response matches a given status code.
    • io.restassured.filter.log.ErrorLoggingFilter: A filter that'll print the response body if an error occurred (status code is between 400 and 500).

    RequestLoggingFilter() 和 ResponseLoggingFilter() 可以将所有的请求和响应的 log 进行打印,而我们想要的是将 log 存入文件,因此还要借助方法 logRequestTo(PrintStream stream) ,指定 log 的格式化输出到文件中

    四、案例---企业微信的登录接口为例

    工程目录结构

     五、具体步骤

    1、引入commons-io库

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.10.0</version>
            </dependency>

    2、实现自己的打印流,并且接口请求和响应写到对应的日志中

    package com.wechat.utils;
    
    import io.restassured.RestAssured;
    import io.restassured.filter.log.RequestLoggingFilter;
    import io.restassured.filter.log.ResponseLoggingFilter;
    import org.apache.commons.io.output.WriterOutputStream;
    
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintStream;
    
    public class MyPrintStream {
    
        public static void myPrintStream(){
    
            FileWriter fileWriter = null;
            try{
                fileWriter =   new FileWriter("src/main/resources/test.log");
            }catch (IOException e){
                e.printStackTrace();
            }
    
            PrintStream printStream = new PrintStream(new WriterOutputStream(fileWriter), true);
            RestAssured.filters( RequestLoggingFilter.logRequestTo (printStream), ResponseLoggingFilter.logResponseTo (printStream));
    
        }
    
    
    }

    3、实现把日志贴到Allure报告中

    package com.wechat.utils;
    
    import io.qameta.allure.Allure;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    public class AllureAttachment {
    
        public static void addHttpLogToAllure(){
    
            try {
                Allure.addAttachment("接口请求响应日志",new FileInputStream("src/main/resources/test.log"));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    4、在apiObject对象中加入这两个步骤

    /**
     * projectName: WeChatWorkApiTest
     * fileName: TokenHelper.java
     * packageName: com.wechat.apiobject
     * date: 2020-07-18 5:42 下午
     */
    package com.wechat.apiobject;
    
    import com.wechat.utils.AllureAttachment;
    import com.wechat.utils.MyPrintStream;
    
    import static io.restassured.RestAssured.given;
    
    /**
     * @version: V1.0
     * @author: kuohai
     * @className: TokenHelper
     * @packageName: com.wechat.apiobject
     * @description: Token相关工具类
     * @data: 2020-07-18 5:42 下午
     **/
    public class TokenHelper {
    
        public static String  getAccessToken() {
            MyPrintStream.myPrintStream ();
            String access_token = given()
                    .log ().all ()
                    .when()
                    .param("corpid", "wwc376242756245a87")
                    .param("corpsecret", "LTnDiVdqHzzmUz8fj21-0kgxv6wEDs3krBnO-0g4MPw")
                    .get("https://qyapi.weixin.qq.com/cgi-bin/gettoken")
                    .then()
                    .log().all ().extract ().path ( "access_token" );
            AllureAttachment.addHttpLogToAllure ();
            return access_token;
            
        }
    }

    5、测试类

    /**
     * projectName: WeChatWorkApiTest
     * fileName: Demo_01.java
     * packageName: com.wechat.testcase
     * date: 2020-07-18 2:49 下午
     */
    package com.wechat.testcase;
    
    
    import com.wechat.apiobject.TokenHelper;
    import io.qameta.allure.*;
    
    
    import org.junit.jupiter.api.*;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     *
     **/
    @Epic("Epic企业微信接口测试用例0713")
    @Feature("Feature部门相关功能测试0713")
    public class Demo_09 {
        private static final Logger logger = LoggerFactory.getLogger( Demo_09.class);
        public static String accessToken;
    
    
        @Test
        void getAccessToken() {
            accessToken = TokenHelper.getAccessToken();
            Assertions.assertNotNull ( accessToken );
        }
    
        }

    6、使用idea单独执行测试类,并且执行allure serve allure-results,得到测试报告,查看

    restassured的filters官网:

     https://github.com/rest-assured/rest-assured/wiki/Usage#filters

    知道、想到、做到、得到
  • 相关阅读:
    spring揭秘读书笔记----spring的ioc容器之BeanFactory
    spring启动加载过程源码分析
    java线程数过高原因分析
    spring揭秘读书笔记----ioc的基本概念
    git merge rebase的区别及应用场景
    spring实现定时任务
    jetty.xml解析
    Hackthebox--------irked
    CTF之信息泄漏
    CTF web题型解题技巧
  • 原文地址:https://www.cnblogs.com/Durant0420/p/15003376.html
Copyright © 2011-2022 走看看