使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試
這篇文章本來Jerry只在SAP社群上寫了英文版的,可以通過點選文末的“閱讀原文”獲得。後來有兩位做Marketing Cloud開發的德國同事,寫郵件詢問關於文章的更多細節,聲稱這種方式對他們自己的API效能測試很有用,所以我覺得還是值得用中文再寫一遍。
在SAP官網api.sap.com裡有大量釋出的API,方便合作伙伴和客戶自開發應用同SAP解決方案進行整合。
比如Jerry上個月做的一個專案,就是和國內一家專注於提供人臉識別技術解決方案的企業合作, 使用者通過微信掃碼從而完成人臉識別後,在使用者授權的情況下,會呼叫SAP Marketing Cloud的contact API,生成對應的contact資料,並且將人臉識別得出的面部特徵碼通過Marketing Cloud擴充套件欄位的方式一併存入contact資料中。
因為這個專案最後會在2019年6月5日於上海舉行的SAP雲大會上展示,所以當時Jerry完成整合工作後心想,還是得提前測試一下咱們的Marketing Cloud在響應併發請求時的效能, 做到心裡有數。
我們在SAP上海雲大會上演示的場景是,將SAP Marketing Cloud的Launchpad通過大螢幕投影出來,參會嘉賓完成人臉識別後,Marketing Cloud contact建立API自動被呼叫,在系統生成contact資料,並且Launchpad contact tile的計數器加一。
所以下一步就是如何模擬大量對Marketing Cloud API的併發請求。
對於程式設計師來說,最容易想到的方式就是自己動手寫一個程式來發送大量請求。Jerry選擇的最簡單的程式設計方式,在Java程式裡新建大量執行緒,每個執行緒傳送一個請求,當然也可以直接用JDK裡提供的執行緒池庫。我的Java程式原始碼在github上:
https://github.com/i042416/JavaTwoPlusTwoEquals5/tree/master/src/odata
除了自己動手編寫程式碼外,還可以重用一些API測試工具來達到同樣的目的。Postman是一個API開發人員常用的介面除錯利器,它也有定義變數和簡易的程式設計功能:
可以通過稱之為Collection Runner的功能,一鍵執行Collection裡的多個請求。
Jerry在這篇SAP社群部落格裡詳細介紹過Postman的程式設計:
Just a single click to test SAP OData Service which needs CSRF token validation
Jerry還在成都C4C開發團隊時,組內同事就告訴過我,jMeter是另一個功能強大的基於Java的API壓力測試工具。所以這次我選擇用jMeter來對API做壓力測試。
下文介紹的內容需要大家對jMeter的使用有最基本的瞭解,如果還不太熟悉的朋友,可以先查閱jMeter的官方文件。
總的思路就是使用jMeter提供的Thread Group(執行緒組)和控制器這兩個工具。Thread Group幫助工具使用者實現了通過多執行緒傳送HTTP請求的功能,比如下圖設定的100,意思是通過100個執行緒同時傳送請求。
而涉及到對系統進行寫操作的SAP API,比如新建,修改或者刪除資料的SAP OData服務,在請求的HTTP頭部必須附帶防止跨域請求偽造攻擊的CSRF token(有時又稱XSRF token:Cross-site request forgery). 我們可以將從伺服器獲取CSRF token的請求和真正呼叫contact API的請求放到同一控制器裡,這樣能確保同一執行緒內,拿token和建立contact這兩個請求依次執行。
SAP雲平臺的官網上有一個幫助文件,對使用者訪問SAP雲平臺上的服務的Authentication流程做了清晰的闡述:
https://cloudplatform.sap.com/scenarios/usecases/authentication.html
這張圖描述了在Authentication場景下,幾個名詞User(有時稱為Client), Service Provider和Identity Provider(途中簡寫成IdP)的相互作用關係。
雖然Jerry本文介紹的場景,我用jMeter消費的是Marketing Cloud上的服務,而非SAP雲平臺上的服務,不過這些服務對應的Idp都是SAP ID service,即accounts.sap.com, 因此Authentication原理仍然相同。
我們牢牢記住這張圖的幾個步驟,因為我們接下來用jMeter消費Marketing Cloud API時,同樣要遵循這種Authentication流。
我們先用Chrome訪問SAP Marketing Cloud Fiori Launchpad,來深入理解圖中介紹的Authentication流程。
-
瀏覽器開啟SAP Marketing Cloud Fiori Launchpad連結,HTTP請求傳送到了Marketing Cloud系統,後者可以視為Service Provider。
-
Marketing Cloud把請求通過HTTP 302重定向了它預先配置好的IdP上去,即SAP ID service(也就是account.sap.com).
關於什麼是SAP ID service,可以檢視SAP官方幫助文件:
- IdP的職責是完成實際的使用者認證工作,它給使用者返回一個登入頁面,要求其輸入使用者名稱和密碼。
上圖顯示的是SAP ID Service的登入頁面,UI雖然簡單,但是這個頁面的原始碼裡存在很多隱藏欄位。
用Chrome開發者工具能夠發現這些隱藏欄位:
xsrfProtection spId spName authenticity_token idpSSOEndpoint
這些欄位都是在SAP ID Service的伺服器端生成,然後返回給客戶端。
- 使用者輸入密碼點選登入按鈕後,使用者輸入的使用者名稱和密碼,同第三步介紹的登入頁面的隱藏欄位,會一齊返回給SAP ID Service服務端。可以在Chrome開發者工具裡觀察到這些欄位位於HTTP請求頭部。
- IdP完成使用者認證,頒發一個"assertion"響應,值儲存於HTTP響應頭部的SAMLResponse欄位裡。
這個欄位的SAML表明這是一個基於SAML協議的認證過程,把上圖Chrome開發者工具裡觀察到的SAMLResponse欄位值通過BASE64解碼,得到下圖的XML格式的assertion內容:
上圖第一處用紅色矩形框高亮的欄位是assertion的狀態,值為success. 因為SAP ID Service和Marketing Cloud系統配置為互相信任,所以這意味著SAP ID Service通知Marketing Cloud,這個使用者的認證已經通過了。
SAML協議規範的官方文件:
http://saml.xml.org/saml-specifications
有了上述的理論基礎後,進行jMeter專案的配置工作思路也就清楚了。
我把jMeter專案的工程檔案放到我的Github上了,方便大家重用:
在jMeter裡,我們按照SAP官網認證架構圖的6個步驟來配置:
- 使用jMeter提供的正則表示式提取器,將認證流程第3個步驟,IdP返回的登入頁面的5個隱藏欄位的值提取出來,儲存成jMeter變數:
下圖顯示了這些隱藏欄位的值被成功提取出來並存儲成jMeter變數:
- 把第一步提取出並存儲在jMeter變數中的五個欄位的值(下圖紅色)的值,再加上使用者手動輸入的使用者名稱和密碼(下圖藍色), 作為請求的頭部欄位,一齊提交給SAP ID service:
登入成功後,收到了伺服器端返回的Cookie值:
- 傳送新的請求給伺服器,獲取CSRF token. 這個請求的響應裡包含了兩個下圖高亮的Cookie,需要同樣儲存成jMeter變數,以供最後一個請求使用。
- 最後一個步驟,將前一步獲取到的CSRF token附加到HTTP請求欄位中,同時帶上前一步伺服器返回的兩個Cookie欄位:
至此這個jMeter專案的配置工作就完成了,其優於Java程式設計和Postman之處在於我們不需要編寫一行程式碼,我們對API進行併發測試這個需求的相關功能點全部能夠通過jMeter裡的配置完成。
最後簡單測試一下併發請求的響應時間:
我在使用jMeter呼叫contact API建立工作時用到了簡單的隨機數生成器,在contact的姓後面加上了簡單的隨機數,這是最後通過jMeter生成的contact在Marketing Cloud裡的顯示:
最後一步就是把SAP Marketing Cloud Launchpad裡的contact tile的計數器重新整理間隔設定成10秒重新整理一次:
系統顯示,在2019年6月5日上海SAP雲大會這個演示場景的展臺上,一共有276個嘉賓完成了人臉識別後的Marketing Cloud contact註冊流程。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
相關推薦
使用jMeter對基於SAP ID service進行Authentication的Restful API進行併發測試
這篇文章本來Jerry只在SAP社群上寫了英文版的,可以通過點選文末的“閱讀原文”獲得。後來有兩位做Marketing Cloud
Jmeter對基於websocket協議的壓力測試
等待時間 ads 響應消息 一次 .org 完成 毫秒 新的 字節 Jmeter對基於websocket協議的壓力測試 WebSocket protocol 是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通信(full-duplex)。
使用locust對設備ID的生成邏輯的並發測試初步實踐
locust 壓測 分布式測試 項目背景:現階段我們項目主要有兩大場景,一是交易風控,二是賬戶風控,兩大的場景的很多規則都和設備ID有關,比如設備黑名單,設備A在黑名單庫並且相關規則開啟,設備A請求交易時就會有預警事件發生,所以設備ID的生成邏輯至關重要,主要和A、B、C 三大因素有關,大概如下:
LVM中對基於xfs的文件系統進行擴容
linux以前沒接觸過CentsOS 7 ,對其所改變的特性不了解,偶然在centos 7中接觸到LVM,創建LVM的方法和6中沒有區別,但是對LVM進行擴容就有點不一樣了,使用以前的方法進行擴容後始終沒有生效,折騰了半天才搞清楚其擴容的方法。Xfs是CentOS7的默認文件系統類型,而不同文件系統類型對應的
通過Jmeter對Dubbo接口進行接口及性能測試
抽象 進行 jet 自動發現 nta 客戶端 連接 reg spa dubbo接口/性能測試 dubbo簡介 zookeeper簡介、安裝及配置 dubbo服務端demo dubbo客戶端調用 jmeter工程改造及接口調用 讀取jmeter參數用於dubbo性能測試
基於數值分析思想對多項式求值的原理和應用進行探究
數值分析 use com 相加 emp 要花 class RoCE size 摘要:多項式是由多個單項(符號項如:5x或者常數項4)通過四則運算組合起來的式子,如P(x)=2x^4+3x^3-3x^2+5x-1 一般的求解會將特定的x代入到上式中,一個一個的計算,共需要
軟銀、Synchronoss與TBCASoft攜手對基於富通訊服務和區塊鏈的移動支付服務進行概念驗證
新澤西州布里奇沃特--(美國商業資訊)--日本電信運營商軟銀公司(SoftBank Corp.)、全球雲業務、資訊傳送、數字和物聯網產品的領導者和創新公司Synchronoss Technologies, Inc.以及跨運營商區塊鏈平臺技術創新公司TBCASoft, Inc.
使用JMeter對Tomcat進行壓力測試與Tomcat效能調優
一、準備工作。 1、安裝JDK1.6或1.6版本以後的,並配置環境變數。 2、在Apache的官網下載最新的Jmeter, http://jmeter.apache.org/download_jmeter.cgi,截止目前為止,最新的Jmeter是
如何使用jMeter對某個OData服務進行高併發效能測試
For project reason I have to measure the performance of OData service being accessed parallelly. And I plan to use the open source tool JMeter to generate
如何使用jMeter對某個OData服務進行高並發性能測試
ive count exp each achieve .com ast onf mod For project reason I have to measure the performance of OData service being accessed parallel
如何用JMeter對MySQL資料庫進行壓測?
在Jmeter中建立一個JDBC Request 測試計劃主要分兩步。 (1)設定JDBC連線池(在JDBC Connection Configuration) (2)新增JDBC Request 其他步驟就是設定引數化、斷言、監聽結果。 第一步:新增 JDBC Conne
使用 JMeter 對 SOAP 應用進行壓力或效能測試
Appache JMeter 以及 SOAP 協議簡述 開源測試工具:Appache JMeter JMeter 是 Apache 基金會 Jakarta 上的一個純 Java 開源專案,起初用於基於 Web 的壓力測試(pressure test),後來其應用範圍逐漸擴充套件到對檔案傳輸 FTP,
使用監聽器對Spring bean id進行唯一校驗
因為Spring IOC容器啟動載入時會檢查bean定義是否有重複,如果有重複則會根據AbstractRefreshableApplicationContext類中的allowBeanDefinitionOverriding屬性值進行判斷,如果值為true,則把
如何用SAP WebIDE的Fiori建立嚮導基於ABAP OData service快速建立UI5應用
如果我們手上已經有可以正常工作的OData服務,無論位於ABAP on-premise系統還是public上的internet O
使用Jmeter對API進行性能測試
使用 method 報告 dom scheduler npr def rman ads 先補充剛才測試的部分截圖余下,後續詳細補充內容。 API Test.jmx 如下: <?xml version="1.0" encoding="UTF-8"?>
網絡安全熱門話題——如何對被(已經/正在)入侵網站進行檢測和防範
網絡 安全 熱門 九月安全專題討論:網絡安全熱門話題——如何對被(已經/正在)入侵網站進行檢測和防範擬進行以下技術(可以自定義相關技術)討論和技術研究,歡迎大家參與:(1)網站入侵日誌文件分析(2)抓包分析入侵行為並修補程序漏洞(3)從規則進行安全防護(4)在線監測webshell等惡意行為(5)
StringUtil對字符串類型參數進行校驗的工具類
ring oms win shu ogl href sin oci nfa 9圖uO17茲S笨尚付5截Lhttp://www.docin.com/yizl7171 tDRD7y2PX笆http://www.docin.com/app/user/userinfo?useri
Java中List集合排序的方法 比較器的使用 根據學生對象數序 語文 英語成績總和進行sort排序
private system.in set swift ringbuf 直觀 turn @override encoding package com.swift; import java.util.ArrayList; import java.util.Collecti
11.表達式計算對一串加減乘除帶括號進行計算
pan fin gpo ++ 字符 第一個 std 取數 main 算法流程圖: 執行截圖: 完整代碼: 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <
對XML與WEB SERVICE的一些認識
對XML與WEB SERVICE的認識一、XML: XSLT:文件轉換器,可以把XML文件轉換成HTML文件 XSL-FO:為XML文件添加樣式,相當於CSS XPATH/XQUERY:在XML中查詢內容 XLINK/XPOINTER:在XML文檔中定義超鏈接 DTD/SCHEMA:定義合法的XML文檔 X