それを見たリーダーがあなたに給料をあげました!Python +ddt+excel は新しいトリックで、インターフェイスの自動化テストは簡単に実行でき、テスト レポートは素晴らしいです。

目次

Python +ddt+excelを使ってインターフェース自動テストを実現する方法

1. 準備

1.Python環境をインストールする

2. 関連ライブラリをインストールする

2. 設計とテスト

1. Excelファイルを書き込む

2. Excel 操作をカプセル化する

3. リクエストをカプセル化する

3. テストを実行する

1. テストケースを書く

2. テストレポートの生成

4 番目に、結果を表示します


 インターフェイス自動テストとは、ユーザーがコードを記述したりツールを使用してリクエストを送信することをシミュレートすることにより、インターフェイスが設計仕様と機能要件を満たしているかどうかを検証するプロセスを指します。

Python +ddt+excelを使ってインターフェース自動テストを実現する方法

インターフェイスの自動テストにより、テストの効率と品質が向上し、テストのコストと時間が節約され、テストの範囲と保守性が確保されます。

Yong 兄弟が Python +ddt+excel を使用してインターフェース自動テストを実現する方法をガイドします。次のコンテンツを参照してください。

1. 準備

1.Python環境をインストールする

Python は簡潔かつエレガントで、習得が容易なプログラミング言語であり、豊富なサードパーティ ライブラリとコミュニティ サポートがあり、インターフェイスの自動テストに非常に適しています。Python バージョン 3.0 以降をインストールし、コマンド ラインで Python コマンドを使用するように環境変数を構成します。

2. 関連ライブラリをインストールする

インターフェイス自動テストを実行するには、次のライブラリをインストールする必要があります。

  • リクエスト: HTTP リクエストの送信に使用され、さまざまなメソッド、パラメータ、ヘッダー、認証などをサポートします。

  • xlrd: Excel ファイル内のデータを読み取るために使用され、xls および xlsx 形式をサポートします。

  • openpyxl: Excel ファイルにデータを書き込むために使用され、xlsx 形式をサポートします。

  • ddt: データ駆動型テストの実装に使用されます。Excel ファイルから複数のデータ セットを読み取り、複数のテスト ケースを生成できます。

  • Unittest: テスト ケースの作成と実行、アサーション、事前事後条件、テスト スイートなどのサポートに使用されます。

  • HTMLTestRunner_api: チャート、ログ、スクリーンショットなどをサポートする HTML 形式のテスト レポートを生成するために使用されます。

pip コマンドを使用してこれらのライブラリをインストールできます。たとえば、次のようになります。

pip install requests

2. 設計とテスト

1. Excelファイルを書き込む

Excel ファイルに次のようなインターフェイスの関連情報を入力する必要があります。

  • インターフェース名

  • リクエストアドレス

  • リクエストメソッド

  • リクエストパラメータ

  • 期待される結果

例えば:

この Excel ファイルを test_data.xlsx として保存し、プロジェクトの test_datas ディレクトリに置きます。

2. Excel 操作をカプセル化する

Excel ファイルのデータを便利に読み書きするには、次のようないくつかの Excel 操作関数をカプセル化する必要があります。

  • オープンフォーム

  • ヘッダーを取得する

  • すべてのデータを取得する

  • データ入力

これらの関数をクラスで定義し、excel_handler.py として保存し、プロジェクトの Lib ディレクトリに置くことができます。具体的なコードは次のとおりです。

from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet
 
class ExcelHandler():
    '''操作Excel'''
    def __init__(self, file):
        '''初始化函数'''
        self.file = file
    
    def open_sheet(self, sheet_name) -> Worksheet:
        '''打开表单'''
        wb = load_workbook(self.file)
        sheet = wb[sheet_name]
        return sheet
    
    def read_rows(self,sheet_name):
        '''读取除表头外所有数据(除第一行外的所有数据)'''
        sheet = self.open_sheet(sheet_name)
        rows = list(sheet.rows)[1:]
        data = []
        for row in rows:
            row_data = []
            for cell in row:
                row_data.append(cell.value)
            data.append(row_data)
        return data
     def read_key_value(self,sheet_name):
        '''获取所有数据,将表头与内容结合整....'''                ...
        return data

3. リクエストをカプセル化する

HTTP リクエストを便利に送信するには、次のようないくつかのリクエストのリクエスト関数をカプセル化する必要があります。

  • セッションを初期化する

  • リクエストを送信する

  • セッションを閉じる

これらの関数をクラスで定義し、requests_handler.py として保存し、プロジェクトの Lib ディレクトリに置くことができます。具体的なコードは次のとおりです。

import requests
 
