Ugrás a fő tartalomra

JIRA rest api tesztelése 3

JIRA rest api tesztelése 3 




🧩 1. Mi az a „custom field” a JIRA-ban?

A custom field (egyedi mező) minden olyan mező, amit nem a JIRA alapból hoz (pl. „Customer ID”, „Kockázati szint”, „Támogatási kategória”, stb.).

  • Ezek az adminisztrátor által létrehozott mezők.

  • API-n keresztül csak azonosítójukon keresztül (pl. customfield_10035) érhetők el.

  • A nevük (pl. „Ügyfélkód”) nincs garantáltan stabil, de az azonosító mindig stabil.


🔍 2. Összes elérhető mező lekérdezése

A JIRA REST API biztosít erre végpontot:

---python
fields = jira.fields() for field in fields: if field['custom']: print(f"{field['id']}: {field['name']} ({field['schema'].get('type')})")

🔁 Ez például kiírja:

---vbnet
customfield_10010: Customer ID (string) customfield_10011: Risk Level (option) customfield_10012: Target Resolution Date (date)

Tehát megtudod:

Kulcs (id)Címke (név)Típus
customfield_10010Customer IDstring
customfield_10011Risk Leveloption
customfield_10012Resolution Datedate

📤 3. Custom mezők lekérdezése egy issue-ból

Miután az id értéket ismered, például így kérheted le az adatot:

---python
issue = jira.issue("PROJ-123") customer_id = issue.fields.__dict__.get("customfield_10010", None) risk_level = issue.fields.__dict__.get("customfield_10011", None) print("Customer ID:", customer_id) print("Risk Level:", risk_level.value if risk_level else None)

Az option típusú mező (pl. "Risk Level") egy objektum, amely tartalmazhat value, id, stb.


📊 4. Milyen mezőtípusok létezhetnek?

A field['schema']["type"] mezőből kiderül. A leggyakoribbak:

TípusJelentés
stringSzöveg
numberSzám
dateDátum
datetimeIdőbélyeg
optionVálasztómező (dropdown)
userFelhasználó típusu mező
arrayTöbbértékű mező
projectProjekt típusú mező
issuetypeFeladattípus (pl. Bug, Story)
priorityPrioritás

A customfield_XXXX mezők gyakran tartalmaznak komplex típusokat – option, user, array, stb. Ezeknél .value, .name, vagy .displayName attribútumokra van szükség.


🧪 Példa: Custom mezők automatikus kigyűjtése egy issue-ból

---python
issue = jira.issue("PROJ-123") all_fields = issue.raw['fields'] custom_fields_data = {} for key, value in all_fields.items(): if key.startswith("customfield_"): val = value if isinstance(val, dict): val = val.get("value") or val.get("name") or str(val) elif isinstance(val, list): val = ", ".join(str(v.get("value", v)) for v in val) custom_fields_data[key] = val for cfid, cfval in custom_fields_data.items(): print(f"{cfid}: {cfval}")

📎 Ha nevet is akarsz: id → név megfeleltetés

---python
field_map = {field["id"]: field["name"] for field in jira.fields()} for cfid, cfval in custom_fields_data.items(): name = field_map.get(cfid, cfid) print(f"{name} ({cfid}): {cfval}")

✅ Összefoglalás

  1. jira.fields() → lekéri az összes mezőt, köztük a customokat is.

  2. A custom mezők customfield_XXXXX azonosítóval szerepelnek.

  3. A típusukat a .schema["type"] mutatja.

  4. Értékük elérése típusfüggő: .value, .name, .displayName, .get(), stb.


Mutatok egy jól strukturált Python függvény, amely:

lekérdezi egy adott issue összes custom mezőjét,
hozzáférhető név + érték párokat ad vissza,
automatikusan kezeli a típust (pl. dropdown, user, lista, dátum),
✅ és opcionálisan visszaadhatja dict-ként vagy pandas.DataFrame-ként.







📦 1. Függvény: get_custom_fields(issue)

---python
import pandas as pd
def get_custom_fields(issue, jira=None, as_dataframe=False): """ Egy issue összes custom mezőjének lekérdezése név + érték formában. Params: - issue: JIRA issue objektum (jira.issue(KEY)) - jira: JIRA API kapcsolat (ha neveket is kérsz) - as_dataframe: Ha True → pandas DataFrame-et ad vissza Returns: - dict vagy DataFrame: {mezőnév: érték} """ # Minden mező (raw JSON alapján) raw_fields = issue.raw.get('fields', {}) custom_fields = {k: v for k, v in raw_fields.items() if k.startswith("customfield_")} # Mezőnév ↔ azonosító hozzárendelés (csak ha kértük) field_names = {} if jira: all_fields = jira.fields() field_names = {f["id"]: f["name"] for f in all_fields} result = {} for cfid, value in custom_fields.items(): # Mező neve vagy azonosító name = field_names.get(cfid, cfid) # Érték kinyerés típustól függően if isinstance(value, dict): result[name] = value.get("value") or value.get("name") or str(value) elif isinstance(value, list): items = [] for item in value: if isinstance(item, dict): items.append(item.get("value") or item.get("name") or str(item)) else: items.append(str(item)) result[name] = ", ".join(items) else: result[name] = str(value) if value is not None else "" # Válasz típus if as_dataframe: return pd.DataFrame([result]) return result

✅ 2. Példahasználat

---python
issue = jira.issue("PROJ-123") # Dict formában custom_data = get_custom_fields(issue, jira=jira) print(custom_data) # DataFrame formában custom_df = get_custom_fields(issue, jira=jira, as_dataframe=True) custom_df.head()

📌 Példa kimenet

---python
{ 'Customer ID': 'X293847', 'Kockázati szint': 'Magas', 'Becsült árbevétel': '150000', 'Támogatási szint': 'Platina', 'Bevezetés dátuma': '2024-11-30' }

🧠 Tippek

  • A jira.fields() hívás sok adatot ad vissza → érdemes cache-elni, ha több issue-t dolgozol fel.

  • A customfield_XXXXX azonosító fix, tehát ha név nem fontos, gyorsabb a jira paraméter kihagyásával.








Megjegyzések