Wannan sakon yana bayanin yadda ake yin Tabbacin Oauth2 tare da Gatling.
A cikin wannan misalin, muna aika buƙata don ƙirƙirar mai amfani. Koyaya, an kare ƙarshen mai amfani kuma yana buƙatar damar_token.
Da farko, za mu sami mai ɗaukewa_token ko damar_token sannan sannan a aika shi azaman kanun kai zuwa buƙatar API ta gaba don ƙirƙirar mai amfani.
Don bayyana wannan, zamuyi amfani da tsari iri ɗaya na Gatling wanda muka gina a baya:
Tsarin Gwajin Ayyuka tare da Gatling da Maven
Lokacin da muka bi matakai a cikin gidan da ke sama, zamu sami tsarin aikinmu kamar haka:
Da farko zamu ayyana sigogin mu na OAuth 2.0 a cikin Configuration.scala
fayil din abu a karkashin daidaitawa fayil:
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' }
Lura:A yadda aka saba, ana fitar da muhallin, abokin ciniki da abokin ciniki a cikin mashin ɗin gwajin zai gudana, don haka zamu iya amfani da shi Tsarin.getProperty () don karanta dabi'u.Yanzu muna buƙatar rubuta lambar da ke aika buƙatar zuwa uwar garken izini don samun alamar mai ɗauka.
Wannan file AuthRequest.scala
an ajiyeta a ƙarƙashin buƙatun babban fayil a tsarin aikinmu.
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
} }
A cikin ɓangaren lambar da ke sama, muna kuma adana access_token zuwa fayil.
Kira na sama, kawai yana samun damar_token.
Muna buƙatar wata buƙata don ƙirƙirar mai amfani ta hanyar aika damar_token azaman taken.
Neman mai amfaninmu yana cikin fayil mai suna UserRequests.scala
kuma an adana shi ƙarƙashin buƙatun babban fayil
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))) }
Yanzu mun rubuta abin da ya faru. A wannan misalin ana kiran abun mu UserScenarios.scala
kuma an adana shi ƙarƙashin labari babban fayil
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) }
Buƙatar da ke sama, ta aika da buƙatar POST don ƙirƙirar mai amfani tare da access_token a matsayin mai ɗauka a cikin taken.
A ƙarshe fayil ɗinmu na kwaikwayo an kira UserSimulation.scala
an ajiyeta a ƙarƙashin kwaikwayo babban fayil
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)), ) }
Don gudanar da gwaje-gwajen da muke amfani da su
mvn clean gatling:test