產生資料集
這描述如何使用資料集提供者及其 API 來產生負載測試的資料集。
請勿在生產環境中安裝此提供者,因為其端點未受保護。 |
先決條件
當使用 Quarkus 或 minikube 安裝時,所有 URL 都以 /realms/master
開始。對於 Wildfly 發行版,URL 以 /auth/realms/master
開始。
使用資料集提供者
腳本化用法
此腳本包含下一節中關於 realm、使用者和用戶端的描述的部分操作。
此腳本假設資料集提供者已按照安裝在 Minikube 上設定中所述安裝,並且可在以下位置存取:
https://keycloak-keycloak.$(minikube ip).nip.io/realms/master/dataset/
.
執行以下命令以接收說明描述
./dataset-import.sh -a help
您將看到這些選項
Dataset import to the local minikube Keycloak application - usage: 1) create realm/s with clients, users and password hash algorithm & iterations - run -a (action) with or without other arguments: -a create-realms -r 10 -g argon2 -i 5 -c 100 -u 100 -l 'https://keycloak.url.com' 2) create clients in specific realm: -a create-clients -c 100 -n realm-0 -l 'https://keycloak.url.com' 3) create users in specific realm: -a create-users -u 100 -n realm-0 -l 'https://keycloak.url.com' 4) create events in specific realm: -a create-events -e 100 -n realm-0 -l 'https://keycloak.url.com' 5) create offline sessions in specific realm: -a create-offline-sessions -o 100 -n realm-0 -l 'https://keycloak.url.com' 6) delete specific realm/s with prefix -a delete-realms -p realm -l 'https://keycloak.url.com' 7) dataset provider status -a status 'https://keycloak.url.com' 8) dataset provider status check of last completed job -a status-completed -t 10 -l 'https://keycloak.url.com' 9) dataset provider clear status of last completed job -a clear-status-completed -l 'https://keycloak.url.com' 10) dataset import script usage -a help
建立 10 個新 realm 的範例
./dataset-import.sh -a create-realms -r 10
或者,使用者也可以從 provision/minikube 模組內執行Taskfile 來執行 dataset-import
工作,以無縫地執行 Kubernetes 風格部署的自動化。
dataset-import
工作會重複使用上面定義的命令列引數,以方便使用者。請注意,兩個破折號 (--
) 將工作名稱與傳遞給腳本的命令列選項分開。
task dataset-import -- -a create-realms -r 10
若要瞭解有關此工具的更多資訊,請參閱使用工具 task 進行自動化以取得詳細資訊。
資料集提供者 API
建立多個 realm
您需要呼叫此 HTTP REST 請求。此請求對於建立 10 個 realm 非常有用。每個 realm 都將包含指定數量的角色、用戶端、群組和使用者
.../realms/master/dataset/create-realms?count=10
建立多個用戶端
這是要在 realm realm-5
中建立 100 個新用戶端的請求。每個用戶端都將啟用服務帳戶,並具有類似「client_id」-secret 的密碼(例如,如果用戶端是 client-156
,則密碼為 client-156-secret
)
.../realms/master/dataset/create-clients?count=200&realm-name=realm-5
您還可以配置存取類型 (bearer-only
、confidential
或 public
) 以及用戶端是否應為具有這兩個參數的服務帳戶用戶端
...&client-access-type=bearer-only&service-account-client=false
建立多個使用者
這是要在 realm-5
中建立 500 個新使用者的請求。每個使用者都將擁有指定數量的角色、用戶端角色和群組,這些角色、用戶端角色和群組已由 create-realms
端點建立。每個使用者都將具有類似「使用者名稱」-password 的密碼。例如,user-156
將具有類似 user-156-password
的密碼
.../realms/master/dataset/create-users?count=1000&realm-name=realm-5
建立多個群組
群組是作為 realm 建立的一部分而建立的。可以使用以下參數來管理群組的數量和已建立群組的結構
groups-per-realm
-
每個 realm 的群組總數。預設值為
20
。 groups-with-hierarchy
-
true
或false
,預設值為false
。使用預設值時,僅會建立最上層的群組。將 groups-with-hierarchy 設定為true
時,會建立群組的樹狀結構;樹的深度由參數groups-hierarchy-depth
定義,而groups-count-each-level
則定義每個已建立群組將擁有多少個子群組。 groups-hierarchy-depth
-
群組樹狀結構的深度。預設值為 3。使用預設值時,最上層的群組將擁有
groups-count-each-level
個子群組,而每個子群組本身將擁有groups-count-each-level
個子群組。只有當groups-with-hierarchy
為true
時,此參數才會有效。 groups-count-each-level
-
每個已建立群組將擁有的子群組數量。只有當
groups-with-hierarchy
為true
時,此參數才會有效。
使用預設值時,僅會建立最上層的群組。將 groups-with-hierarchy
設定為 true
時,會忽略 groups-per-realm
參數,並根據其他參數定義來建立群組樹狀結構。groups-count-each-level
groups-hierarchy-depth
將會是建立的群組總數。階層式群組實作會遵循 groups-per-transaction。採用的子群組命名慣例會在群組名稱中使用點 (.
),即使它是在先前的交易中建立的,也可以找到父群組。
.../realms/master/dataset/create-realms?count=1&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=50
您也可以透過叫用 create-groups
端點並設定 realm-name
參數,在現有的 realm 中建立群組
.../realms/master/dataset/create-groups?realm-name=realm-0&count=10&groups-with-hierarchy=true&groups-hierarchy-depth=3&groups-count-each-level=5
建立多個事件
這是要在具有前置詞 realm-
的可用 realm 中建立 10M 個新事件的請求。例如,如果我們有 100 個 realm,例如 realm-0
、realm-1
、... realm-99
,則它會在它們中隨機建立 10M 個事件
.../realms/master/dataset/create-events?count=10000000
建立多個離線工作階段
這是要在具有前置詞 realm-
的可用 realm 中建立 10M 個新離線工作階段的請求。例如,如果我們有 100 個 realm,例如 realm-0
、realm-1
、... realm-99
,則它會在它們中隨機建立 10M 個事件
.../realms/master/dataset/create-offline-sessions?count=10000000
移除多個 realm
移除具有預設 realm 前置詞 realm
的所有 realm
.../realms/master/dataset/remove-realms?remove-all=true
您可以使用 realm-prefix
來變更預設的 realm 前置詞。您可以使用參數來移除所有 realm,例如,僅從 foorealm5
到 foorealm15
.../realms/master/dataset/remove-realms?realm-prefix=foorealm&first-to-remove=5&last-to-remove=15
變更預設參數
若要變更參數,請參閱DataSetConfig 類別,以查看可用的參數、預設值以及哪個端點適用於哪個特定參數。例如,若要使用前置詞 foo
和僅用於密碼原則的 1000 次雜湊反覆運算 (使用預設雜湊演算法) 來建立 realm,您可以使用這些參數
.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-iterations=1000
另一個範例是,使用以下參數指定特定的雜湊演算法與雜湊反覆運算的組合
.../realms/master/dataset/create-realms?count=10&realm-prefix=foo&password-hash-algorithm=argon2&password-hash-iterations=1000
當觸發 HTTP 端點時,組態會寫入伺服器記錄檔,因此您可以監控進度以及實際套用的參數。
請注意,建立新物件將會自動從下一個可用的索引開始。例如,當您觸發上述端點以建立多個用戶端,而且您的資料庫中已存在 230 個用戶端 (client-0
、client-1
、.. client-229
) 時,您的 HTTP 請求將會開始從 client-230
建立用戶端。
檢查工作是否仍在執行
使用 GET
方法呼叫以下 URL
.../realms/master/dataset/status
如果仍有工作正在執行,它會傳回如下資訊
{"status":"Task in progress","task-id":{"startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-6 to realm-6"}}
如果沒有工作正在執行,它會傳回如下資訊
{"status":"No task in progress. New task can be started"}
檢查上次完成的工作的結果
使用 GET
方法呼叫以下 URL
.../realms/master/dataset/status-completed
如果仍有工作正在執行,它會傳回如下資訊
{"status":"previous task completed","task":{"success":"true","startTimeMs":"1662115169043","message":"Creation of 1 realms from realm-1 to realm-1","endTimeMs":"1662115173323"}}
如果沒有已完成的工作,則會傳回此資訊,狀態碼為 404
{"status":"No completed task"}
檢查特定物件的最後項目
查看最後建立的 realm 索引
.../realms/master/dataset/last-realm
查看指定 realm 中最後建立的用戶端
.../realms/master/dataset/last-client?realm-name=realm5
查看指定 realm 中最後建立的使用者
.../realms/master/dataset/last-user?realm-name=realm5
佈建組織
在佈建組織之前,請務必手動建立或佈建 realm。例如,按如下方式佈建 realm-0
realm
.../realms/master/dataset/create-realms?count=1&users-per-realm=5000
因此,您擁有一個包含 5k 個使用者的 realm realm-0
。
這是要在具有前置詞 org-
的 realm 中建立 1000 個組織的請求
.../realms/realm-0/dataset/orgs/create?count=1000
或者,您可以建立具有指定名稱的單一組織
realms/realm-0/dataset/orgs/create?name=myorg.com&domains=myorg.com,myorg.org,myorg.net&count=1
您還可以指定應連結到每個建立的組織的成員(受管理和不受管理)數量和身分提供者數量
.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10
因此,1k 個組織具有以下配置
-
500 個不受管理的成員
-
10 個身分提供者
也可以指定每個身分提供者的身分提供者對應器的數量
.../realms/realm-0/dataset/orgs/create?count=1000&unmanaged-members-count=500&identity-providers-count=10&identity-provider-mappers-count=3
在此情況下,1k 個組織每個都有 500 個不受管理的成員、10 個身分提供者,以及每個身分提供者都有 3 個身分提供者對應器
您也可以將資料佈建到特定的組織。例如,若要將更多身分提供者佈建到特定的組織
.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000
您可以選擇性地指定每個身分提供者的身分提供者對應器的數量
.../realms/realm-0/dataset/orgs/org-0/identity-providers/create?count=1000&identity-provider-mappers-count=5
或將更多不受管理的成員佈建到特定的組織
.../realms/realm-0/dataset/orgs/org-0/members/create-unmanaged?count=100
或將更多受管理的成員佈建到特定的組織
.../realms/realm-0/dataset/orgs/org-0/members/create-managed?count=100
佈建成員時,請確保您已在 realm 中建立足夠的使用者。對於受管理的成員,您也需要至少一個連結到組織的身分提供者。
如果要移除組織
.../realms/realm-0/dataset/orgs/org-0/remove