Bearer Token ကိုအသုံးပြုခြင်းဖြင့် Gatling ဖြင့် OAuth 2.0 authentication

ဒီ post က Oauth2 Authentication ကို Gatling နှင့်မည်သို့လုပ်ရမည်ကိုရှင်းပြသည်။

ဤဥပမာတွင်အသုံးပြုသူအားဖန်တီးရန်တောင်းဆိုမှုကိုကျွန်ုပ်တို့ပို့ပေးသည်။ သို့သော်အသုံးပြုသူအဆုံးမှတ်ကိုအကာအကွယ်ပေးထားပြီး access_token လိုအပ်သည်။

ပထမ ဦး စွာကျွန်ုပ်တို့သည် bearer_token သို့မဟုတ် access_token ကိုရရှိပြီးသုံးစွဲသူကိုဖန်တီးရန်နောက် API တောင်းဆိုမှုတစ်ခုသို့၎င်းကို header တစ်ခုပို့လိမ့်မည်။


၎င်းကိုဥပမာပြရန်ကျွန်ုပ်တို့သည်ယခင်တည်ဆောက်ခဲ့သော Gatling အတွက်စီမံကိန်းတည်ဆောက်ပုံနှင့်အတူတူပင်ဖြစ်သည်။

Gatling နှင့် Maven နှင့်အတူစွမ်းဆောင်ရည်စမ်းသပ်ခြင်းမူဘောင်


အထက်ဖော်ပြပါ post ကိုလိုက်နာပါကကျွန်ုပ်တို့၏စီမံကိန်းဖွဲ့စည်းပုံကိုအောက်ပါအတိုင်းပြုလုပ်လိမ့်မည်။



Configuration အတွက် Parameter များ Defining

ပထမ ဦး စွာကျွန်ုပ်တို့၏ OAuth 2.0 parameters များကို _ + _ | တွင်သတ်မှတ်သည် အောက်မှာအရာဝတ္ထုဖိုင် config ကို ဖိုလ်ဒါ

Configuration.scalaမှတ်စု:ပုံမှန်အားဖြင့်ပတ်ဝန်းကျင်၊ client_id နှင့် client_secrets တို့ကိုစမ်းသပ်မှုများပြုလုပ်မည့်စက်ထဲသို့တင်ပို့သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည်သုံးနိုင်သည် System.getProperty () တန်ဖိုးများကိုဖတ်ရှုဖို့။

တောင်းဆိုမှုများ

ယခုကျွန်ုပ်တို့ bearer token ရရန်ခွင့်ပြုချက်ဆာဗာသို့တောင်းဆိုမှုကိုပို့သောကုဒ်ကိုရေးရန်လိုအပ်သည်။


OAuth 2.0 တောင်းဆိုမှု - access_token

ဤဖိုင်သည် _ _ _ _ အောက်မှာကယ်တင်ခြင်းသို့ရောက်ရ၏ တောင်းဆိုမှုများ ကျွန်တော်တို့ရဲ့စီမံကိန်းဖွဲ့စည်းပုံထဲမှာ folder ကို။

object Configuration { val environment: String = System.getProperty('environment') val clientId: String = System.getProperty('CLIENT_ID') val clientSecret: String = System.getProperty('CLIENT_SECRET') val apiURL: String = 'https://some-sub-domain.' + environment + 'some-domain.com/api' var tokenPath: String = 'https://some-sub-domain' + environment + '.eu.auth0.com/oauth/token' val userPath = '/identity/iaa/v1/users' }

အပေါ်က code အတိုအထွာမှာ access_token ကိုဖိုင်တစ်ခုထဲမှာသိမ်းထားပါတယ်။

အထက်ပါခေါ်ဆိုမှုသည် access_token ကိုသာရရှိသည်။

Access_token ကို header အဖြစ်ပေးပို့ခြင်းဖြင့်အသုံးပြုသူဖန်တီးရန်နောက်ထပ်တောင်းဆိုမှုတစ်ခုလိုအပ်သည်။


အသုံးပြုသူတောင်းဆိုချက်

ကျွန်ုပ်တို့၏အသုံးပြုသူတောင်းဆိုချက်သည် AuthRequest.scala ဖိုင်တွဲတွင်ရှိသည် နှင့်အောက်မှာကယ်တင်ခြင်းသို့ရောက်ရ၏ တောင်းဆိုမှုများ ဖိုလ်ဒါ။

import java.io.{BufferedWriter, FileWriter} import config.Configuration import io.gatling.core.Predef._ import io.gatling.http.Predef._ object AuthRequest { val getAccessToken = exec(http('Get access token')
.post(Configuration.tokenPath)
.body(StringBody(
s'''{

'client_id': '${Configuration.clientId}',

'client_secret': '${Configuration.clientSecret}',

'audience': 'https://some-domain-name.com/user',

'grant_type': 'client_credentials',

'scope': 'user:admin'
}'''
))
.asJson
.headers(Map('Content-Type' -> 'application/json'))
.check(status.is(200))
.check(jsonPath('$.access_token').saveAs('access_token')))
.exec {
session =>
val fw = new BufferedWriter(new FileWriter('access_token.txt', true))
try {

fw.write(session('access_token').as[String] + ' ')
}
finally fw.close()
session
} }


အဖြစ်အပျက်

ယခုငါတို့မြင်ကွင်းအရာဝတ္ထုကိုရေးပါ။ ဤဥပမာတွင်ကျွန်ုပ်တို့၏အရာဝတ္ထုကို UserRequests.scala နှင့်အောက်မှာကယ်တင်ခြင်းသို့ရောက်ရ၏ မြင်ကွင်း ဖိုလ်ဒါ။

import config.Configuration.{apiURL, userPath} import io.gatling.core.Predef._ import io.gatling.http.Predef._ object UserRequests { private val auth0Headers = Map(
'Accept' -> 'application/json, text/javascript, */*; q=0.01',
'Content-Type' -> 'application/json',
'Authorization' -> 'Bearer ${access_token}') val createUser = exec(http('Create user')
.post(apiURL + userPath)
.headers(auth0Headers)
.body(ElFileBody('createUser.json'))
.check(status.is(201))) }

အထက်ပါတောင်းဆိုမှုသည် access_token ကိုအသုံးပြုသူတ ဦး အဖြစ် header ထဲတွင်သယ်ဆောင်သူအဖြစ်ဖန်တီးရန် POST တောင်းဆိုမှုကိုပေးပို့သည်။



ခြင်း simulation

နောက်ဆုံးတွင်ကျွန်ုပ်တို့၏ _ simulation file UserScenarios.scala အောက်မှာကယ်တင်ခြင်းသို့ရောက်ရ၏ Simulator ဖိုလ်ဒါ။


import requests.{AuthRequest, UserRequests} import io.gatling.core.Predef._ object UserScenarios { var userIds:Array[Map[String,String]] =
(100 to 900).toArray map ( x => { Map( 'userId' -> x.toString) }) val getAccessToken = scenario('Get token')
.exec(AuthRequest.getAccessToken) val createUserScenario = scenario('Create user')
.feed(userIds.circular)
.exec(UserAuthZRequest.getAccessToken)
.exec(UserRequests.createUser) }

ကျနော်တို့အသုံးပြုစမ်းသပ်မှုကို run ရန်

UserSimulation.scala

စိတ်ဝင်စားစရာဆောင်းပါးများ