データ ドリブン テスト フレームワーク
ここでテストされた入力および出力データは、データ ファイル (データ プール、ODBC ソース、CSV ファイル、EXCEL ファイル、Json ファイル、Yaml ファイル、ADO オブジェクトなど) およびキャプチャ ツールによって生成されたコード スクリプトまたは手動で生成されたコード スクリプトから読み取られます。変数。このフレームワークでは、変数は入力値を格納するだけでなく、出力検証値を格納するためにも使用されます。プログラム全体を通して、テスト スクリプトは値ファイルを読み取り、テストのステータスと情報を記録します。これは、テスト ケースがスクリプトではなくデータ ファイルに含まれるテーブル駆動テストに似ており、スクリプトは単にデータの「ドライバー」または配信メカニズムです。
より普及させるために、テストプロセスで使用されるテストデータとコードは別々に作成され、別々に保存されます。
例: データ appid-sercet と、テスト トークン インターフェイスで使用される期待される結果は、事前にデータ ファイルに入れられます。
例: プロジェクトの access_token は公開要件テスト データであり、一度生成されると 7200 秒間有効であり、通常、すべてのインターフェイス テストは 2 時間で実行できます。
トークン値の 1 回の取得を実現し、ファイルに保存してから、ファイル内のトークン値を使用してテストを完了します。
ステップ 1. プロジェクトのルート ディレクトリに新しい conf フォルダーを作成し、その下に新しい config.ini ファイルを作成します。
ステップ 2. common の py フォルダーの下に新しい ini_file_utils.py ファイルを作成します。
コードを書く:
# encoding: utf-8
# @author: Jeffrey
# @file: ini_file_utils.py
# @time: 2022/7/31 16:22
# @desc: 读取、写入ini文件
import os
import configparser
class IniFileUtils: #和框架业务无关的底层代码==》公共底层代码
def __init__(self,file_path):
self.ini_file_path = file_path
self.conf_obj = configparser.ConfigParser()
self.conf_obj.read(self.ini_file_path, encoding='utf-8')
def get_config_value(self,section, key):
value = self.conf_obj.get(section, key)
return value
def set_config_value(self,section, key, value):
self.conf_obj.set(section, key, value)
config_file_obj = open(self.ini_file_path, 'w')
self.conf_obj.write(config_file_obj)
config_file_obj.flush()
config_file_obj.close()
if __name__ == '__main__':
current_path = os.path.dirname(__file__)
config_file_path = os.path.join(current_path, '../conf/config.ini')
ini_file = IniFileUtils(config_file_path)
print(ini_file.get_config_value('default', 'HOSTS'))
ini_file.set_config_value('default','TOKEN_VALUE', 'SSS9090')
実行して結果を表示します。
ini 構成ファイルの token_value の値
ステップ 3、local_config.py ファイルを書き換え、カプセル化して ini ファイルの値を読み取る
コードを書く:
# encoding: utf-8
# @author: Jeffrey
# @file: local_config.py
# @time: 2022/7/26 21:25
# @desc: 封装读取ini文件中的值
import os
from common.ini_file_utils import IniFileUtils
current_path = os.path.dirname(os.path.abspath(__file__))
config_file_path = os.path.join(current_path, '../conf/config.ini')
class LocalConfig(): # #和框架业务有关系的底层代码
def __init__(self,file_path = config_file_path):
self.ini_file_obj = IniFileUtils(file_path)
@property
def get_hosts(self):
'''获取ini文件中的hosts值'''
hosts_value = self.ini_file_obj.get_config_value('default', 'hosts')
return hosts_value
@property
def get_token_value(self):
'''获取ini文件中的token_value值'''
token_value = self.ini_file_obj.get_config_value('default','token_value')
return token_value
local_config = LocalConfig()
if __name__ == '__main__':
print(local_config.get_hosts)
print(local_config.get_token_value)
実行結果を表示します。
ステップ 4. common_function.py ファイルを変更し、取得したトークン値を ini ファイルに入れます
コードを書く:
# encoding: utf-8
# @author: Jeffrey
# @file: common_function.py
# @time: 2022/7/26 21:01
# @desc: 模块化框架
import os
import jsonpath
from common.local_config import local_config
from common.common_api_info import CommonApiInfo
from common.ini_file_utils import IniFileUtils
current_path = os.path.dirname(os.path.abspath(__file__))
config_file_path = os.path.join(current_path, '../conf/config.ini')
def save_access_token_value_info_ini_file(session_obj,hosts):
"""获取access_token的值并写入到ini文件中"""
response = CommonApiInfo(session_obj,hosts).get_access_token_api('client_credential',
'wxf14419077f707856',
'92a113bd4b5ffdc72144740dc7123c99')
# 获取响应json中的access_token的值
token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0]
# 把获取到的access_token值写入到ini文件中
IniFileUtils(config_file_path).set_config_value('default', 'token_value', token_value)
# return token_value
if __name__ == '__main__':
import requests
save_access_token_value_info_ini_file(requests.session(), local_config.get_hosts)
実行後、ini ファイルの token_value の値を確認します。
最新のトークン値が書き込まれました
ステップ 5. run_api_tests.py ファイルを変更し、最初にトークン値を ini ファイルに書き込みます
ステップ 6. ユース ケース レイヤーのコードを変更し、トークンの py ファイルを取得する
変更前のユースケース層のコードスクリプト VS 変更後のコードスクリプト
VS
修正後
トークンの py ファイルを取得します。
ステップ 7. run_api_tests.py ファイルを実行して、実行結果を表示します。
レポートを見る
Run_api_tests.py では、ini 構成ファイルに対してトークン値が生成され、テストがトークン インターフェイスを取得するときに、生成されたトークン値が再度呼び出されます. 後で生成された値が以前の値を上書きして、エラーが発生するのを防ぐため. ini 構成ファイルが失敗する場合、テスト取得トークン インターフェイスを変更する必要があります。異なるアカウント (appid とシークレット)
備考: 上記は、各フレームワークがリニア スクリプトとは異なるということです --- モジュラー フレームワーク --- ライブラリ フレームワーク --- データ駆動型
実例
光学理論は役に立たないので、従うことを学ばなければならず、学んだことを実践に適用できるように、自分でやらなければなりません.このとき、いくつかの実践的なケースから学ぶことができます.
お役に立ちましたら、いいねとコレクションをお願いします。作者の励みになります。次回からすぐに見つけられるのも便利です。
理解できない場合は、下の小さなカードを参照してください. ブロガーはまた、志を同じくするテスターと一緒に学び、進歩することを望んでいます.
適切な年齢で、適切なポジションを選択し、自分の利点を最大限に発揮するようにしてください。
私の自動テスト開発の道のりは、途中の各段階の計画と切り離すことはできません。計画と要約が好きだからです。
ビデオ チュートリアルのテストと開発、ノートの学習、ポータルの受信を行います。! !