class HTTPHandler:
    # 初始化
    def __init__(self):
        self.session = requests.Session()
    
    # 定义一个方法,接收访问http请求的方式
    def visit(self, url, method, params=None, data=None, json=None, **kwargs):
        res = self.session.request(method, url, params=params, data=data, json=json, **kwargs)
        try:
            return res.json()
        except ValueError:
            print('return not json')
    
    # 关闭session会话
    def close_session(self):
        self.session.close()

3. テストを実行する

1. テストケースを書く

テスト ケースを作成して実行するには、unittest と ddt を使用する必要があります。具体的な手順は次のとおりです。

  • 関連するライブラリとモジュールをインポートする

  • Unittest.TestCaseを継承するテストクラスを定義する

  • セッションを初期化し、Excel ファイル内のデータを読み取るクラス メソッドを定義します。

  • @ddt.data デコレーターを使用して Excel ファイル内のデータを渡します

  • リクエストを送信し、レスポンスが期待どおりであるかどうかをアサートするテスト メソッドを定義します。

これらのコードを test_api.py として保存し、プロジェクトの test_cases ディレクトリに置くことができます。具体的なコードは次のとおりです。

from Lib.excel_handler import ExcelHandler
from Lib.requests_handler import HTTPHandler
import requests
import ddt
import unittest
 
data = ExcelHandler('test_datas/test_data.xlsx').read_key_value('Sheet1')
 
@ddt.ddt
class TestAPI(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.s = HTTPHandler()
    
    @ddt.data(*data)
    def test_api(self,params):
        print('params:%s' % params)
        case_name = params.get('接口名称')
        url = params.get('请求地址')
        args = eval(params.get('请求参数')) if isinstance(params.get('请求参数'), str) else params.get('请求参数')
        method = params.get('请求方法')
        expct_res1 = params.get('预期结果')
        
        # 发起请求,获取返回数据
        result = self.s.visit(url, method, params=args)
 
        # 分析返回数据
        response_data = result['name']
 
        
        # 断言响应结果是否符合预期
        self.assertEqual(expct_res1, response_data)
 
    @classmethod
    def tearDownClass(cls):
       cls.s.close_session()

2. テストレポートの生成

HTMLTestRunner_api を使用して HTML 形式でテスト レポートを生成する必要があります。具体的な手順は次のとおりです。

  • 関連するライブラリとモジュールをインポートする

  • テスト スイートを定義し、テスト ケースを追加する

  • テストレポートのファイル名とパスを定義します。

  • テスト ランナーを定義し、ファイル オブジェクトとテスト レポートの関連パラメーターを渡します。

  • テスト ランナーを使用してテスト スイートを実行する

これらのコードを run.py として保存し、プロジェクトのルート ディレクトリに置くことができます。具体的なコードは次のとおりです。

import unittest
from HTMLTestRunner_api import HTMLTestRunner
from test_cases.test_api import TestAPI
 
# 定义一个测试套件
suite = unittest.TestSuite()
# 添加测试用例
suite.addTest(unittest.makeSuite(TestAPI))
 
# 定义一个测试报告的文件名和路径
report_file = 'reports/test_report.html'
 
# 定义一个测试运行器,传入测试报告的文件对象和相关参数
with open(report_file, 'wb') as f:
    runner = HTMLTestRunner(f, title='接口自动化测试报告', description='用例执行情况')
    # 使用测试运行器来运行测试套件
    runner.run(suite)

4 番目に、結果を表示します

run.py ファイルを実行すると、レポート ディレクトリに生成された test_report.html ファイルが表示されます。それを開くと、次の内容が表示されます。
 

11 個のテスト ケースがあり、6 個が合格、5 個が失敗したことがわかります。また、ケース名、リクエストアドレス、リクエストパラメータ、期待される結果、実際の結果など、各テストケースの詳細を確認することもできます。グラフ、ログ、スクリーンショットなども表示されます。

このようにして、Python +ddt+excel によるインターフェイス自動テストの実装プロセスが完了しました。


最後に、私の記事を注意深く読んでくださった皆さんに感謝します。ファンの成長と関心をずっと見ていると、相互主義が常に必要になります。それほど価値のあるものではありませんが、もしあなたがそれを持っていれば、それを奪うことができますそれが必要:

これらの資料は、[ソフトウェア テスト] の友人にとって最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅を乗り越える何万人ものテスト エンジニアにも同行してきました。あなたにも役立つことを願っています。

私の QQ 技術交換グループ (技術交換とリソース共有、広告なし)

 

おすすめ

転載: blog.csdn.net/weixin_67553250/article/details/131580344
おすすめ