干貨 | REST-assured 獲取日志到文件并結合 Allure 報告進行展示

      網友投稿 704 2025-04-04

      使用 Rest-assured 集合 Allure 運行完用例之后,在生成的報告中只有斷言信息,沒有請求的日志信息。而當我們的用例失敗時,特別是接口失敗時,請求日志是分析原因的第一手資源。那如何將 Rest-assured 產生的日志存入 Allure 里,并且能和用例一一對應起來呢?

      在使用 Rest-assured 集合 Allure 運行完用例之后,查看生成的報告信息如下:

      我們可以看到在生成的報告中只有斷言信息,而沒有請求的日志信息,而當我們的用例失敗時,特別是接口失敗時,請求日志是分析原因的第一手資源;

      其實Rest-assured是有請求日志的,可以通過在given()和then()后面加上.log().all()來打印全部的日志信息:

      那么問題來了,如何將這打印出來的日志信息都"轉移"到 Allure 報告中呢?并且能和用例一一對應起來,然后就開始了探索之路~

      首先來看一下 Allure 報告可以如何展示日志,在學習 Allure 的過程中發現 Allure有添加附件展示的功能,那么我就直接想到將日志能存入文件然后添加到報告附件不就可以了嗎?由此,Allure 端的解決方向確定。

      接下來就是要想法辦將 Rest-assured 產生的日志存入文件了;

      整體思路:

      【Rest-assured打印日志】- 【Rest-assured日志存入文件】- 【文件以附件形式傳入Allure】- 【Allure展示附件日志】

      先看一下Allure 添加附件的兩種方法:

      @Attachment:在方法上添加注解@Attachment,方法的返回值就會作為附件上傳,可添加展示文本和附件類型

      @Attachment(value = "Page screenshot", type = "image/png")

      Allure.addAttachment:通過addAttachment方法指定要添加的附件和展示信息

      public static void addHttpLogToAllure() { try { Allure.addAttachment("接口請求響應日志", new FileInputStream("src/main/resources/test.log")); } catch (FileNotFoundException e) { e.printStackTrace(); } }

      由于在框架中,我已經進行了封裝,每個接口請求后都會返回 response 信息。所以一開始我想著從拿到 response 信息進行存儲,查閱官方文檔,尋找 response 信息獲取的相關 API,發現 response.asString();可以獲取到 json body 的信息,就先嘗試使用。

      //// Get the response body as a String response.asString(); // Get all headers Headers allHeaders = response.getHeaders(); // Get a single header value: String headerName = response.getHeader("headerName"); // Get all cookies as simple name-value pairs Map allCookies = response.getCookies(); // Get a single cookie value: String cookieValue = response.getCookie("cookieName"); // Get status line String statusLine = response.getStatusLine(); // Get status code int statusCode = response.getStatusCode();

      先創建方法,用于接收 response 獲取信息

      @Attachment("響應報文") public static String respondBody(Response response) { boolean prettyFormat = true; JSONObject jsonObject = JSONObject.parseObject(response.asString()); String responseBody = JSONObject.toJSONString(jsonObject,prettyFormat); return responseBody; }

      再創建方法,用于接收請求信息,由于我的所有請求信息都傳入了一個 Restful 對象中且未找到 Rest-assured 關于請求信息直接獲取的 API,這里我就直接取 Restful對象

      Restful對象:

      import lombok.Data; import java.util.HashMap; @Data public class Restful { public String url; public String method; public HashMap header = new HashMap<>(); public HashMap query = new HashMap<>(); public HashMap pathQuery = new HashMap<>(); public String body; }

      @Attachment("請求信息") public static String requestBody(Restful restful) { //報告展現請求信息 return restful.toString(); }

      最后創建一個總的接收方法加入請求流程中,在每個請求結束后獲取日志信息進行附件添加

      public static void getRequestAndRespondBody(Restful restful, Response response){ requestBody(restful); respondBody(response); }

      從結果可以看到請求和響應報文已經成功展示,說明這種實現的思路的可行性,只是展示的日志信息還不滿意,還是先想要全部的請求和響應信息且是格式化后的,不僅僅只有報文,繼續探索~

      在研究過程中發現RestAssured提供了logConfig方法,可以將原本在Console中打印的信息指定格式化輸出到文件中,具體用法如下(這里指演示重點實現原理部分,其余封裝細節太冗余就不展示了):

      WriterOutputStream用到依賴如下:

      commons-io commons-io 2.4

      在請求中設置log打印方式和存儲路徑

      public void addLogToFile(){ try (FileWriter fileWriter = new FileWriter("src/main/resources/test.log"); PrintStream printStream = new PrintStream(new WriterOutputStream(fileWriter), true)) { RestAssured.config = RestAssured.config().logConfig(LogConfig.logConfig().defaultStream(printStream)); given().XXX.log().all(). when().XXX then().log().all(); } catch (IOException e) { e.printStackTrace(); } }

      創建附件添加方法加入請求流程中,在每個請求結束后獲取日志信息進行附件添加

      public static void addHttpLogToAllure() { try { Allure.addAttachment("接口請求響應日志", new FileInputStream("src/main/resources/test.log")); } catch (FileNotFoundException e) { e.printStackTrace(); } }

      整體的流程思路就是:

      @Test void testAllureReport(){ addLogToFile(); addHttpLogToAllure(); }

      在下面展示的用例中有2個接口請求,可以看到分別記錄展示了,且格式與 Console 中格式化打印的保持一致。

      Rest-assured 提供了過濾器 Filters,利用它可以串改請求,設置鑒權信息,過濾 log 等,具體的可在官網中進行學習研究,這里主要用到 RequestLoggingFilter()和 ResponseLoggingFilter() 來實現我們的需求。

      RequestLoggingFilter() 和 ResponseLoggingFilter() 可以將所有的請求和響應的 log 進行打印,而我們想要的是將 log 存入文件,因此還要借助方法 logRequestTo(PrintStream stream),指定 log 的格式化輸出到文件中:

      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(new RequestLoggingFilter().logRequestTo(printStream),new ResponseLoggingFilter().logResponseTo(printStream));

      干貨 | REST-assured 獲取日志到文件并結合 Allure 報告進行展示

      附件添加復用上述的方法:

      AllureAttachment.addHttpLogToAllure();

      結果依然實現了我們的需求

      請點擊鏈接獲取更多技術文章,有驚喜喲:https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=hwyun×tamp=1651025761

      API

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Microsoft Office 2016 預覽版輕體驗
      下一篇:為什么我的第二篇朝讀經典_讀后感不見了(朝文讀后感)
      相關文章
      国产亚洲福利一区二区免费看| 一本色道久久综合亚洲精品蜜桃冫| 亚洲精品亚洲人成在线| 亚洲视频免费在线看| 亚洲AV无码国产在丝袜线观看 | 亚洲精品国产字幕久久不卡| 国产av无码专区亚洲国产精品| 国产亚洲精品成人久久网站| 亚洲a∨无码一区二区| 亚洲Av永久无码精品黑人| 亚洲成a∨人片在无码2023 | 亚洲中文字幕精品久久| 亚洲夂夂婷婷色拍WW47| 亚洲熟妇无码一区二区三区| 亚洲熟妇av午夜无码不卡| 亚洲人成人网站18禁| 亚洲av午夜电影在线观看| 国产成人精品久久亚洲高清不卡| 成人精品国产亚洲欧洲| 亚洲国产精品成人一区| 久久精品国产精品亚洲| 久久久久亚洲爆乳少妇无| 亚洲精品无码久久久久去q | 亚洲av成人一区二区三区在线播放| 亚洲av第一网站久章草| 亚洲色婷婷综合开心网| 亚洲永久精品ww47| 久久久久亚洲精品成人网小说| 亚洲一区二区电影| 亚洲人成毛片线播放| 亚洲色丰满少妇高潮18p| 理论亚洲区美一区二区三区| 亚洲情a成黄在线观看| 日韩亚洲人成在线综合日本| 亚洲精品免费在线观看| 亚洲一区中文字幕在线电影网| 亚洲日本天堂在线| 亚洲日韩VA无码中文字幕 | 亚洲av中文无码乱人伦在线播放 | 亚洲AV无码一区二三区 | 亚洲人成电影网站久久|