Pytest+Allure+Excel インターフェイスの自動テスト フレームワークの実践

1. Allure の
概要
はじめに Allure フレームワークは、柔軟で軽量な多言語テスト レポート ツールであり、簡単なテスト結果を Web 形式で表示するだけでなく、開発プロセスに関係するすべての人が毎日の実行結果を表示できるようにします。テストでは、有益な情報を最大限に抽出します。

Allure は Java 言語で開発されており、Pytest、JavaScript、PHP、Ruby などをサポートしています。

DEV/QA の観点から、Allure は、一般的な欠陥の簡略化された統計などの詳細なテスト レポートを提供します。失敗したテストはバグと中断されたテストに分類できます。ログ、ステップ、フィクスチャ、添付ファイル、およびタイミングも構成でき、実行履歴も表示されます。 TMS、BUG 管理システム、Jenkins などとの統合。したがって、上記の構成により、責任のあるすべての開発者とテスト担当者が可能な限り多くのテスト情報を得ることができます。
マネージャーの観点から見ると、Allure は、明確な「全体像」、カバーされている機能、欠陥が集中している場所、実行タイムラインの様子、その他多くの便利なものを含む高レベルの統計レポートを提供します。Allure のモジュール性と拡張性により、いつでも何かを微調整して Allure をより良いものにすることができます。
それでは、レポートに必要な情報をより詳細に表示する方法と、Allure と Jenkins の統合について説明します。

インストール
(Windows/Mac共通インストール方法)

ダウンロード アドレス: https://github.com/allure-framework/allure2/releases から、必要なバージョンの zip パッケージをダウンロードします。

インストール:

解凍 -> bin ディレクトリに入る -> allure.bat を実行し
、bin ディレクトリを Path 環境変数に追加します
。pytest と連携し、allure2 を使用して、より美しいテスト レポートを生成します: pip install allure-pytest
実行メソッド。
実行中に結果を収集します。テスト実行
pytest [テスト ファイル] - s -q --alluredir=./result/ --clean-alluredir
-s: 成功した実行のケース ログが出力されることを示します
-q: ファイル実行パスが後に続く場合、実行する必要があるファイルのみを意味します
--alluredir: ストレージ テストを指定します 結果へのパス (ディレクトリが存在しない場合は作成されます)
--clean-alluredir: 履歴結果データをクリアします
テスト レポートを表示します
方法 1 : ローカルでレンダリングした後に結果を外部に表示するために使用されます。

allureserve ./result/Method
2: 結果をローカルでレンダリングして表示するために使用されます

# レポートを生成します
alluregenerate ./result/ -o ./report/ --clean # 注: --clean をカバレッジ パスに追加します

# レポートを開きます
allure open -h 127.0.0.1 -p 8883 ./report/注
: /report/ ディレクトリにあるindex.html が最終結果ページですが、このファイルを直接開いても実際のレポートの内容は表示されません。ブラウザー。これは、実際のレポートのコンテンツが表示される前に、allure によってレンダリングされる必要があるためです。

2. Allure シナリオの共通機能
:

レポートには、テスト機能、サブ機能またはシナリオ、テストの追加情報を含むテスト ステップが含まれることが期待されます。
解決する:

import allure
@allure.feature('関数名')
@allure.story('サブ機能名')
@allure.title('テストケース名')
@allure.step('ステップ詳細')
@allure.description( ' テスト ケースの説明')
@allure.attach('特定のテキスト情報'): データ、テキスト、写真、ビデオ、Web ページなどの追加情報が必要です。実行時にログイン
機能のみをテストする場合は、次の情報を追加できます。制限とフィルタリング (例: pytest ファイル名) --allure_features 'ショッピング カートの機能' --allure_stories 'ショッピング カートに追加'

@allure.feature() と @allure.store() 機能間の関係は、
大きな関数またはモジュールに相当します。ケースを機能に分類し、レポートの動作に表示します。テストスイートに相当します。

ストーリーはブランチ関数/モジュールに相当し、フィーチャーの下の構造に属し、テストケースに相当するレポート内のフィーチャーに表示されます。

