


Tunjukkan Metadata dalam Laporan HTML Penulis Drama: Panduan Lengkap
Dec 30, 2024 pm 09:13 PMPenulis drama ialah rangka kerja ujian yang berkuasa, tetapi laporan HTMLnya boleh berasa kosong untuk projek yang rumit. Bukankah bagus untuk memaparkan metadata seperti komit mesej, butiran pengarang atau pautan kepada binaan CI terus dalam pengepala laporan? Begini cara untuk mencapainya dan beberapa pandangan yang lebih mendalam tentang keupayaan Playwright.
Memahami Metadata Penulis Drama
Dokumentasi Playwright menyebut medan metadata untuk konfigurasi:
import { defineConfig } from '@playwright/test'; export default defineConfig({ metadata: 'acceptance tests', });
Pada masa penulisan (Penulis Drama v1.49), ia menyatakan:
Metadata yang akan dimasukkan terus ke dalam laporan ujian yang disiri sebagai JSON
Tetapi ada tangkapan: menambah konfigurasi ini tidak akan menunjukkan sebarang metadata dalam laporan. Jika anda menggunakan TypeScript, anda juga akan melihat ralat untuk contoh yang diberikan:
Taip 'rentetan' tidak boleh diberikan untuk menaip 'Metadata'.
Jelas sekali, dokumentasi itu sudah lapuk, tetapi metadata dalam laporan sememangnya boleh dilakukan.
Konfigurasi Metadata Sebenar
Selepas menyelami kod sumber Playwright, saya menemui medan sebenar yang disokong oleh laporan HTML:
export type Metainfo = { 'revision.id'?: string; 'revision.author'?: string; 'revision.email'?: string; 'revision.subject'?: string; 'revision.timestamp'?: number | Date; 'revision.link'?: string; 'ci.link'?: string; 'timestamp'?: number; };
Hanya medan ini boleh dipaparkan. Mari konfigurasikannya dalam playwright.config.ts:
import { defineConfig } from '@playwright/test'; export default defineConfig({ reporter: 'html', metadata: { 'revision.id': 'adcb0c51debdbe96a6a836e2ead9d40a859f6438', 'revision.author': 'John Smith', 'revision.email': 'john.smith@gmail.com', 'revision.subject': 'Acceptance tests', 'revision.timestamp': Date.now(), 'revision.link': 'https://github.com/microsoft/playwright/pull/12734', 'ci.link': 'https://github.com/microsoft/playwright/actions/workflows/tests_primary.yml', 'timestamp': Date.now(), }, });
Selepas menjalankan ujian, pengepala laporan HTML memaparkan metadata ini dengan cantik.
Mengautomasikan Populasi Metadata
Mengisi medan metadata secara manual tidak praktikal, terutamanya dalam persekitaran dinamik seperti saluran paip CI/CD. Mengautomasikan proses ini memastikan metadata yang tepat dan konsisten tanpa usaha manual.
Pakej Pihak Ketiga
Untuk mengautomasikan proses, anda boleh menggunakan mana-mana pakej pihak ketiga yang mengekstrak maklumat komit Git. Ini adalah pendekatan yang mudah, mari kita teruskan ke pilihan kedua yang lebih menarik.
Memanfaatkan Sistem Pemalam Tersembunyi Penulis Drama
Salah satu penemuan paling menarik tentang Playwright ialah sistem pemalam tersembunyinya. Walaupun tidak didokumenkan secara rasmi, ia menyediakan cara untuk melanjutkan keupayaan Playwright melalui pemalam tersuai.
Saya mendapat cerapan ini sambil melihat sebagai ujian Penulis Drama itu sendiri. Penulis drama menyokong medan konfigurasi tersembunyi "@playwright/test", di mana anda boleh menentukan pemalam.
Berikut ialah contoh mendayakan pemalam gitCommitInfo:
import { defineConfig } from '@playwright/test'; import { gitCommitInfo } from 'playwright/lib/plugins'; export default defineConfig({ reporter: 'html', // @ts-expect-error '@playwright/test': { plugins: [gitCommitInfo()] }, });
Apakah yang dilakukan oleh Plugin gitCommitInfo?
Pemalam ini mengekstrak butiran komit Git dan mengisi medan metadata dalam laporan HTML, termasuk:
- Komit cincang
- Komit mesej
- Nama pengarang dan e-mel
- Cap masa
Selain itu, apabila dijalankan dalam persekitaran CI/CD, pemalam boleh mengisi medan secara automatik menggunakan pembolehubah persekitaran standard seperti GITHUB_SHA atau CI_COMMIT_SHA.
Selepas mendayakan pemalam dan menjalankan ujian, saya mendapat laporan berikut dengan metadata diisi secara automatik:
Pemalam Lain
Saya ingin tahu, adakah terdapat sebarang pemalam tersembunyi lain dalam Playwright?
Dalam direktori pemalam hanya terdapat satu lagi pemalam - webServerPlugin. Ia membolehkan untuk memulakan dan menghentikan pelayan web terbina dalam semasa menjalankan ujian. Malah, apabila anda menentukan pilihan config.webServer, pemalam ini digunakan di bawah hud. Jadi sistem Plugin digunakan secara dalaman dalam Playwright, walaupun tidak didokumenkan untuk kegunaan awam.
Sistem pemalam telah diperkenalkan dalam versi Playwright yang lebih awal, tetapi telah disembunyikan pada satu ketika. Malangnya, tiada rancangan untuk mendedahkannya setakat ini.
Menggunakan Fungsi Tersuai untuk Metadata
Jika anda lebih suka autoisi metadata tanpa bergantung pada pemalam, anda boleh melakukannya dengan fungsi tersuai. Saya telah menyesuaikan fungsi gitStatusFromCLI() daripada pemalam gitCommitInfo, menjadikannya boleh digunakan secara bebas:
import { defineConfig } from '@playwright/test'; export default defineConfig({ metadata: 'acceptance tests', });
Penggunaan fungsi untuk mengisi metadata dalam konfigurasi Playwright:
export type Metainfo = { 'revision.id'?: string; 'revision.author'?: string; 'revision.email'?: string; 'revision.subject'?: string; 'revision.timestamp'?: number | Date; 'revision.link'?: string; 'ci.link'?: string; 'timestamp'?: number; };
Selepas menjalankan ujian, saya mendapat laporan HTML yang sama dengan metadata yang diisi:
Pendekatan ini memberi anda kawalan penuh ke atas automasi metadata tanpa bergantung pada ciri Playwright dalaman.
Mengoptimumkan untuk Ujian Selari
Semuanya kelihatan baik, tetapi terdapat masalah prestasi dengan kod di atas. Boleh teka apa masalahnya?
Penulis drama menjalankan ujian dalam pekerja. Apabila setiap pekerja bermula, ia mengimport konfigurasi Playwright. Jika konfigurasi Playwright melakukan operasi yang berat (seperti mengambil data Git), ia akan memperlahankan pekerja. Lebih-lebih lagi, tidak ada gunanya untuk melaksanakan arahan berkali-kali, kerana ia akan mengembalikan hasil yang sama.
Anda boleh mengoptimumkannya dengan melaksanakan fungsi metadata hanya dalam pekerja utama. Pekerja utama boleh dikesan oleh pembolehubah env TEST_WORKER_INDEX kosong:
import { defineConfig } from '@playwright/test'; export default defineConfig({ reporter: 'html', metadata: { 'revision.id': 'adcb0c51debdbe96a6a836e2ead9d40a859f6438', 'revision.author': 'John Smith', 'revision.email': 'john.smith@gmail.com', 'revision.subject': 'Acceptance tests', 'revision.timestamp': Date.now(), 'revision.link': 'https://github.com/microsoft/playwright/pull/12734', 'ci.link': 'https://github.com/microsoft/playwright/actions/workflows/tests_primary.yml', 'timestamp': Date.now(), }, });
Ini memastikan metadata diisi dengan cekap tanpa menjejaskan prestasi.
Kesimpulan
Menambah metadata pada laporan HTML Playwright boleh dilakukan, walaupun tidak didokumentasikan dengan baik. Anda boleh mengkonfigurasi metadata secara manual, memanfaatkan sistem pemalam tersembunyi atau melaksanakan penyelesaian tersuai.
Pengambilan Utama:
- Medan metadata terhad kepada kunci tertentu (revision.id, ci.link, dll.).
- Automasikan metadata dengan pemalam tersembunyi Playwright atau skrip tersuai.
- Optimumkan untuk ujian selari dengan melaksanakan logik metadata hanya dalam pekerja utama.
Berdasarkan penyelidikan untuk artikel itu, saya telah membuka permintaan tarik kepada repo Penulis Drama, mencadangkan penambahbaikan dokumentasi untuk medan metadata.
Adakah anda cuba menambahkan metadata pada laporan Playwright? Kongsi pengalaman atau cabaran anda dalam ulasan!
Atas ialah kandungan terperinci Tunjukkan Metadata dalam Laporan HTML Penulis Drama: Panduan Lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Mekanisme pengumpulan sampah JavaScript secara automatik menguruskan memori melalui algoritma pembersihan tag untuk mengurangkan risiko kebocoran ingatan. Enjin melintasi dan menandakan objek aktif dari objek akar, dan tidak bertanda dianggap sebagai sampah dan dibersihkan. Sebagai contoh, apabila objek tidak lagi dirujuk (seperti menetapkan pembolehubah kepada null), ia akan dikeluarkan dalam pusingan seterusnya kitar semula. Punca kebocoran memori yang biasa termasuk: ① Pemasa atau pendengar peristiwa yang tidak jelas; ② Rujukan kepada pembolehubah luaran dalam penutupan; ③ Pembolehubah global terus memegang sejumlah besar data. Enjin V8 mengoptimumkan kecekapan kitar semula melalui strategi seperti kitar semula generasi, penandaan tambahan, kitar semula selari/serentak, dan mengurangkan masa menyekat benang utama. Semasa pembangunan, rujukan global yang tidak perlu harus dielakkan dan persatuan objek harus dihiasi dengan segera untuk meningkatkan prestasi dan kestabilan.

Terdapat tiga cara biasa untuk memulakan permintaan HTTP dalam node.js: Gunakan modul terbina dalam, axios, dan nod-fetch. 1. Gunakan modul HTTP/HTTPS terbina dalam tanpa kebergantungan, yang sesuai untuk senario asas, tetapi memerlukan pemprosesan manual jahitan data dan pemantauan ralat, seperti menggunakan https.get () untuk mendapatkan data atau menghantar permintaan pos melalui .write (); 2.AXIOS adalah perpustakaan pihak ketiga berdasarkan janji. Ia mempunyai sintaks ringkas dan fungsi yang kuat, menyokong async/menunggu, penukaran JSON automatik, pemintas, dan lain -lain. Adalah disyorkan untuk memudahkan operasi permintaan tak segerak; 3.Node-Fetch menyediakan gaya yang serupa dengan pengambilan penyemak imbas, berdasarkan janji dan sintaks mudah

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

Helo, pemaju JavaScript! Selamat datang ke berita JavaScript minggu ini! Minggu ini kami akan memberi tumpuan kepada: Pertikaian tanda dagangan Oracle dengan Deno, objek masa JavaScript baru disokong oleh pelayar, kemas kini Google Chrome, dan beberapa alat pemaju yang kuat. Mari mulakan! Pertikaian tanda dagangan Oracle dengan percubaan Deno Oracle untuk mendaftarkan tanda dagangan "JavaScript" telah menyebabkan kontroversi. Ryan Dahl, pencipta Node.js dan Deno, telah memfailkan petisyen untuk membatalkan tanda dagangan, dan dia percaya bahawa JavaScript adalah standard terbuka dan tidak boleh digunakan oleh Oracle

Rangka kerja JavaScript mana yang terbaik? Jawapannya ialah memilih yang paling sesuai mengikut keperluan anda. 1. REACT adalah fleksibel dan bebas, sesuai untuk projek sederhana dan besar yang memerlukan penyesuaian tinggi dan keupayaan seni bina pasukan; 2. Angular menyediakan penyelesaian lengkap, sesuai untuk aplikasi peringkat perusahaan dan penyelenggaraan jangka panjang; 3. Vue mudah digunakan, sesuai untuk projek kecil dan sederhana atau perkembangan pesat. Di samping itu, sama ada terdapat timbunan teknologi sedia ada, saiz pasukan, kitaran hayat projek dan sama ada SSR diperlukan juga faktor penting dalam memilih rangka kerja. Singkatnya, tidak ada kerangka terbaik, pilihan terbaik adalah yang sesuai dengan keperluan anda.

IIFE (Segera Dilanjutkan FunctionExpression) adalah ekspresi fungsi yang dilaksanakan dengan segera selepas definisi, digunakan untuk mengasingkan pembolehubah dan mengelakkan mencemarkan skop global. Ia dipanggil dengan membungkus fungsi dalam kurungan untuk menjadikannya ungkapan dan sepasang kurungan segera diikuti olehnya, seperti (fungsi () {/code/}) ();. Penggunaan terasnya termasuk: 1. Elakkan konflik berubah -ubah dan mencegah pertindihan penamaan antara skrip berganda; 2. Buat skop peribadi untuk menjadikan pembolehubah dalaman tidak kelihatan; 3. Kod modular untuk memudahkan permulaan tanpa mendedahkan terlalu banyak pembolehubah. Kaedah penulisan biasa termasuk versi yang diluluskan dengan parameter dan versi fungsi anak panah ES6, tetapi perhatikan bahawa ungkapan dan ikatan mesti digunakan.

Janji adalah mekanisme teras untuk mengendalikan operasi tak segerak dalam JavaScript. Memahami panggilan rantaian, pengendalian ralat dan gabungan adalah kunci untuk menguasai aplikasi mereka. 1. Panggilan rantai mengembalikan janji baru melalui .then () untuk merealisasikan persamaan proses tak segerak. Setiap .then () menerima hasil sebelumnya dan boleh mengembalikan nilai atau janji; 2. Pengendalian ralat harus menggunakan .catch () untuk menangkap pengecualian untuk mengelakkan kegagalan senyap, dan boleh mengembalikan nilai lalai dalam tangkapan untuk meneruskan proses; 3. Gabungan seperti janji.all () (berjaya hanya berjaya selepas semua kejayaan), janji.race () (penyempurnaan pertama dikembalikan) dan janji.allsettled () (menunggu semua penyelesaian)

CACHEAPI adalah alat yang disediakan oleh penyemak imbas kepada permintaan rangkaian cache, yang sering digunakan bersempena dengan ServiceWorker untuk meningkatkan prestasi laman web dan pengalaman luar talian. 1. Ia membolehkan pemaju menyimpan sumber secara manual seperti skrip, helaian gaya, gambar, dan lain -lain; 2. Ia boleh memadankan tindak balas cache mengikut permintaan; 3. Ia menyokong memotong cache tertentu atau membersihkan seluruh cache; 4. Ia boleh melaksanakan keutamaan cache atau strategi keutamaan rangkaian melalui perkhidmatan pekerja yang mendengar acara mengambil; 5. Ia sering digunakan untuk sokongan luar talian, mempercepat kelajuan akses berulang, sumber utama dan kandungan kemas kini latar belakang; 6. Apabila menggunakannya, anda perlu memberi perhatian kepada kawalan versi cache, sekatan penyimpanan dan perbezaan dari mekanisme caching HTTP.
