背景
社内のシステム開発者向けにテスト自動化システムを構築・運用している。(SikuliX + Testablish)
その中で日常的に出てくる技術課題ややりたいことをメモ書き。
Sikuliが楽しい!
課題
大抵のRPAツールはそうだが、操作シナリオは1つのファイルで閉じてしまう。
それの何が気になるのかというと、シナリオの中に画像を含んでしまっているのを残念に感じる。
画像はちょっとした仕様変更などで変わるので、画像だけを簡単に差し替えられるようなつくりにしておくのが、肝要ではないかと思う。
というわけで、Sikuliの操作シナリオ中の画像を別建てしたWebServiceから引っ張ってこられるような作りを目指してみた。
対応
Sikuliの操作シナリオにおける画像ファイル部分はWebServiceから引っ張ってくる。
目的
各システムでファイルアップロードやダウンロード、エクセル操作くらいの単シナリオであれば、画像差し替えで使い回せるようにしたい。
内容
実装に当たり1つ課題が出た。
それはsikulixがpythonと思いきや、jythonで実装する必要がある点である。
jythonはJVM上で動作するpython言語で、コーディング量の少なさやシンプルさが売りらしいが、WEB上の情報量が少ないのがネックに感じる。
https://www.jython.org/
ただ、新しく覚える言語(まぁほぼpythonとjavaの合いの子だけど)はワクワクするのでレッツトライ。
以下実装で検証し、成功。
-----------------------
import java.net.HttpURLConnection
import java.net.URL
import java.io.BufferedReader
import java.io.InputStreamReader
import java.lang.StringBuffer
import json
import base64
import datetime
URL = java.net.URL
url = 'RESTURL'
obj = URL(url)
con = obj.openConnection()
con.setRequestMethod("GET")
responseCode = con.getResponseCode()
BufferedReader = java.io.BufferedReader
InputStreamReader = java.io.InputStreamReader
buf = BufferedReader(InputStreamReader(con.getInputStream()))
response = buf.readLine()
buf.close();
dir = os.getcwd()
#画像はBase64でasciiにしておいて、REST戻り値はjsonファイルを指定
#jython上でデコードする
downloadData = json.loads(response)
fileName = downloadData['fileName']
contentType = downloadData['contentType']
contentDataAscii = downloadData['contentData']
now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
contentData = base64.b64decode(contentDataAscii)
saveFileName = now + fileName
saveFilePath = os.path.join(dir, saveFileName)
with open(saveFilePath, 'wb') as saveFile:
saveFile.write(contentData)↓↓画像認識処理↓↓
-----------------------
結果 or 気付いた点
python上でjavaライブラリをimportし、ゴリゴリとjavaを記述するイメージ。
import指定形式、インスタンス生成方法さえ分かれば後はスムーズ。
結論
これで操作シナリオの共通化が進む!