ネットワーク全体でホット、インターフェイス自動化フレームワーク - pytest+yaml 実戦 (超微細仕上げ)


序文

Httprunner は yaml ファイルを使用してインターフェイス自動化フレームワークを実装します。非常に便利です。最近、pytest フレームワークに注目していたので、httprunner のユースケース形式を参考に、pytest バージョンと同様の簡単なフレームワークを作成しました。

プロジェクト構造設計

プロジェクト構造は pytest のプロジェクト構造と完全に一致しています。pytest は test_.py ファイルを探しています。ここでは test_.yml ファイルを探しています。唯一の違いはここです。

プロジェクト構造のリファレンス

C1

conftest.pyのみで実現でき、コード量も非常に少ない
pytestの最新バージョン 7.x

def pytest_collect_file(parent, file_path):
    # 获取文件.yml 文件,匹配规则
    if file_path.suffix == ".yml" and file_path.name.startswith("test"):
        return YamlFile.from_parent(parent, path=file_path)

pytest 5.x 以降

import pytest
import requests


def pytest_collect_file(parent, path):
    # 获取文件.yml 文件,匹配规则
    if path.ext == ".yml" and path.basename.startswith("test"):
        # print(path)
        # print(parent)
        # return YamlFile(path, parent)
        return YamlFile.from_parent(parent, fspath=path)


class YamlFile(pytest.File):
    # 读取文件内容
    def collect(self):
        import yaml
        raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))
        for yaml_case in raw:
            name = yaml_case["test"]["name"]
            values = yaml_case["test"]
            yield YamlTest.from_parent(self, name=name, values=values)

class YamlTest(pytest.Item):
    def __init__(self, name, parent, values):
        super(YamlTest, self).__init__(name, parent)
        self.name = name
        self.values = values
        self.request = self.values.get("request")
        self.validate = self.values.get("validate")
        self.s = requests.session()

    def runtest(self):
        # 运行用例
        request_data = self.values["request"]
        # print(request_data)
        response = self.s.request(**request_data)
        print("\n", response.text)
        # 断言
        self.assert_response(response, self.validate)

    def assert_response(self, response, validate):
        '''设置断言'''
        import jsonpath
        for i in validate:
            if "eq" in i.keys():
                yaml_result = i.get("eq")[0]
                actual_result = jsonpath.jsonpath(response.json(), yaml_result)
                expect_result = i.get("eq")[1]
                print("实际结果:%s" % actual_result)
                print("期望结果:%s" % expect_result)
                assert actual_result[0] == expect_result

pytest バージョン 4.x より前のバージョン

import pytest
import requests


def pytest_collect_file(parent, path):
    # 获取文件.yml 文件,匹配规则
    if path.ext == ".yml" and path.basename.startswith("test"):
        # print(path)
        # print(parent)
        return YamlFile(path, parent)



class YamlFile(pytest.File):
    # 读取文件内容
    def collect(self):
        import yaml
        raw = yaml.safe_load(self.fspath.open(encoding='utf-8'))
        for yaml_case in raw:
            name = yaml_case["test"]["name"]
            values = yaml_case["test"]
            yield YamlTest(name, self, values)


class YamlTest(pytest.Item):
    def __init__(self, name, parent, values):
        super(YamlTest, self).__init__(name, parent)
        self.name = name
        self.values = values
        self.request = self.values.get("request")
        self.validate = self.values.get("validate")
        self.s = requests.session()

    def runtest(self):
        # 运行用例
        request_data = self.values["request"]
        # print(request_data)
        response = self.s.request(**request_data)
        print("\n", response.text)
        # 断言
        self.assert_response(response, self.validate)

    def assert_response(self, response, validate):
        '''设置断言'''
        import jsonpath
        for i in validate:
            if "eq" in i.keys():
                yaml_result = i.get("eq")[0]
                actual_result = jsonpath.jsonpath(response.json(), yaml_result)
                expect_result = i.get("eq")[1]
                print("实际结果:%s" % actual_result)
                print("期望结果:%s" % expect_result)
                assert actual_result[0] == expect_result

この部分をアサートします。現在は等しいかどうかの判断のみを記述します。参考のためにのみ、json データを抽出する jsonpath をサポートします。

yaml 形式の使用例

プロジェクトのどのディレクトリでも、test_で始まるymlファイルであればテストケースとみなされます
。test_login.ymlの内容は以下のとおりです。

- test:
    name: login case1
    request:
        url: http://49.235.x.x:7000/api/v1/login/
        method: POST
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
        json:
            username: test
            password: 123456
    validate:
        - eq: [$.msg, login success!]
        - eq: [$.code, 0]


- test:
    name: login case2
    request:
        url: 49.235.x.x:7000/api/v1/login/
        method: POST
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
        json:
            username: test
            password: 123456
    validate:
        - eq: [$.msg, login success!]
        - eq: [$.code, 0]

ユースケースを実行する

ユースケースを実行し、pytest のシンプルなユースケーススタイルに完全に準拠し、魅力レポートをサポートします。

pytest -v
D:\soft\api_pytest_1208>pytest -v
====================== test session starts ======================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.9.0,
cachedir: .pytest_cache
rootdir: D:\soft\api_pytest_1208
plugins: allure-pytest-2.8.6
collected 4 items

data/test_login.yml::login case1 PASSED                    [ 25%]
data/test_login.yml::login case2 PASSED                    [ 50%]
data/test_login1.yml::login case1 PASSED                   [ 75%]
data/test_login1.yml::login case2 PASSED                   [100%]

=================== 4 passed in 1.34 seconds ====================

魅力レポート

pytest --alluredir ./report
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

1. Pythonプログラミングの入門から習得まで

画像の説明を追加してください

2.インターフェース自動化プロジェクトの実戦

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実戦

画像の説明を追加してください

5. 一流メーカーの再開

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8、JMeterのパフォーマンステスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

夢を胸に、勇敢に頂上に登り、奮闘こそが達成のリズムだ。困難を恐れず、初志を貫き、粘り強く輝きを生み出す。あらゆる努力は変化する力、自分のエネルギーを信じて前進し、努力と汗で輝かしい人生の花を咲かせましょう。

粘り強く追求し、勇敢に前進し、闘争は人生から踊るリズムです。困難を恐れず、知恵と汗で邁進し、輝きを生み出す。自分の力を信じ、信念を強化し、熱心に自分の傑作を書きましょう。

挑戦を受け入れ、限界を超え、闘争は変革の機会です。一生懸命働き続け、人格を磨き、情熱を持って前進してください。自分の力を信じて、果敢に未来に挑戦し、成長する花に汗を流して、自分だけの輝かしい人生を創造して追求してください。

おすすめ

転載: blog.csdn.net/x2waiwai/article/details/132188190