Python高級プログラミングノートのテスト駆動開発

5399 ワード

書籍カタログ:1.テストしない
  • テスト駆動開発原理
  • どの種類のテスト
  • 2.テスト
  • Unittestの欠陥
  • Unittestの代替品
  • シミュレーションとシミュレーション
  • 文書駆動開発
  • 主な内容:
    テスト駆動開発原理:TDDは、必要な機能を上書きするテスト例を記述し、その後、この機能の2つの部分を記述する作業から構成される.すなわち、コードが存在する前にテスト例が記述される.
    どの種類のテスト:最も主要なのは検収テスト(または機能テスト)とユニットテストです.
    Unittestの欠陥:
  • このフレームワークは重い.TestCaseサブクラスですべてのテストを記述する必要があります.2.メソッド名の前にtestを付ける必要があります.3.TestCaseが提供する断言方法の使用が要求される.4.テストアクティビティを実行するためのテストキットを作成する必要があります.
  • フレームワークの拡張が困難
  • テストデバイスは、setupおよびtearDownメカニズムがTestCaseにバインドされているため、組織しにくい場合がありますが、テストごとに実行されます.
  • Pythonソフトウェアの上でテストアクティビティを実行するのは容易ではありません.追加のスクリプトを作成してテストを収集し、集約して実行する必要があります.

  • Unittestの代替品:
  • nose
  • py.test

  • ドキュメントドライバの開発:
  • 物語を書く
  • 本の中の内容は理論化しすぎて、以下は個人の心得です.
  • TDD(テスト駆動開発)の原理と必要性
  • ユニットテストフレームワーク:unittest、nose、py.test

  • unittest本人はずっと自動化フレームワーク、noseとpyに使っています.testは前に知っていましたが、あまり役に立ちませんでした.noseの例は次のとおりです.
    good.py
    # -*- coding:utf-8 -*-
    import hashlib
    import time
    import requests
    
    from Crypto.Cipher import AES
    from Crypto import Random
    from binascii import a2b_hex
    
    
    # AES  
    def get_sign_nature(timestamp):
        BS = 16
        pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
        key_str = "D8EF40495D6C6CD171BFA4403516B035"
        plain = timestamp
        iv = Random.new().read(AES.block_size)
        obj = AES.new(a2b_hex(key_str),AES.MODE_ECB,iv)
        plain = pad(plain)
        result = obj.encrypt(plain).encode("hex").upper()
        return result
    
    
    def login(mobile, password):
        head = "http://app55test.mncats365.com:9080/"
        body = "user/app/login.do"
        tim = str(time.time()).split(".")[0] + "000"
        must_parameters = "&isApple=0&ver_name=5.5.0" + "&timestamp=" + tim + "&signnature=" + get_sign_nature(tim)
        payload = "&userPassword=" + hashlib.md5(password).hexdigest()[8:24] + \
                  "&token=f7f3d60393d49ff8&regid=020759f564f&userAccount="+ mobile
        url = head + body + "?" + payload + "&" + must_parameters
        headers = {'content-type': 'application/json'}
        try:
            r = requests.post(url, headers=headers)
            result = r.json()
        except:
            result = {"status": url}
        return result
    
    if __name__ == '__main__':
        print login("13133841111", "123456")
    

    test_good.py
    # -*- coding:utf-8 -*-
    import nose
    from good import login
    
    
    def test_login():
        assert login("13133841111", "123456").get("status") == 1
    
    if __name__ == '__main__':
        nose.runmodule()
    

    実行結果:
    C:\Python27\python.exe C:/Users/009/PycharmProjects/Auto/Python/Python    /chapter_11/test_good.py
    . ----------------------------------------------------------------------
    Ran 1 test in 0.238s
    
    OK
    
    Process finished with exit code 0

    参考文献:Pythonユニットテストフレームワークのpytest-テスト例の実行方法
    私はBootstrap+EasyUI+Djangoを利用してウェブサイトを開発します:http://www.xuyangting.com/ようこそいらっしゃいました
    ベランダテスト:239547991(グループ番号)
    私のブログhttp://xuyangting.sinaapp.com/