内容:ガイド
序文
Httprunner は yaml ファイルを使用してインターフェイス自動化フレームワークを実装します。非常に便利です。最近、pytest フレームワークに注目していたので、httprunner のユースケース形式を参考に、pytest バージョンと同様の簡単なフレームワークを作成しました。
プロジェクト構造設計
プロジェクト構造は pytest のプロジェクト構造と完全に一致しています。pytest は test_.py ファイルを探しています。ここでは test_.yml ファイルを探しています。唯一の違いはここです。
プロジェクト構造のリファレンス
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. まとめ(最後にちょっとしたサプライズ)
夢を胸に、勇敢に頂上に登り、奮闘こそが達成のリズムだ。困難を恐れず、初志を貫き、粘り強く輝きを生み出す。あらゆる努力は変化する力、自分のエネルギーを信じて前進し、努力と汗で輝かしい人生の花を咲かせましょう。
粘り強く追求し、勇敢に前進し、闘争は人生から踊るリズムです。困難を恐れず、知恵と汗で邁進し、輝きを生み出す。自分の力を信じ、信念を強化し、熱心に自分の傑作を書きましょう。
挑戦を受け入れ、限界を超え、闘争は変革の機会です。一生懸命働き続け、人格を磨き、情熱を持って前進してください。自分の力を信じて、果敢に未来に挑戦し、成長する花に汗を流して、自分だけの輝かしい人生を創造して追求してください。