Pythonによる自動化テストスクリプトの開発


通常、少し規模のあるシステムでは、いくつかの新しい変更ポテンシャルが追加の機能回帰テスト作業をもたらすに違いありませんが、この仕事は非常に煩雑で、人肉の方法が何度も繰り返されると、非常に退屈になります.
我々が望むのは、既存の機能に繰り返し回帰し、回帰テストレポートを与える回帰スクリプトを自動化する方法です.
Pythonの世界にはオープンソースフレームワークSplinterがあり、ブラウザの動作を非常にシミュレートすることができます(ある意味では人のアクセスクリック動作とも言えます).Splinterは豊富なAPIを提供し、現在の動作による結果を判断するためにページの情報を取得することができます.
最も簡単な例
ブラウザ=Browser('firefox')はブラウザをシミュレートします.
browser.visit(‘http://waptest.taobao.com/login/login.htm’)指定URLへのアクセス
browser.fill('TPL_username','test_04')フォームユーザー名を入力
browser.fill('TPL_password','taobao 1234')フォームパスワードを入力
browser.find_by_value('ログイン').first.click()フォームの発行
コードを実行すると、splinterは指定したブラウザを開き、映画を上映するようにコードロジックに基づいて一歩一歩実行します.
 
たとえば、ログイン機能に戻ります.以前はこのようなスクリプトを開発したことがありませんでしたので、まずログイン動作をシミュレートするためのスクリプトを開発します.
次のコード(実際には非常に短いコードです):
#!/user/bin/python
# -*- coding: utf8 -*-

import sys
import re
from splinter.browser import Browser

#####################################################
# global instance
CLOASE_AFTER_TEST = False
GBK = "gbk"
UTF8 = "utf8"

#####################################################
# encoding for console
reload(sys)
sys.setdefaultencoding(UTF8)

#####################################################
# small method
encoding = lambda x:x.encode('gbk')

#####################################################
def output(x):
    """
        encode and print
    """
    print encoding(x)

def resultMsg(x):
    """
        judge result and print, x : True or False
    """
    if x == True:
        print 'pass'
    else:
        print '[X]not pass'
    print '--------------------------'

def checkresult(x):
    """
        check result message, x : the error message u want
    """
    resultMsg(browser.is_text_present(x))

def testLogin(desc, username, password, result):
    """
        fill login form message and submit, check result message and print
    """
    output(desc)
    browser.fill('TPL_username',username.decode(UTF8))
    browser.fill('TPL_password',password.decode(UTF8))
    browser.find_by_value('  ').first.click()
    checkresult(result)

__testUrl = 'http://waptest.taobao.com/login/login.htm?tpl_redirect_url=http%3A%2F%2Fm.taobao.com%2F'

# chrome driver : http://code.google.com/p/selenium/wiki/ChromeDriver
# already support firefox
browser = Browser()
browser.visit(__testUrl)

output("    :"+browser.title)

try:
    # test login
    testLogin('        ','','','      ')
    testLogin('       ','qd_test_001','','     ')
    testLogin('       ','           ','xxxxxxx','       ')
    testLogin('      ','qd_test_001','taobao1234','       ')

    # test find password
    output("  [    ]  ")
    browser.visit(__testUrl)
    backPasswordLink = browser.find_link_by_text('    ')
    if 1 == len(backPasswordLink):
        backPasswordLink.first.click()
        ru = re.findall(re.compile(".*(reg/gp.htm).*", re.IGNORECASE), browser.url)
        if ru is not None:
            checkresult('    ')
        else:
            output("          ")

except Exception,x:
    print x

if CLOASE_AFTER_TEST:
    browser.quit()

これらの文から、私たちが大体テストするいくつかのログイン状況を見ることができます.
testLogin('テストはユーザー名を入力していません',','会員名を入力してください')
testLogin('テストパスワードが入力されていません','qd_test_001',','パスワードを入力してください')
testLogin('テストアカウントは存在しません','これは存在しない名前ですよ','xxxxxx','このアカウント名は存在しません')
testLogin('テスト成功登録','qd_test_001','taobao 1234','ログイン前操作を続行')
 
スクリプトを実行すると、結果が得られます.
--------------------------------------------------------------------------
テストページ:ユーザー登録-携帯電話淘宝網
ユーザー名が入力されていないテスト
pass
--------------------------
パスワードが入力されていないテスト
pass
--------------------------
テストアカウントが存在しません
pass
--------------------------
テストに成功したログイン
pass
--------------------------
[パスワードを取り戻す]リンクのテスト
pass
-------------------------------------------------------------------------
 
ここの出力は私たちのコード制御で、結果をファイルに保存して監視システムやメールボックスに送信することもできます.
 
オートメーション回帰スクリプトを初めて開発した後、その後の機能調整では、人肉を操作する必要がなくなり、スクリプトを走ると結果が得られます.
 
添付:
Splinterクイック紹介
公式サイト:http://splinter.cobrateam.info/
公式紹介:
Splinter is an open source tool for testingweb applications using Python. It lets you automate browser actions, such asvisiting URLs and interacting with their items
 
機能:
1.ブラウザの動作をシミュレートし、指定されたURLにアクセスし、異なるブラウザタイプを指定することができる.例えばfirefoxやchromeなどです.異なるブラウザは、対応するドライバをローカルにインストールするだけで、コードに名前指定でアクセスできます.
2、クッキー操作をサポートし、クッキーの追加と削除を便利にできる.
3、マウスの動作をシミュレートすることをサポートします.例えば、ボタンにスライドしたり、ボタンからフォーカスを外したりします.検索エンジンのキーワード入力ボックスなどの動的ヒントがあるページに対して、非常に便利なテストができます.
4、アナログキーボードの入力操作をサポートし、inputなどのコントロールの入力はユーザーのtypeプロセスを模擬することができる.
5、jsまたは呼び出しページを直接実行するjsをサポートする.
6、アナログアップロードファイルをサポートする.
7、radioとcheckboxに対して専門のapiサポートがあって、とても便利です;
8、ページをすばやく取得する要素をサポートしたり、テキストがあるかどうかを判断したりして、ページヒント情報が正確かどうかを判断するのに便利です.
9、最も重要なのは、splinterのAPIは非常に簡単で、公式のドキュメントと協力して学習コストはほとんど0で、もちろんpython文法を理解しなければなりません.jsとcssをよく知っていれば、jqueryが好きなように好きになるかもしれません.
 
機能:
Splinterが実行すると、指定したブラウザが自動的に開き、指定したURLにアクセスします.
それからあなたが開発したシミュレーションのどんな行為も、自動的に完成します.パソコンの前に座って、映画を見るようにスクリーンのいろいろな動作を見て自動的に完成し、結果を集めるだけです.