整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          2021 年你需要知道的 CSS 工程化技術

          家好,我是皮湯。最近業務調整,組內開啟了前端工程化方面的基建,我主要負責 CSS 技術選型這一塊,針對目前業界主流的幾套方案進行了比較完善的調研與比較,分享給大家。

          目前整個 CSS 工具鏈、工程化領域的主要方案如下:

          而我們技術選型的標準如下:

          - 開發速度快

          - 開發體驗友好

          - 調試體驗友好

          - 可維護性友好

          - 擴展性友好

          - 可協作性友好

          - 體積小

          - 有最佳實踐指導

          目前主要需要對比的三套方案:

          - Less/Sass + PostCSS 的純 CSS c側方案

          - styled-components / emotion 的純 CSS-in-JS 側方案

          - TailwindCSS 的以寫輔助類為主的 HTML 側方案

          ## 純 CSS 側方案

          ### 介紹與優點

          > 維護狀態:一般

          > Star 數:16.7K

          > 支持框架:無框架限制

          > 項目地址:https://github.com/less/less.js

          Less/Sass + PostCSS 這種方案在目前主流的組件庫和企業級項目中使用很廣,如 ant-design 等

          它們的主要作用如下:

          - 為 CSS 添加了類似 JS 的特性,你也可以使用變量、mixin,寫判斷等

          - 引入了模塊化的概念,可以在一個 less 文件中導入另外一個 less 文件進行使用

          - 兼容標準,可以快速使用 CSS 新特性,兼容瀏覽器 CSS 差異等

          這類工具能夠與主流的工程化工具一起使用,如 Webpack,提供對應的 loader 如 sass-loader,然后就可以在 React/Vue 項目中建 `.scss` 文件,寫 sass 語法,并導入到 React 組件中生效。

          比如我寫一個組件在響應式各個斷點下的展示情況的 sass 代碼:

          ```

          .component {

          width: 300px;

          @media (min-width: 768px) {

          width: 600px;

          @media (min-resolution: 192dpi) {

          background-image: url(/img/retina2x.png);

          }

          }

          @media (min-width: 1280px) {

          width: 800px;

          }

          }

          ```

          或導入一些用于標準化瀏覽器差異的代碼:

          ```

          @import "normalize.css";

          // component 相關的其他代碼

          ```

          ### 不足

          這類方案的一個主要問題就是,只是對 CSS 本身進行了增強,但是在幫助開發者如何寫更好的 CSS、更高效、可維護的 CSS 方面并沒有提供任何建議。

          - 你依然需要自己定義 CSS 類、id,并且思考如何去用這些類、id 進行組合去描述 HTML 的樣式

          - 你依然可能會寫很多冗余的 Less/Sass 代碼,然后造成項目的負擔,在可維護性方面也有巨大問題

          ### 優化

          - 可以引入 CSS 設計規范:BEM 規范,來輔助用戶在整個網頁的 HTML 骨架以及對應的類上進行設計

          - 可以引入 CSS Modules,將 CSS 文件進行 “作用域” 限制,確保在之后維護時,修改一個內容不會引起全局中其他樣式的效果

          #### BEM 規范

          B (Block)、E(Element)、M(Modifier),具體就是通過塊、元素、行為來定義所有的可視化功能。

          拿設計一個 Button 為例:

          ```

          /* Block */

          .btn {}

          /* 依賴于 Block 的 Element */

          .btn__price {}

          /* 修改 Block 風格的 Modifier */

          .btn--orange {}

          .btn--big {}

          ```

          遵循上述規范的一個真實的 Button:

          ```

          <a class="btn btn--big btn--orange" href="#">

          <span class="btn__price"></span>

          <span class="btn__text">BIG BUTTON</span>

          </a>

          ```

          可以獲得如下的效果:

          #### CSS Modules

          CSS Modules 主要為 CSS 添加局部作用域和模塊依賴,使得 CSS 也能具有組件化。

          一個例子如下:

          ```

          import React from 'react';

          import style from './App.css';

          export default () => {

          return (

          <h1 className={style.title}>

          Hello World

          </h1>

          );

          };

          ```

          ```

          .title {

          composes: className;

          color: red;

          }

          ```

          上述經過編譯會變成如下 hash 字符串:

          ```

          <h1 class="_3zyde4l1yATCOkgn-DBWEL">

          Hello World

          </h1>

          ```

          ```

          ._3zyde4l1yATCOkgn-DBWEL {

          color: red;

          }

          ```

          CSS Modules 可以與普通 CSS、Less、Sass 等結合使用。

          ## 純 JS 側方案

          ### 介紹與優點

          > 維護狀態:一般

          > Star 數:35.2K

          > 支持框架:React ,通過社區支持 Vue 等框架

          > 項目地址:https://github.com/styled-components/styled-components

          使用 JS 的模板字符串函數,在 JS 里面寫 CSS 代碼,這帶來了兩個認知的改變:

          - 不是在根據 HTML,然后去寫 CSS,而是站在組件設計的角度,為組件寫 CSS,然后應用組件的組合思想搭建大應用

          - 自動提供類似 CSS Modules 的體驗,不用擔心樣式的全局污染問題

          同時帶來了很多 JS 側才有的各種功能特性,可以讓開發者用開發 JS 的方式開發 CSS,如編輯器自動補全、Lint、編譯壓縮等。

          比如我寫一個按鈕:

          ```

          const Button = styled.button`

          /* Adapt the colors based on primary prop */

          background: ${props => props.primary ? "palevioletred" : "white"};

          color: ${props => props.primary ? "white" : "palevioletred"};

          font-size: 1em;

          margin: 1em;

          padding: 0.25em 1em;

          border: 2px solid palevioletred;

          border-radius: 3px;

          `;

          render(

          <div>

          <Button>Normal</Button>

          <Button primary>Primary</Button>

          </div>

          );

          ```

          可以獲得如下效果:

          還可以擴展樣式:

          ```

          // The Button from the last section without the interpolations

          const Button = styled.button`

          color: palevioletred;

          font-size: 1em;

          margin: 1em;

          padding: 0.25em 1em;

          border: 2px solid palevioletred;

          border-radius: 3px;

          `;

          // A new component based on Button, but with some override styles

          const TomatoButton = styled(Button)`

          color: tomato;

          border-color: tomato;

          `;

          render(

          <div>

          <Button>Normal Button</Button>

          <TomatoButton>Tomato Button</TomatoButton>

          </div>

          );

          ```

          可以獲得如下效果:

          ### 不足

          雖然這類方案提供了在 JS 中寫 CSS,充分利用 JS 的插值、組合等特性,然后應用 React 組件等組合思想,將組件與 CSS 進行細粒度綁定,讓 CSS 跟隨著組件一同進行組件化開發,同時提供和組件類似的模塊化特性,相比 Less/Sass 這一套,可以復用 JS 社區的最佳實踐等。

          但是它仍然有一些不足:

          - 仍然是是對 CSS 增強,提供非常大的靈活性,開發者仍然需要考慮如何去組織自己的 CSS

          - 沒有給出一套 “有觀點” 的最佳實踐做法

          - 在上層也缺乏基于 styled-components 進行復用的物料庫可進行參考設計和使用,導致在初始化使用時開發速度較低

          - 在 JS 中寫 CSS,勢必帶來一些本屬于 JS 的限制,如 TS 下,需要對 Styled 的組件進行類型注釋

          - 官方維護的內容只兼容 React 框架,Vue 和其他框架都由社區提供支持

          整體來說不太符合團隊協作使用,需要人為總結最佳實踐和規范等。

          ### 優化

          - 尋求一套寫 CSS 的最佳實踐和團隊協作規范

          - 能夠擁有大量的物料庫或輔助類等,提高開發效率,快速完成應用開發

          ## 偏向 HTML 側方案

          ### 介紹與優點

          > 維護狀態:積極

          > Star 數:48.9K

          > 支持框架:React、Vue、Svelte 等主流框架

          > 項目地址:https://github.com/tailwindlabs/tailwindcss

          典型的是 TailwindCSS,一個輔助類優先的 CSS 框架,提供如 `flex` 、`pt-4` 、`text-center` 、`rotate-90` 這樣實用的類名,然后基于這些底層的輔助類向上組合構建任何網站,而且只需要專注于為 HTML 設置類名即可。

          一個比較形象的例子可以參考如下代碼:

          ```

          <button class="btn btn--secondary">Decline</button>

          <button class="btn btn--primary">Accept</button>

          ```

          上述代碼應用 BEM 風格的類名設計,然后設計兩個按鈕,而這兩個類名類似主流組件庫里面的 Button 的不同狀態的設計,而這兩個類又是由更加基礎的 TailwindCSS 輔助類組成:

          ```

          .btn {

          @apply text-base font-medium rounded-lg p-3;

          }

          .btn--primary {

          @apply bg-rose-500 text-white;

          }

          .btn--secondary {

          @apply bg-gray-100 text-black;

          }

          ```

          上面的輔助類包含以下幾類:

          - 設置文本相關: `text-base` 、`font-medium` 、`text-white` 、`text-black`

          - 設置背景相關的:`bg-rose-500` 、`bg-gray-100`

          - 設置間距相關的:`p-3`

          - 設置邊角相關的:`rounded-lg`

          通過 Tailwind 提供的 `@apply` 方法來對這些輔助類進行組合構建更上層的樣式類。

          上述的最終效果展示如下:

          可以看到 TailwindCSS 將我們開發網站的過程抽象成為使用 Figma 等設計軟件設計界面的過程,同時提供了一套用于設計的規范,相當于內置最佳實踐,如顏色、陰影、字體相關的內容,一個很形象的圖片可以說明這一點:

          TailwindCSS 為我們規劃了一個元素可以設置的屬性,并且為每個屬性給定了一組可以設置的值,這些屬性+屬性值組合成一個有機的設計系統,非常便于團隊協作與共識,讓我們開發網站就像做設計一樣簡單、快速,但是整體風格又能保持一致。

          TailwindCSS 同時也能與主流組件庫如 React、Vue、Svelte 結合,融入基于組件的 CSS 設計思想,但又只需要修改 HTML 上的類名,如我們設計一個食譜組件:

          ```

          // Recipes.js

          import Nav from './Nav.js'

          import NavItem from './NavItem.js'

          import List from './List.js'

          import ListItem from './ListItem.js'

          export default function Recipes({ recipes }) {

          return (

          <div className="divide-y divide-gray-100">

          <Nav>

          <NavItem href="/featured" isActive>Featured</NavItem>

          <NavItem href="/popular">Popular</NavItem>

          <NavItem href="/recent">Recent</NavItem>

          </Nav>

          <List>

          {recipes.map((recipe) => (

          <ListItem key={recipe.id} recipe={recipe} />

          ))}

          </List>

          </div>

          )

          }

          // Nav.js

          export default function Nav({ children }) {

          return (

          <nav className="p-4">

          <ul className="flex space-x-2">

          {children}

          </ul>

          </nav>

          )

          }

          // NavItem.js

          export default function NavItem({ href, isActive, children }) {

          return (

          <li>

          <a

          href={href}

          className={`block px-4 py-2 rounded-md ${isActive ? 'bg-amber-100 text-amber-700' : ''}`}

          >

          {children}

          </a>

          </li>

          )

          }

          // List.js

          export default function List({ children }) {

          return (

          <ul className="divide-y divide-gray-100">

          {children}

          </ul>

          )

          }

          //ListItem.js

          export default function ListItem({ recipe }) {

          return (

          <article className="p-4 flex space-x-4">

          <img src={recipe.image} alt="" className="flex-none w-18 h-18 rounded-lg object-cover bg-gray-100" width="144" height="144" />

          <div className="min-w-0 relative flex-auto sm:pr-20 lg:pr-0 xl:pr-20">

          <h2 className="text-lg font-semibold text-black mb-0.5">

          {recipe.title}

          </h2>

          <dl className="flex flex-wrap text-sm font-medium whitespace-pre">

          <div>

          <dt className="sr-only">Time</dt>

          <dd>

          <abbr title={`${recipe.time} minutes`}>{recipe.time}m</abbr>

          </dd>

          </div>

          <div>

          <dt className="sr-only">Difficulty</dt>

          <dd> · {recipe.difficulty}</dd>

          </div>

          <div>

          <dt className="sr-only">Servings</dt>

          <dd> · {recipe.servings} servings</dd>

          </div>

          <div className="flex-none w-full mt-0.5 font-normal">

          <dt className="inline">By</dt>{' '}

          <dd className="inline text-black">{recipe.author}</dd>

          </div>

          <div class="absolute top-0 right-0 rounded-full bg-amber-50 text-amber-900 px-2 py-0.5 hidden sm:flex lg:hidden xl:flex items-center space-x-1">

          <dt className="text-amber-500">

          <span className="sr-only">Rating</span>

          <svg width="16" height="20" fill="currentColor">

          <path d="M7.05 3.691c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.372 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.539 1.118l-2.8-2.034a1 1 0 00-1.176 0l-2.8 2.034c-.783.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.363-1.118L.98 9.483c-.784-.57-.381-1.81.587-1.81H5.03a1 1 0 00.95-.69L7.05 3.69z" />

          </svg>

          </dt>

          <dd>{recipe.rating}</dd>

          </div>

          </dl>

          </div>

          </article>

          )

          }

          ```

          上述食譜的效果如下:

          可以看到我們無需寫一行 CSS,而是在 HTML 里面應用各種輔助類,結合 React 的組件化設計,既可以輕松完成一個非常現代化且好看的食譜組件。

          除了上面的特性,TailwindCSS 在響應式、新特性支持、Dark Mode、自定義配置、自定義新的輔助類、IDE 方面也提供非常優秀的支持,除此之外還有基于 TailwindCSS 構建的物料庫 Tailwind UI ,提供各種各樣成熟、好看、可用于生產的物料庫:

          ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1cb983da6f71470b91ac764d14907998~tplv-k3u1fbpfcp-zoom-1.image)

          因為需要自定的 CSS 不多,而需要自定義的 CSS 可以定義為可復用的輔助類,所以在可維護性方面也是極好的。

          ### 不足

          - 因為要引入一個額外的運行時,TailwindCSS 輔助類到 CSS 的編譯過程,而隨著組件越來越多,需要編譯的工作量也會變大,所以速度會有影響

          - 過于底層,相當于給了用于設計的最基礎的指標,但是如果我們想要快速設計網站,那么可能還需要一致的、更加上層的組件庫

          - 相當于引入了一套框架,具有一定的學習成本和使用成本

          ### 優化

          - Tailwind 2.0 支持 [JIT](https://blog.tailwindcss.com/tailwindcss-2-1 "JIT"),可以大大提升編譯速度,可以考慮引入

          - 基于 TailwindCSS,設計一套符合自身風格的上層組件庫、物料庫,便于更加快速開發

          - 提前探索、學習和總結一套教程與開發最佳實踐

          - 探索 styled-components 等結合 TailwindCSS 的開發方式

          ## 參考鏈接

          - [CSS 工程化發展歷程](https://bytedance.feishu.cn/docs/doccnTRF0OZtJMgKuo3y0hIDMbc# "CSS 工程化發展歷程")


          / 感謝支持/

          以上便是本次分享的全部內容,希望對你有所幫助^_^

          喜歡的話別忘了 分享、點贊、收藏 三連哦~

          歡迎關注公眾號 程序員巴士,來自字節、蝦皮、招銀的三端兄弟,分享編程經驗、技術干貨與職業規劃,助你少走彎路進大廠。

          用場景

          全部網頁變成灰色(黑白色),那么今天就說說,通過幾行簡單的代碼,來實現這個功能。

          萬法一:

          第一種:修改CSS文件

          我們可以在網頁的CSS文件中添加以下的CSS代碼,來實現網頁黑白色,也就是網站變灰

          html {

          fiter. progid:DXlmage Transtorm.Microsoft Basiclmage(grayscale=1);

          -webkit- fiter: grayscale(100%);

          結果效果:

          TBD

          第二種:在網頁的<head>標簽內加入以下代碼

          如果你不想改動CSS文件,你可以通過在網頁頭部中的<head>標簽內部加入內聯CSS代碼的形式實現網站網頁變灰

          <style type="textcss">

          html

          fliter. progid:DXlmageTransform.Microsoft. Basiclmage(grayscale=1);

          -webitfilter. grayscale(100%)}

          </style>

          結果效果:

          TBD

          第三種:修改<html>標簽加入內聯樣式Q

          如里上面的兩種方式都不喜歡,可以通過修改<html>標簽,以加入內聯樣式的方法,達到網頁變灰的效果

          <html style="liter. progid:DXlmage Transform.Microsoft. Basiclmage(grayscale=1);

          -webi-fiter: graysale(100%)"*>

          結果效果:

          TBD

          第四種:這里使用的CSS代碼

          body *{

          -webi-fiter: grayscale(100%); |* webkit */

          -mz-fiter: grayscale(100%); /firefox*/

          -ms-iter. grayscale(100%); Pie9*/

          -iter. grayscale(100%); *opera*/

          fiter. grayscale(100%);

          fiterprogid:DXlmage Transform.Microsoft Basiclmage(grayscale=1),

          fitrgray; /ie9-*/ P但是這行代碼是為了兼容IE,雖然-行代碼很少,但是效果并不好,而且網頁比較卡不推薦使用[即刪除],同時

          發現, csdn,京東,淘寶也都沒有兼容IE11瀏覽器*/

          結果效果:

          TBD

          以上幾種方法,都是通過CSS的濾鏡來控制頁面的顯示而已,唯一不同的就CSS代碼調用的方式


          方法二

          同時支持IE和Chrome, Safari,但是不支持Firefox.

          html {overflow-yQ siolitereprogir:DXlmnageTransform.Microsoft. Basiclmage(grayscale= 1)-webit-fiter graysale(100%);}

          補充:

          body{

          fitergray

          說明:此方法支持IE,不支持Firefox和Chrome等非1E內核瀏覽器。

          方法三

          使用grayscale. js插件

          使用grayscale.js插件。這個插件是模擬lE的iterprogid方法。

          使用方法方法:

          grayscale.js插件源文件: htp://c/. baiwanzhan. comjs/gray_ baiwanzhan.js

          window. onload=function({

          grayscale(document body);

          說明:支持IE、Safari. Chrome. Opera和Firefox等瀏覽器。

          問題:這個在IE下也挺占資源的。

          方法四

          找到你的CSS文件然后修改css代碼文件。在以下的文件當中

          form,diy,span,img,ul,ol,li,

          加入filter. Gray;

          總結:

          建議:使用方法3,雖然不支持更多的瀏覽器,但是穩定、速度快,而且資源占用小。

          、為什么用命令行模式

          使用GUI方式啟動jmeter,運行線程較多的測試時,會造成內存和CPU的大量消耗,導致客戶機卡死;

          所以一般采用的方式是在GUI模式下調整測試腳本,再用命令行模式執行;

          命令行方式支持在多個環境下使用,windosw的dos環境下,也可以在linux環境上執行。

          注意:使用命令執行jmeter腳本必須使用jmeter 3.0及以上版本

          2、怎么用

          2.1、執行命令

          jmeter -n -t <testplan filename> -l <listener filename>
          
          示例: jmeter -n -t testplan.jmx -l test.jtl
          
          示例含義:表示以命令行模式運行testplan.jmx文件,輸出的日志文件為test.jtl

          2.2、參數介紹

          Jmeter官方手冊給的介紹如下:

          -h, –help -> prints usage information and exit
          -n, –nongui -> run JMeter in nongui mode
          -t, –testfile <argument> -> the jmeter test(.jmx) file to run
          -l, –logfile <argument> -> the file to log samples to
          -r, –runremote -> Start remote servers (as defined in remote_hosts)
          -H, –proxyHost <argument> -> Set a proxy server for JMeter to use
          -P, –proxyPort <argument> -> Set proxy server port for JMeter to use

          中文釋義:

          -h 幫助 -> 打印出有用的信息并退出
          
          -n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
          
          -t 測試文件 -> 要運行的 JMeter 測試腳本文件
          
          -l 日志文件 -> 記錄結果的文件
          

          -R 遠程執行 -> 遠程執行機的IP(ip地址)如果有多個ip時,使用-R 192.168.2.170,192.168.2.171(分布式使用)

          -r 遠程執行 -> 在Jmter.properties文件中指定的所有遠程服務器(分布式使用)
          
          -H 代理主機 -> 設置 JMeter 使用的代理主機
          
          -P 代理端口 -> 設置 JMeter 使用的代理主機的端口號

          2.3、執行過程

          命令:jmeter -n -t C:\Users\yzs\Desktop\Unione_performance.jmx -l report-result.jtl

          不在jmeter安卓目錄執行腳本的前提是配置了jmeter的環境變量。

          2.4、報告查看

          上述的命令有測試結果保存到D:\report中,在GUI模式下查看測試報告:

          1、在測試計劃下,添加對應的測試報告元件,舉例增加了:查看結果樹、聚合報告

          2、在“所有數據寫入一個文件”,選擇加載對應的結果文件

          3、下面就會有對應的表格展示,具體見下圖

          2.5、命令行傳遞變量值

          設置線程組的線程數和循環次數。

          注意格式:

          ${__P(threadNum)}

          ${__P(threadCount)}

          其中P前面是兩個下劃線,()內就是變量名

          執行時,在命令行中用-J參數給變量賦值即可:

          jmeter -n -t C:\Users\yzs\Desktop\Unione_performance.jmx -J threadNum=10 -J threadCount=2 -l report-result.jtl

          此次測試相當于:10個線程,循環2次,共計20個請求。

          3、生成HTML報告

          生成HTML報告有2種方式,一種是直接在命令行加上-o參數,另一種是已有jtl結果文件,運行命令生成報告

          3.1、命令行直接生成報告

          jmeter -n -t 【Jmx腳本位置】-l 【中間文件result.jtl位置】-e -o 【報告指定文件夾】
          -e:測試結束后,生成測試報告
          -o:指定測試報告的存放位置

          注意:-o后面跟的文件夾一定是不存在的或者是空文件夾

          3.2、已有jtl結果文件,運行命令生成報告

          jmeter -g【已經存在的.jtl文件的路徑】-o 【用于存放html報告的目錄】

          注意:經實操,windows系統上,以上2種方法都可以生成HTML測試報告,但是在Linux系統上第1種方法,沒有生成報告,只有第二種方法才可以(具體原因后面在慢慢找吧)

          3.3、HTML報告注解

          用瀏覽器打開index.html

          報告詳解

          Dashboard:(重點查看)
          Test and Report informations:指的是測試和報告信息

          • File:測試結果的保存文件名稱
          • Start Time:測試開始時間
          • End Time:測試結束時間
          • Filter for display展示過濾器

          APDEX(Application Performance Index):應用程序性能滿意度的標準

          其中,

          • “Apdex”范圍在0-1之間,1表示達到所有用戶均滿意,越接近1滿意度越高
          • “toleration threshold”:耐受閾值(0.5秒)
          • “frustration threshold”:挫敗閾值(1.5秒)

          Requests Summary:請求的通過率(OK)與失敗率(KO),百分比顯示

          Statistics:數據分析,基本將Summary Report和Aggrerate Report的結果合并(平均響應時間、TPS在此查看)

          Errors:錯誤情況,依據不同的錯誤類型,將所有錯誤結果展示

          關于Apdex的補充:

          性能指數,Apdex(Application Performance Index)是一個國際通用標準,Apdex 是用戶對應用性能滿意度的量化值。它提供了一個統一的測量和報告用戶體驗的方法,把最終用戶的體驗和應用性能作為一個完整的指標進行統一度量。下圖表示為通用用戶滿意度區域,0代表沒有滿意用戶,1則代表所有用戶都滿意。實際業務系統開發過程中,1是團隊的追求目標。

          若所有請求的Apdex值都接近1,說明用戶滿意度優秀,也從側面說明了服務器響應速度快。
          通常而言,
          最低要求超過0.5,當然項目組可設定具體需求。

          Charts:(輔助分析)

          主要有如下特點:
          (1)將測試過程中經常使用的數據,用圖表的形式展示,讓測試結果更加直觀
          (2)每個圖表數據,有兩種展示形式
          (3)支持請求樣例過濾顯示
          (4)支持導出PNG圖片格式

          Over Time Charts

          • Response Times Over Time:每秒鐘響應時間,X軸表示的是系統運行的時刻,Y軸表示的是響應時間,F(X,Y)表示系統隨著時間的推移,系統的響應時間的變化,可以看出響應時間穩定性
          • Bytes Throughput Over Time:字節接收與發送的數量,每秒傳輸字節吞吐量,表明Jmeter在測試時,隨著時間推移發送和接收的字節數
          • Latencies Over Time:延遲時間

          Throughput Charts

          • Hits Per Second: 每秒點擊率
          • Codes Per Second:每秒狀態碼數量
          • Transactions Per Second:每秒事務量
          • Response Time Vs Request:響應時間點請求的成功與失敗數
          • Latency Vs Request:延遲時間點請求的成功與失敗數

          Response Times Charts

          • Response Time Percentiles:響應時間百分比
          • Active Threads Over Time:激活線程數
          • Time Vs Threads:響應時間用戶數, X軸表示的是活動線程數,也就是并發訪問的用戶數,Y軸表示的是響應時間,F(X,Y)表示在某種并發量的情況下,系統的響應時間是多少
          • Response Time Distribution:響應時間分布

          3.4、HTML報告的自定義配置

          JMeter3.0開始在bin目錄新增了reportgenerator.properties文件保存了所有關于圖形化HTML報告生成模塊的默認配置,要變更配置,建議不要直接編輯該文件,而是推薦在user.properties中去配置和覆蓋。

          3.4.1總體配置

          總體配置都是以jmeter.reportgenerator.為前綴,如:jmeter.reportgenerator.overall_granularity=60000

          • overall_granularity:定義采樣點粒度,默認為60000ms,通常在穩定性以外的測試中,我們可能需要定義更細的粒度,比如1000ms,我們可以在user.properties文件末尾添加如下配置
          # Change this parameter if you want to change the granularity of over time graphs.
          jmeter.reportgenerator.overall_granularity=6000
          • report_title:定義報告的標題,我們可能需要將標題定義為實際測試項名稱
          • apdex_satisfied_threshold:定義Apdex評估中滿意的閾值(單位ms)
          • apdex_tolerated_threshold: 定義Apdex評估中可容忍的閾值

          Apdext = (Satisfied Count + Tolerating Count / 2) / Total Samples


          另外,在jmeter.properties中,有關于集合報告中的三個百分位的默認值:

          aggregate_rpt_pct1 : Defaults to 50
          aggregate_rpt_pct2 : Defaults to 70
          aggregate_rpt_pct3 : Defaults to 99

          3.5、HTML報告的定制

          JMeter的HTML報告生成時是使用了固定的模板,模板文件路徑為./bin/report-template。
          進入該目錄可以看到報告的每個頁面都有一個.fmkr模板文件,包括index.html.fmkr和./content/pages路徑下的幾個文件。通過查看這些模板文件,就可以知道怎樣去進行報告的輕度定制,比如將一些文本修改得更易懂,或者修改為中文等

          頁面的title
          默認為"Apache JMeter Dashboard"
          可以由reportgenerator.properties中的jmeter.reportgenerator.report_title來統一定義,這種方式就是所有頁面的title都使用同一個。
          也可以直接修改對應的.fmkr文件中的title標簽中雙引號內的值,如<title>${reportTitle!"想要設置的title"}</title>,這中方式可以為每個頁面單獨定義title
          圖表的名稱
          當前版本下,各圖表的名稱是直接在模板文件中定義,要修改也是直接修改模板文件中對應元素的值即可
          如要修改Transactions Per Second圖表的名稱,可以直接在./content/pages/Throughput.html.fmkr文件中修改,效果如下圖


          主站蜘蛛池模板: 国产大秀视频一区二区三区| 色婷婷亚洲一区二区三区| 亚洲国产av一区二区三区| 无码AV一区二区三区无码| 国产精品主播一区二区| 亚洲A∨精品一区二区三区| 久久一区二区免费播放| 一区二区精品在线| 国产日韩精品一区二区在线观看| 精品无码成人片一区二区| 中文字幕一区二区三区精华液 | 一区视频免费观看| 日本高清成本人视频一区| 亚洲一区二区三区免费观看| 国产精品综合一区二区| 亚洲一区二区三区偷拍女厕| 中文字幕乱码人妻一区二区三区| 精彩视频一区二区三区| 一区二区精品久久| 国产美女一区二区三区| 免费精品一区二区三区第35| 久久无码人妻一区二区三区午夜| 国产精品第一区第27页| 无码AV中文一区二区三区| 国产精品视频免费一区二区| 国产精品区AV一区二区| 亚洲一区精彩视频| www一区二区www免费| 国产精品久久久久一区二区三区| 一区二区三区杨幂在线观看| 国产日韩一区二区三免费高清| 99精品一区二区三区| 国产av福利一区二区三巨| 亚洲精品伦理熟女国产一区二区| 国产激情无码一区二区三区| 天堂成人一区二区三区| 亚洲一区二区三区深夜天堂| 香蕉视频一区二区三区| 狠狠爱无码一区二区三区| 呦系列视频一区二区三区| 久久99国产精一区二区三区|