pytest用yaml文件編寫測試用例流程詳解
前言
本篇來學(xué)習(xí)在pytest中使用yaml編寫測試用例
項目結(jié)構(gòu)

conftest.py
只需在 conftest.py 即可實現(xiàn)使用yaml編寫測試用例
# -*- coding: utf-8 -*-
import jsonpath
import pytest
import requests
def pytest_collect_file(parent, file_path):
if file_path.suffix == ".yaml" and file_path.name.startswith("test"):
return YamlFile.from_parent(parent, path=file_path)
class YamlFile(pytest.File):
def collect(self):
import yaml
yml_raw = self.fspath.open(encoding='utf-8').read()
print('yml_raw', yml_raw)
yml_var = Template(yml_raw).safe_substitute(os.environ)
raw = yaml.safe_load(yml_var)
print('raw', raw)
for yaml_case in raw:
name = yaml_case["test"]["name"]
values = yaml_case["test"]
yield YamlItem.from_parent(self, name=name, spec=values)
class YamlItem(pytest.Item):
def __init__(self, name, parent, spec):
super().__init__(name, parent)
self.name = name
self.values = spec
self.request = self.values.get("request")
self.validate = self.values.get("validate")
self.s = requests.session()
def values_render_variable(self, values):
# 替換測試用例中的關(guān)聯(lián)值
yaml_test = Template(json.dumps(values)).safe_substitute(os.environ)
values = yaml.safe_load(yaml_test)
print('values', values)
return values
def runtest(self):
values = self.values_render_variable(self.values)
print('values:', values)
request_data = values["request"]
response = self.s.request(**request_data)
print("響應(yīng)數(shù)據(jù):", response.text)
# 判斷是否有extract提取參數(shù),實現(xiàn)參數(shù)關(guān)聯(lián)
if values.get("extract"):
for key, value in values.get("extract").items():
os.environ[key] = jsonpath.jsonpath(response.json(), value)[0]
print('key', key)
print('value', jsonpath.jsonpath(response.json(), value)[0])
# 斷言
print('validate:', self.validate)
self.assert_response(response, self.validate)
def assert_response(self, response, validate):
"""自定義斷言"""
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("實際結(jié)果:%s" % actual_result[0])
print("期望結(jié)果:%s" % expect_result)
assert actual_result[0] == expect_resultyaml文件
test_method.yaml
說明:
此yaml支持參數(shù)化
extract :提取關(guān)鍵字
- name: 后面引用變量的key值
- $.args.name:jsonpath 提取變量表達(dá)式
引用變量
- $name : $key
- test:
name: get case
request:
url: https://postman-echo.com/get
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
params:
name: DH
city: Beijing
extract:
name: $.args.name
validate:
- eq: [$.args.name, DH]
- eq: [$.args.city, Beijing]
- test:
name: post case
request:
url: https://postman-echo.com/post
method: POST
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
name: $name
city: Beijing
validate:
- eq: [$.json.name, DH]
- eq: [$.json.city, Beijing]
執(zhí)行并查看結(jié)果
pytest -s -v

到此這篇關(guān)于pytest用yaml文件編寫測試用例流程詳解的文章就介紹到這了,更多相關(guān)pytest編寫測試用例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pandas?DataFrame.drop()刪除數(shù)據(jù)的方法實例
pandas作為數(shù)據(jù)分析強(qiáng)大的庫,是基于numpy數(shù)組構(gòu)建的,專門用來處理表格和混雜的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame.drop()刪除數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-07-07
Python使用Selenium實現(xiàn)瀏覽器打印預(yù)覽功能
在Web開發(fā)中,打印預(yù)覽是一個常見的功能需求,通過打印預(yù)覽,我們可以預(yù)覽和調(diào)整網(wǎng)頁的打印布局、樣式和內(nèi)容,Python的Selenium庫是一個強(qiáng)大的工具,可以自動化瀏覽器操作,包括打印預(yù)覽,本文將介紹如何使用Python Selenium庫來實現(xiàn)瀏覽器的打印預(yù)覽功能2023-11-11
利用Django模版生成樹狀結(jié)構(gòu)實例代碼
這篇文章主要給大家介紹了關(guān)于利用Django模版生成樹狀結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