機能とストーリーは親子関係に似ています。

@allure.step() と allure.step() の違い
テスト プロセスの各ステップは、通常、特定の論理メソッドに配置されます。
主要なステップに配置してレポートに表示できます。
アプリと Web の自動テストでは、新しいページに切り替えるたびに、それをステップとみなすことをお勧めします。
使用法:
@allure.step(): は、デコレータの形式でクラスまたはメソッドにのみ配置できます。
with allure.step(): はテスト ケース メソッドに配置できますが、テスト ステップのコードをこのステートメントに含める必要があります。
テスト ケースに優先順位を付ける
シナリオ:

通常、テストにはスモークテスト、リグレッションテスト、オンライン検証テストなどがあり、例えばオンライン化する場合にはメインプロセスや重要なモジュールを実行するなど、重要度に応じて分けて実行する必要があります。

解決する:

pytest.mark マークの説明
、allure.feature、allure.story マークの説明を追加することで、
テスト ケース レベルを allure.severity で直接マークし、
テスト ケースの重要度に応じてテスト ケース レベルを分割します。レベルが指定されていない場合は、デフォルトは NORMAL レベルです。

BLOCKER: ブロッキング欠陥 (機能が実装されていないため、次のステップに進むことができません)
CRITICAL: 重大な欠陥 (関数ポイントの欠落)
NORMAL: 一般的な欠陥 (境界状況、フォーマット エラー)
MINOR: 軽度の欠陥 (インターフェイス エラーが UI 要件と一致しません) )
TRIVIAL: 軽微な欠陥 (必須項目のプロンプトが表示されない、またはプロンプトが不規則です)
手順: 

@allure.severity(allure.severity_level.TRIVIAL) をメソッド、関数、クラスに追加して、
対応するレベルでのユースケースの実行を指定します: pytest -s -v ファイル名 --allure-severities
コンテンツを追加するには、通常、クリティカルAllure テスト レポート (画像、添付ファイル、テキスト、スクリーンショット、HTML など)
シナリオ:

フロントエンドの自動テストでは、多くの場合、適切な場所と適切な時間にスクリーンショットなどの追加の画像または HTML が必要になります。
解決する:

@allure.attach() は、テスト、ステップ、またはテスト結果を補足できる、提供されたさまざまな種類の添付ファイルを表示します。
ステップ:

テスト レポートに Web ページを添付します。
形式: allure.attach(body(content), name,attachment_typeextension)
例: allure.attach('<head>/head><body>Homepage</body>', 'This isエラーページ 結果情報'、allure.attachment_type.HTML)
テストレポートに画像を添付します:
形式: allure.attach.file(source, name,attachment_type, extension)
例: allure.attach.file("./result/ b.png "、attachment_type=allure.attachment_type.PNG)
統合テスト管理システム
@allure.link()、@allure.issue()、@allure.testcase() は、主に Allure レポートとテスト管理システムを統合して作成します。社内アドレスにジャンプします。

まず、3 つのデコレータのソース コードを見てみましょう。

def link(url, link_type=LinkType.LINK, name=None):
    return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))
 
def issue(url, name=None):
    return link(url, link_type=LinkType.ISSUE, name=name)
 
def testcase(url, name=None):
    return link(url, link_type=LinkType.TEST_CASE, name=name)

概要
issue() と testcase() は実際には link() を呼び出しますが、link_type が異なります。
必須パラメータ URL: ジャンプリンク。
オプションのパラメータ名: Allure レポートに表示される名前。渡さない場合は完全なリンクが表示されます (渡すことをお勧めします。そうでないと可読性が低くなります)。
この 3 つの方法は同じであり、ジャンプリンクと名前を提供しますが、リンクの種類が異なり、最終的に表示されるスタイルが異なります (種類が異なり、スタイルが異なります)。
必要に応じて、 @allure.link() を使用してください。
3 つのデコレータが表示される理由は、リンク (訪問リンク、バグ リンク、テスト ケース リンク) をより適切に分類するためです。
コード例

 
import allure
 
