Selles postituses selgitatakse, kuidas Gautlinguga Oauth2 autentimist teha.
Selles näites saadame kasutaja loomise taotluse. Kasutaja lõpp-punkt on siiski kaitstud ja nõuab access_token.
Kõigepealt saame me kandja_token või access_token ja seejärel saadame selle päisena kasutaja loomise järgmisele API-taotlusele.
Selle illustreerimiseks kasutame Gatlingi jaoks sama projekti struktuuri, mille me varem ehitasime:
Performance Testing Framework koos Gatlingi ja Maveniga
Kui järgime ülaltoodud postituse samme, oleks meie projekti struktuur järgmine:
Kõigepealt määratleme oma OAuth 2.0 parameetrid Configuration.scala
objektifaili all konfig kaust:
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' }
Märge:Tavaliselt eksporditakse keskkond, kliendi ID ja kliendi saladused masinas, kus testid töötavad, nii et saame kasutada System.getProperty () väärtuste lugemiseks.Nüüd peame kirjutama koodi, mis saadab taotluse volitusserverile kandja märgi saamiseks.
See fail AuthRequest.scala
on salvestatud taotlusi kaust meie projekti struktuuris.
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
} }
Ülalolevas koodijupis salvestame ka faili access_token.
Ülaltoodud kõne saab lihtsalt juurdepääsu.
Kasutaja loomiseks vajame veel ühte taotlust, saates päiseks juurdepääsukõne.
Meie kasutaja päring on failis nimega UserRequests.scala
ja salvestatakse taotlusi kausta.
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))) }
Nüüd kirjutame välja stsenaariumi objekti. Selles näites nimetatakse meie objekti UserScenarios.scala
ja salvestatakse stsenaarium kausta.
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) }
Ülaltoodud taotlus saadab POST-i kasutaja loomiseks, kui päises on kandjana juurdepääsukõne access_token.
Lõpuks meie simulatsioonifail nimega UserSimulation.scala
on salvestatud simulatsioonid kausta.
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)), ) }
Kasutatavate testide läbiviimiseks
mvn clean gatling:test