Flutter
flutter pub add dev:tracera_flutter
Dart ≥ 3.8 और Flutter ≥ 3.24 आवश्यक (ऑटोटेस्ट एडेप्टर देखें)। tracera_flutter pub.dev पर।
एनवायरनमेंट वेरिएबल और रन मोड: ऑटोटेस्ट एडेप्टर।
main फ़ंक्शन की शुरुआत में या flutter_test_config.dart में installTracera() एक बार कॉल करें। मानक flutter_test और integration_test इम्पोर्ट बनाए रखें; केवल installTracera, स्क्रीनशॉट फ़ंक्शन और tracera कॉल जोड़ें:
import 'package:flutter_test/flutter_test.dart';
import 'package:tracera/tracera.dart' as tracera;
import 'package:tracera_flutter/tracera_flutter.dart';
void main() {
installTracera();
testWidgets('user can sign in', (tester) async {
await tracera.step('pump login', () async {
await tester.pumpWidget(/* ... */);
});
}, tags: ['tracera-id-42']);
}
testCaseId और autotestName बाँधना
testWidgets, test या group में टैग tracera-id-‹id› जोड़ें। autotestName सेट करने के लिए tracera-name-‹name› जोड़ें। नाम वाले टैग में स्पेस नहीं हो सकता; स्पेस वाला नाम चाहिए तो टेस्ट के अंदर tracera.testCase से बाँधें। नाम टैग न दिया हो, तो autotestName में Flutter का टेस्ट नाम आता है।
testWidgets('user can sign in', (tester) async {
// ...
}, tags: ['tracera-id-42', 'tracera-name-e2e_sign_in']);
testWidgets('user can sign out', (tester) async {
tracera.testCase(43, 'e2e/sign out');
});
अपरिभाषित टैग की चेतावनियाँ हटाने के लिए Tracera टैग dart_test.yaml के tags: में सूचीबद्ध करें।
Skip
टेस्ट के अंदर markTestSkipped('reason') कॉल करें। परिणाम Skipped के रूप में रिपोर्ट होता है, और कारण परिणाम में comment के रूप में जुड़ता है।
testWidgets('checkout', (tester) async {
markTestSkipped('needs a seeded account');
}, tags: ['tracera-id-42']);
testWidgets या group पर skip: रिपोर्ट में शामिल नहीं होता।
स्टेप्स
tracera.step('…', () { … }) उपयोग करें। setUp कॉलबैक परिणाम के सेटअप में, टेस्ट बॉडी टेस्ट में और tearDown कॉलबैक टीयरडाउन में जाता है। setUpAll / tearDownAll के अंदर के स्टेप रिपोर्ट में शामिल नहीं होते।
setUp(() {
tracera.step('open shop', () {});
});
testWidgets('checkout', (tester) async {
tracera.testCase(10);
await tracera.step('add item', () async {
await tester.pumpWidget(/* ... */);
tracera.step('nested leaf', () {});
});
});
tearDown(() {
tracera.step('close shop', () {});
});
कमेंट, एरर और अटैचमेंट
सीमाएँ और अनुमत MIME प्रकार: ऑटोटेस्ट एडेप्टर।
tracera.comment, tracera.error और अटैचमेंट खुले स्टेप में जुड़ते हैं, और कोई स्टेप खुला न हो तो परिणाम में। tracera.attachmentFile फ़ाइल पथ लेता है; tracera.attachmentBytes नाम और बाइट्स लेता है, साथ में वैकल्पिक mimeType। अटैचमेंट परिणाम रिपोर्ट होने पर अपलोड होते हैं।
tracera.comment('result-level note');
tracera.error('result-level error');
tracera.attachmentFile('test/fixtures/screenshot.png');
tracera.step('open login', () {
tracera.comment('step note');
tracera.attachmentBytes(
'body.json',
utf8.encode('{"ok":true}'),
mimeType: 'application/json',
);
});
स्क्रीनशॉट
स्क्रीनशॉट PNG अटैचमेंट हैं — कैप्चर से या आपके दिए बाइट्स से।
attachScreenshot(tester)विजेट टेस्ट में पहलाRepaintBoundaryकैप्चर करता है।attachScreenshotBytes(bytes)आपके पास पहले से मौजूद PNG बाइट्स जोड़ता है।attachIntegrationScreenshot(name: 'checkout')integration_testमें डिवाइस का स्क्रीनशॉट लेता है।
testWidgets('checkout', (tester) async {
await tester.pumpWidget(const RepaintBoundary(child: CheckoutPage()));
await attachScreenshot(tester, fileName: 'checkout.png');
});
पैरामीटराइज़्ड टेस्ट
लूप में हर पंक्ति के लिए एक testWidgets बनाएँ। नाम न दिया हो, तो autotestName में टेस्ट नाम आता है, इसलिए हर पंक्ति को अलग शीर्षक दें। हर पंक्ति के लिए नाम तय करना हो तो उसे tracera.testCase में दें:
for (final login in ['alice', 'bob']) {
testWidgets('sign in as $login', (tester) async {
tracera.testCase(7, 'login as $login');
});
}
टेस्ट दोबारा चलने पर केवल अंतिम प्रयास रिपोर्ट होता है। तब परिणाम के Env टैब में FLUTTER_RETRY जुड़ता है (ऑटोटेस्ट एडेप्टर देखें)।