ይህ ልጥፍ የ Oauth2 ማረጋገጫ ከጋቲንግ ጋር እንዴት እንደሚሰራ ያብራራል።
በዚህ ምሳሌ ውስጥ ተጠቃሚ ለመፍጠር ጥያቄ እየላክን ነው ፡፡ ሆኖም የተጠቃሚው የመጨረሻ ነጥብ የተጠበቀ እና የመዳረሻ_መረጃ ምልክት ይፈልጋል።
በመጀመሪያ ፣ ተሸካሚ_ማስታወቂያ ወይም የመዳረሻ_ቶከን እናገኛለን ከዚያም ተጠቃሚን ለመፍጠር ወደ ቀጣዩ ኤፒአይ ጥያቄ እንደ ራስጌ እንልካለን ፡፡
ይህንን ለማሳየት ከዚህ በፊት የሠራነውን ለጋቲንግ ተመሳሳይ የፕሮጀክት መዋቅር እንጠቀማለን-
የአፈፃፀም ሙከራ ማዕቀፍ ከጋቲንግ እና ከማቨን ጋር
ከላይ በተጠቀሰው ልኡክ ጽሁፍ ውስጥ ያሉትን ደረጃዎች ስንከተል የፕሮጀክታችን መዋቅር እንደሚከተለው ይኖረናል ፡፡
በመጀመሪያ የእኛን OAuth 2.0 መለኪያዎች በ Configuration.scala
ውስጥ እንገልፃለን የነገር ፋይል በ ውቅር አቃፊ
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' }
ማስታወሻ:በመደበኛነት አካባቢው ፣ የደንበኛው_አድ እና የደንበኛው_ስጥር ምስክሮቹ በሚሠሩበት ማሽን ውስጥ ወደ ውጭ ይላካሉ ፣ ስለሆነም እኛ ልንጠቀም ሲስተም.ጌት ንብረት () እሴቶቹን ለማንበብ.አሁን ተሸካሚ ማስመሰያ ለማግኘት ጥያቄውን ወደ ፈቀዳ አገልጋዩ የሚልክ ኮድ መፃፍ ያስፈልገናል ፡፡
ይህ ፋይል 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))) }
አሁን እኛ ትዕይንት ሁኔታን እንጽፋለን ፡፡ በዚህ ምሳሌ እቃችን UserScenarios.scala
ይባላል እና ስር ይድናል ትዕይንት አቃፊ.
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) }
ከላይ የተጠቀሰው ጥያቄ ፣ በአርዕስቱ ውስጥ እንደ ተሸካሚ የመዳረሻ_መረጃ ምልክት ያለው ተጠቃሚ ለመፍጠር የ POST ጥያቄ ይልካል።
በመጨረሻም የእኛ የማስመሰል ፋይል UserSimulation.scala
በ ማስመሰያዎች አቃፊ.
import scenario.UserScenarios import io.gatling.core.Predef._ import scala.concurrent.duration._ class UserSimulation extends Simulation { setUp(
UserScenarios.createUserScenario.inject(rampUsers(250) during (15 minutes)), ) }
የምንጠቀምባቸውን ሙከራዎች ለማስኬድ
mvn clean gatling:test