Ijeri OAuth 2.0 Pẹlu Gatling Lilo Ami Aami

Ifiweranṣẹ yii ṣalaye bii o ṣe le ṣe Ijeri Oauth2 pẹlu Gatling.

Ninu apẹẹrẹ yii, a n fi ibere ranṣẹ lati ṣẹda olumulo kan. Sibẹsibẹ, opin opin olumulo ni aabo ati nilo wiwọle_token.

Ni akọkọ, a yoo gba bearer_token tabi access_token kan lẹhinna firanṣẹ bi akọsori si ibeere API ti nbọ lati ṣẹda olumulo kan.


Lati ṣe apejuwe eyi, a yoo lo iru iṣẹ akanṣe kanna fun Gatling ti a kọ tẹlẹ:

Ilana Idanwo Iṣẹ pẹlu Gatling ati Maven


Nigbati a ba tẹle awọn igbesẹ ni ifiweranṣẹ ti o wa loke, a yoo ni eto akanṣe wa bi atẹle:



Asọye Awọn ipele ninu Iṣeto ni

Ni akọkọ a ṣalaye awọn ipilẹ OAuth 2.0 wa ninu Configuration.scala faili ohun labẹ awọn atunto folda:

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' } Akiyesi:Ni deede, agbegbe, client_id ati client_secrets ti wa ni okeere ni ẹrọ awọn idanwo yoo nṣiṣẹ, nitorinaa a le lo System.getProperty () lati ka awọn iye.

Awọn ibeere

Nisisiyi a nilo lati kọ koodu ti o firanṣẹ ibeere si olupin aṣẹ lati gba ami ti nru.


Ibeere OAuth 2.0 - access_token

Faili yii AuthRequest.scala ti wa ni fipamọ labẹ awọn awọn ibeere folda ninu eto akanṣe wa.

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
} }

Ninu apẹrẹ koodu ti o wa loke, a tun n fipamọ access_token si faili kan.

Ipe ti o wa loke, kan gba wọle_token.

A nilo ibeere miiran lati ṣẹda olumulo kan nipa fifiranṣẹ wọle_token bi akọle.


Beere Olumulo

Ibeere olumulo wa wa ninu faili kan ti a pe ni UserRequests.scala o si ti wa ni fipamọ labẹ awọn awọn ibeere folda.

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))) }


Ohn

Bayi a kọ nkan oju iṣẹlẹ silẹ. Ninu apẹẹrẹ yii a pe nkan wa UserScenarios.scala o si ti wa ni fipamọ labẹ awọn ohn folda.

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) }

Ibeere ti o wa loke, firanṣẹ ibeere POST lati ṣẹda olumulo kan pẹlu access_token bi agbateru ni akọsori.



Iṣeṣiro

Lakotan faili iṣeṣiro wa ti a pe UserSimulation.scala ti wa ni fipamọ labẹ awọn iṣeṣiro folda.


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)), ) }

Lati ṣiṣe awọn idanwo ti a lo

mvn clean gatling:test