OAuth 2.0 Tabbatarwa Tare da Yin Gwada Ta Amfani da Alamar arerauke da Alamar

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:



Bayyana Sigogi a cikin Kanfigareshan

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.

Buƙatu

Yanzu muna buƙatar rubuta lambar da ke aika buƙatar zuwa uwar garken izini don samun alamar mai ɗauka.


Neman OAuth 2.0 - access_token

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.


Buƙatar Mai amfani

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


Yanayi

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.



Kwaikwaiyo

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