TEST_CASE_LINK = 'https://github.com/qameta/allure-integrations/issues/8#issuecomment-268313637'
 
@allure.link('https://www.youtube.com/watch?v=4YYzUTYZRMU')
def test_with_link():
    pass
 
@allure.link('https://www.youtube.com/watch?v=Su5p2TqZxKU', name='点击我看一看youtube吧')
def test_with_named_link():
    pass
 
@allure.issue('140', 'bug issue链接')
def test_with_issue_link():
    pass
 
@allure.testcase(TEST_CASE_LINK, '测试用例地址')
def test_with_testcase_link():
    pass
結果を実行し、Allure レポートを表示します。

3. インターフェース自動テストフレームワークの例

完全なプロジェクト: https://github.com/juno3550/InterfaceAutoTestWithPytest

試験方法例
 1 import pytest
 2 import allure
 3 import logging
 4 from util.assert_util import assert_keyword
 5 from util.request_util import api_request
 6 from util.global_var import *
 7 from util.excel_util import excel_util
 8 
 9 
10 register_test_data = excel_util.get_sheet_data("注册")
11 login_test_data = excel_util.get_sheet_data("登录")
12 
13 
14 @allure.feature("登录模块")
15 @pytest.mark.dependency(name="TestLoginModule")
16 class TestLoginModule:
17         
18     @allure.story("注册功能")
19     @allure.title('用户注册')  # 指定测试用例标题,默认是函数名
20     @allure.description('通过接口进行用户注册')  # 添加测试用例描述
21     @allure.severity(allure.severity_level.BLOCKER)  # 阻塞级别
22     @pytest.mark.run(order=1)
23     @pytest.mark.parametrize('case_data', register_test_data)
24     def test_register(self, case_data):
25         with allure.step("读取请求数据,调用接口"):
26             logging.info("接口用例数据:%s" % case_data)
27             response = api_request(case_data[API_IP], case_data[API_URI], case_data[REQUEST_METHOD],
28                                    case_data[API_REQUEST_DATA], case_data[RESPONSE_EXTRACT_VAR],
29                                    case_data[REQUEST_HEADER], case_data[REQUEST_COOKIE])
30         with allure.step("获取响应数据,进行断言"):
31             assert_keyword(response, case_data[RESPONSE_ASSERT_KEYWORD])
32 
33     @allure.story("登录功能")
34     @allure.title('用户登录')  # 指定测试用例标题,默认是函数名
35     @allure.description('通过接口进行用户登录')  # 添加测试用例描述
36     @allure.severity(allure.severity_level.BLOCKER)  # 阻塞级别
37     @pytest.mark.run(order=2)
38     @pytest.mark.parametrize('case_data', login_test_data)
39     def test_login(self, case_data):
40         with allure.step("读取请求数据,调用接口"):
41             logging.info("接口用例数据:%s" % case_data)
42             response = api_request(case_data[API_IP], case_data[API_URI], case_data[REQUEST_METHOD],
43                                    case_data[API_REQUEST_DATA], case_data[RESPONSE_EXTRACT_VAR],
44                                    case_data[REQUEST_HEADER], case_data[REQUEST_COOKIE])
45         with allure.step("获取响应数据,进行断言"):
46             assert_keyword(response, case_data[RESPONSE_ASSERT_KEYWORD])
47 
48 
49 if __name__ == "__main__":
50     test_dir = os.path.dirname(__file__)
51     pytest.main(['-s', '-q', test_dir, '--alluredir', '../test_result/', "--clean-alluredir"])
52     os.system('allure generate ../test_result/ -o ../test_report/ --clean')
53     os.system('allure open -h 127.0.0.1 -p 8881 ../test_report/')
テストデータ例

アリュールレポート結果例

 

以下はサポート学習教材です。[ソフトウェア テスト] を行っている友人にとって、これは最も包括的で完全な準備倉庫となるはずです。この倉庫は、最も困難な旅にも同行してくれました。また、あなたのお役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/qq_73332379/article/details/133352236