JMeter はクライアントサーバシステムのパフォーマンス測定および負荷テストを行うための、オープンソースの Java アプリケーションです。この記事では、JMeter で Salesforce の REST API をコールするサンプルシナリオを紹介します。
サンプルの試し方
-
サンプルのシナリオファイルをダウンロードし、JMeter で開きます。(拡張子は
.jmx
で保存するよう注意してください) -
Salesforce へ REST API コール
のシンプルコントローラを開き、サンプルの HTTP リクエストの内容を確認し、必要に応じて追加・修正します。サンプルでは「JMeter Example」という名前の取引先を 1 件 insert します。『REST API 開発者ガイド』も参照してください。
-
再生ボタンをクリックしてシナリオを実行します。
ログイン処理部分の簡単な解説
簡便のため、このサンプルでは、SOAP API の login() を用いてアクセストークン (セッション Id) を取得しています。エンドポイントは https://login.salesforce.com/services/Soap/c/55.0/
のようになるため、これを SalesforceへのSOAI APIリクエストデフォルト設定
で設定しています。
login() をコールする処理は次の SalesforceにSOAP APIでログイン
の HTTP リクエストですが、ここではドキュメントに従い以下のリクエストを送信します。username、password、security_token は初めに設定したJMeter上の変数を指しています。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:enterprise.soap.sforce.com">
<soapenv:Header></soapenv:Header>
<soapenv:Body>
<urn:login>
<urn:username>${username}</urn:username>
<urn:password>${password}${security_token}</urn:password>
</urn:login>
</soapenv:Body>
</soapenv:Envelope>
リクエストヘッダとして、SOAPAction
に urn:enterprise.soap.sforce.com/Soap/loginRequest
を、Content-Type
に text/xml
を指定しています。
ログインに成功すると以下のようなレスポンスを受け取ります
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>https://yourdomain.my.salesforce.com/services/Soap/m/55.0/00Dxxxx....</metadataServerUrl>
<passwordExpired>false</passwordExpired>
<sandbox>false</sandbox>
<serverUrl>https://yourdomain.my.salesforce.com/services/Soap/c/55.0/00Dxxxxx....</serverUrl>
<sessionId>00D7Fxxxxxxx.....</sessionId>
<userId>005xxxx.....</userId>
<userInfo>
<accessibilityMode>false</accessibilityMode>
<chatterExternal>false</chatterExternal>
<currencySymbol>¥</currencySymbol>
<orgAttachmentFileSizeLimit>26214400</orgAttachmentFileSizeLimit>
<orgDefaultCurrencyIsoCode>JPY</orgDefaultCurrencyIsoCode>
<orgDefaultCurrencyLocale>ja_JP</orgDefaultCurrencyLocale>
<orgDisallowHtmlAttachments>false</orgDisallowHtmlAttachments>
<orgHasPersonAccounts>false</orgHasPersonAccounts>
<organizationId>xxxxx</organizationId>
<organizationMultiCurrency>false</organizationMultiCurrency>
<organizationName>Your Org Name</organizationName>
<profileId>00eXXXX.....</profileId>
<roleId xsi:nil="true" />
<sessionSecondsValid>7200</sessionSecondsValid>
<userDefaultCurrencyIsoCode xsi:nil="true" />
<userEmail>youremail@example.com</userEmail>
<userFullName>Your Name</userFullName>
<userId>005XXX.....</userId>
<userLanguage>ja</userLanguage>
<userLocale>en_US</userLocale>
<userName>yourusername@example.com</userName>
<userTimeZone>Asia/Tokyo</userTimeZone>
<userType>Standard</userType>
<userUiSkin>Theme3</userUiSkin>
</userInfo>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>
この中の <sessionId>
と <serverUrl>
のホスト名部分を REST API コールに使用します。<sessionId>
は XPath でタグ内のテキストをそのまま取得。<serverUrl>
のホスト名部分についてはセッション Idと同様に一度タグ内のテキストを取得した後、正規表現でホスト名部分だけを抽出しています。
セッション Id は sessionId
、<serverUrl>
のホスト名部分は instanceurl
という名前の JMeter 上の変数として保存されていますので、これらを JMeter で REST API コールする際に使用しています。