Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

大量のプログラミングテストの動作確認にSikuliを使う

最近、新人のプログラミング研修の講師の手伝いのようなものをやっています。
中々プログラミングのテスト(CUI)をするときのコマンド入力が手間で…Sikuliを使っています。
今回はJavaのものなので、ひとまず決まったフォルダに受講番号分のJarファイルを吐き出して、
コマンドプロンプトを起動➤受講番号を入力して対象テストの動作確認をするようなものを作りました。

反省点としては、コードがみずらくなってしまったところ…。
もう少し、Sikuliでも分割してかける気がしました。
今回はテスト準備とテスト実行をべた書きで書いてしまったので…。
引き続き講師手伝いができたらと思うのですが、
次はJSPサーブレットのWebベースなので、Seleniumでチャンレンジしてみようと思います。

以下、参考コード[Jython]

ROOT_DIRECTORY = "C:XXX\\workspace\\OOP2Assessment-ans\\jar"

doubleClick(Region(82,1125,144,48))
wait(0.5)
type("cmd")
wait(0.5)
type(Key.ENTER)
wait(0.5)
click("1595921066854.png")
wait(0.5)
paste("cd " + ROOT_DIRECTORY)
wait(0.5)
type(Key.ENTER)
wait(0.5)

# -----------
# 人数分の登録
# -----------
while(True):
    num = input(u"テスト対象の番号(出席番号)を入力してください","",u"入力フィールド")
    if not num:
        exit(1)
    # -------------------------------------------
    # 実行例 
    # ------------------------------------------- 
    paste("java -jar .\\" + num + "\\TestTarget.jar")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    # -----------
    # 一件目の登録
    # -----------
    paste("1")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("2015/7/31")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"豆田蔵雄")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("2015/8/10")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste(u"新大阪")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"梅田")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("160")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    type(Key.ENTER)
    wait(0.5)

    # -----------
    # 二件目の登録
    # -----------
    paste("2")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("2015/8/1")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste(u"豆山倉之助")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("2015/8/22")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"日本")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"関西国際空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"フランス")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"シャルル・ド・ゴール空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("125000")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("7.5")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"前日入国")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    # -----------
    # 登録の終了
    # -----------
    paste("0")
    wait(0.5)
    type(Key.ENTER)

    # -------------------------------------------
    # 実行エラー例 
    # ------------------------------------------- 
    paste("java -jar .\\" + str(num) + "\\TestTarget.jar")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    # -----------
    # 申請タイプ入力不正
    # -----------   
    paste("a")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    # -----------
    # 金額入力不正(Case1)
    # -----------       
    paste("1")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("2015/7/31")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"豆田蔵雄")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("2015/8/10")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste(u"新大阪")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"梅田")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("abc")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)    
   
    # -----------
    # 金額入力不正(Case2)
    # -----------  
    paste("2")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("2015/8/1")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste(u"豆山倉之助")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("2015/8/22")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"日本")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"関西国際空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"フランス")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"シャルル・ド・ゴール空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("abc")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    #paste("125000")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    #paste("7.5")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    #paste(u"前日入国")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    # -----------
    # 移動時間入力不正(Case2)
    # ----------- 

    #wait(0.5)
    #paste("java -jar .\\" + str(num) + "\\TestTarget.jar")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    paste("2")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("2015/8/1")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste(u"豆山倉之助")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("2015/8/22")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"日本")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"関西国際空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"フランス")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste(u"シャルル・ド・ゴール空港")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    paste("125000")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)

    paste("abc")
    wait(0.5)
    type(Key.ENTER)
    wait(0.5)
    
    #paste("7.5")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    #paste(u"前日入国")
    #wait(0.5)
    #type(Key.ENTER)
    #wait(0.5)

    # -----------
    # 登録の終了
    # -----------
    paste("0")
    wait(0.5)
    type(Key.ENTER)