Dejme tomu, že se vaše platforma skládá z několika komponent komunikujících přes webové služby, ale některá z nich není ještě vyvinutá nebo je třeba kvůli omezení sítě nedostupná. Vy byste přesto potřebovali zkoušet integrovat. Co teď? Vytvořte si mock v Soap UI a případě potřeby naskriptujte v Groovy.

Chtěl bych ukázat případovou studii certifikační autority, které přes SOAP pošlete Certificate signing request (CSR) a ona vrátí podepsaný certifikát, což se bude dít voláním Open SSL z příkazové řádky. (Soap UI samozřejmě podporuje i mock REST webových služeb).

Statický response

Nebudu popisovat úplné základy Soap UI, předpokládám, že už jste ho někdy viděli, případně že se rychle zorientujete i díky tutoriálu. Z WSDL vytvoříte nový projekt. Tady bych chtěl opět zdůraznit contract first přístup. Pokud máte WSDL, tak vývojáři serveru ani klienta nejsou blokováni, na nic nečekají a můžou rovnou vyvíjet alespoň vůči mocku. V Soap UI projektu tedy vytvoříte mock service.

Mock lze spouštět ručně ze Soap UI, z příkazové řádku nebo zabalit do WARu a nasadit na servlet container.

Dynamický response

Se statickým response si asi vždy nevystačíme. Můžete ho ovšem použít jako template a propsat ho požadovanými hodnotami.

Ovšem takhle vracíte stejnou response pro všechny requesty. Ale my máme pokaždé jiné CSR, které chceme podepsat.

Nicméně dokážeme ho rozparsovat díky následujícímu kódu.

Skriptování v Groovy

Soap UI má solidní dokumentaci UI i Groovy API, ale chybí jakýsi mezistupeň. Jak se v tom vyznat? V Soap UI je několik implicitních proměnných se zřejmým jménem.

  • log
  • context
  • requestContext
  • mockRequest
  • mockResponse

Vezměme si proměnou mockRequest, ta reprezentuje třídu WsdlMockRequest, která má metodu #getRequestContent(). V Groovy pak píšeme <pre>def content = mockRequest.requestContent</pre> Nejsme pochopitelně omezeni Soap UI API, lze použít veškeré možnosti Groovy a volat tak i programy (jako v našem případě Open SSL) z příkazové řádky (díky String#execute()).

Výsledný Groovy skript

Následuje výsledný skript, který z requestu rozparsuje CSR, pomocí Open SSL vytvoří certifikát a ten vrátí v response.

def request = mockRequest.requestContent
log.info "CA Request: $request"
def payload = new XmlSlurper().parseText(request)
def csr = "${payload.Body.issueCertificate.paramIn.pkcs10}"
def temp = File.createTempFile('temp', '.csr')
temp.deleteOnExit()
temp.write(csr)
log.info "Created a temp file '$temp'"
def path = context.expand('${projectDir}/')
def openSslCommand = "openssl x509 -req -CA ${path}ca.pem -CAkey ${path}ca.key -CAcreateserial -days 500 -in $temp.absolutePath"
log.info "Going to call command '$openSslCommand'"
def certificate = openSslCommand.execute().text
requestContext.cert = certificate
view raw script.groovy hosted with ❤ by GitHub

Kompletní Soap UI projekt je k dispozici na bitbucket.