Python3のシンプルなインターフェースの自動テストフレームワークの設計と実装

1. 開発環境

  • オペレーティングシステム: Ubuntu18
  • 開発ツール:IDEA+PyCharmプラグイン
  • Python バージョン: 3.6

2. 使用するモジュール

  • リクエスト: リクエストの送信に使用されます
  • xlrd:Excelの操作とテストケースの整理
  • smtplib、電子メール: テストレポートを送信
  • ロギング:ログ追跡
  • json: データの書式設定
  • Django: インターフェース開発
  • configparser: 設定ファイルの読み取り

3. フレーム設計

3.1. プロセス

インターフェイスのユースケースは Excel で整理され、URL やリクエストボディなどの列が定義されます。実行プロセスは次のとおりです。

  • xlrd ツールを使用して Excel 内の情報を読み取り、それを完全なリクエストに結合します。
  • インターフェイス リクエスト クラスは、完全なリクエストを 1 つずつ実行します。このプロセスはログに記録される必要があり、各実行は追跡可能である必要があります。
  • テスト結果をバックフィルし、電子メールを送信し、各実行の結果をアーカイブします。より良いアプローチは、より直観的な過去の動作ステータスのレポートを作成することです。

アドバンテージ:

  • ユースケースは Excel で整理されており、コードを記述する必要がなく、簡単に始めることができます。
  • ユースケースの数が多くない場合、開発スピードは速くなります。

欠点:

  • ユースケースの依存関係は問題点です。
  • インターフェイス自動化のユースケースのみがサポートされています。
  • Excel のユースケースは、事前に正しいかどうかを確認することができず、実行してみなければわかりません。
  • 多数のユースケースをうまく管理できず、チームのコラボレーションはサポートされていないため、個人がオンラインになった後の回帰テストやスモーク テストに使用するのが良い選択でしょう。

長所と短所を比較すると、このフレームワークには実際には多くの欠点があることが明らかにわかります。したがって、業界のオープンソースの自動テスト フレームワークであっても、企業が開発したフレームワークであっても、ユース ケースを整理するために Excel が使用されたことはありません。一部の企業が開発した自動化フレームワークは使用するのが非常に難しいか、多数のツールを単純に組み合わせたものであることは言及する価値があります。それはチームの生産性を向上させません。ただし、優れた製品は一夜にして完成するものではなく、継続的な最適化のプロセスが必要です。したがって、Excel を使用してユースケースを整理する上記のフレームワークは試してみる価値があるので、当面は apitest という名前にしましょう。現在、より優れた自動テスト フレームワークには、unittest、testng、pytest などが含まれます。

3.2. プロジェクトの構造

  • testcase: テスト ケースまたはリクエストを保存する json ファイル。
  • config: 設定ファイル。
  • レポート: テスト レポート、ログ ファイル、およびそのアーカイブ。
  • untils: ツール セット、send_request はリクエストの送信に使用され、email_tool は電子メールの送信に使用され、excel_tool は Excel でのデータの読み取りに使用され、check_result は結果の確認に使用され、run_main ユース ケースの実行エントリ、log_trace はログの追跡に使用されます。

5. ログの印刷

組み込みのログ モジュールを使用して、実行ログを記録し、ログ レベルを設定します。
log_trace.log:

import  logging
filename = "../report/test_case_run.log"
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(levelname)s1 %(filename)s [line:%(lineno)d]  %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename=filename,
                    filemode='w')

6. インターフェースリクエストクラスのカプセル化

サードパーティモジュールのインストールリクエスト

pip install requests

send_request関数を定義し、受信メソッドの種類に応じてget、post、delete、putなどのリクエストメソッドを呼び出してリクエストを送信します。send_request.py:

import  requests
from untils. log_trace import  *

#发送get请求
def get_request(url,data=None,headers=None):
    res = requests.get(url=url,data=data,headers=headers)
    return res

#发送post请求
def post_request(url,data,headers=None):
    res = requests.post(url=url,data=data,headers=headers)
    return res

#发送delete请求
def del_request(url,data=None,headers=None):
    res = requests.delete(url,data=data)
    return res

#发送put请求
def put_request(url,data,headers=None):
    pass

def send_request(method,url,data=None,headers=None):
    try:
        logging.info(headers)
        if headers:
            if method == "GET":
                return get_request(url,data,headers=headers)
            if method == "POST":
                return post_request(url,data=data,headers=headers)
            if method == "DELETE":
                return  del_request(url,data=data,headers=headers)
            #put使用频率低,暂时不写
            if method == "PUT":
                return  put_request(url,data=data,headers=headers)
        else:
            logging.info("Header is null")
    except Exception as e:
        logging.info("send request fail:%s"%e)

send_request メソッドをテストするコードを untils_test.py に記述します。コードは次のとおりです。

#coding:utf-8
from untils.send_request import send_request

def test_send_request():
    url="http://127.0.0.1:9000/articles/"
    headers = {
        "X-Token":"0a6db4e59c7fff2b2b94a297e2e5632e"
    }
    res = send_request("GET",url,headers=headers)
    print(res.json())



if __name__ == "__main__":
    test_send_request()

Python 全画面コピー

操作結果:

/usr/bin/python3.6 /home/stephen/IdeaProjects/apitest/untils/untils_test.py
{'status': 'BS.200', 'all_titles': {'amy1': 'alive', 'modifytest': 'alive', 'addTest': 'alive'}, 'msg': 'query articles sucess.'}

Process finished with exit code 0

ゼロ基礎から習得までの Python インターフェース自動テスト (2023 最新バージョン)

 

おすすめ

転載: blog.csdn.net/ada4656/article/details/134321039