2013-04-17 10 views
13

ई 2e परीक्षण में ऑफ़साइट/आउट-ऑफ-एप/बाहरी-संसाधन वर्कफ़्लो को एकीकृत करने के लिए आप कर्म रनर (पूर्व-परीक्षण) e2e परिदृश्य धावक का उपयोग कैसे करते हैं?क्या कोणीय परिदृश्य e2e परीक्षण बाहरी संसाधन वर्कफ़्लो को एकीकृत कर सकते हैं

बेसिक परिदृश्य:

  1. अनुप्रयोग एक बटन है।
  2. सेवा प्रदाता एक्स को डेटा भेजने के लिए बटन क्लिक करें (उदाहरण के लिए http://service/submit या जो कुछ भी सबमिट करें)।
  3. प्रदाता एक्स को इस URL पर क्लिक/सबमिट/कार्रवाई की आवश्यकता है।
  4. प्रदाता एक्स फिर हमारे ऐप पर कुछ भेजता है।

मैं नहीं पूछ रहा हूं "आप प्रदाता एक्स कैसे लगाते हैं"। मैं पूछ रहा हूं कि आप वास्तव में अंत-से-अंत परीक्षण कैसे करते हैं - इसलिए हमारे परीक्षण वास्तव में तृतीय-पक्ष सेवा API को तोड़ने वाले परिवर्तनों को पकड़ सकते हैं। मैं मूल रूप से Selenium's Webdriver जैसे कुछ के साथ कैसे सक्षम हूं, इस तरह से बाहर की ऐप वेबसाइट चलाने में सक्षम होना चाहता हूं।

वर्तमान में मेरी समस्या चरण 2 का प्रयास करने के लिए element(ref).click() का उपयोग कर रही है, ऐसा नहीं लगता है कि यह कभी भी आवश्यक साइट लोड करता है, इसलिए कोई DOM कार्य करने के लिए, e2e को पूरा करने का कोई तरीका नहीं है।

उत्तर

17

कर्म के साथ इस परिदृश्य को निष्पादित करना संभव नहीं हो सकता है। मैं अपनी समझ दूंगा कि कर्म कैसे काम करता है, यह वेबड्राइवर से कैसे तुलना करता है, और इस परिदृश्य को लागू करने के लिए क्या आवश्यक होगा।

सबसे पहले, यह ध्यान रखना महत्वपूर्ण है कि कर्म और कोणीय-परिदृश्य एक ही बात नहीं है। ब्राउज़र ब्राउज़र आधारित परीक्षण चलाने के लिए कर्म एक सामान्य खोल है। यह ब्राउज़र प्रक्रियाओं को लॉन्च करता है, टेस्ट हार्नेस युक्त वेब पेज की सेवा करने के लिए नोड शुरू करता है, वेबसाकेट पर कमांड भेजकर परीक्षण चलाता है, और फिर परिणाम एकत्र करता है। यह परीक्षणों को चलाने वाले वास्तविक दोहन/ढांचे के संबंध में अज्ञेयवादी है। इसमें कोणीय परिदृश्य धावक (कोणीय ई 2 टे परीक्षणों के लिए उपयोग किया जाता है) के लिए एडेप्टर हैं, जैस्मीन (आमतौर पर कोणीय इकाई परीक्षणों के लिए उपयोग किया जाता है) और अन्य लोकप्रिय जावास्क्रिप्ट परीक्षण ढांचे।

टेस्ट धावक जैसे जैस्मीन परीक्षण के तहत कोड के समान विंडो संदर्भ में निष्पादित करते हैं, यही कारण है कि यह यूनिट परीक्षणों के लिए उपयोगी है। इसके विपरीत, कोणीय परिदृश्य धावक के पास परीक्षण के तहत सिस्टम के लिए एक हथियार-लंबाई संबंध है। यह पूरे एप्लिकेशन को आईफ्रेम में लोड करता है, और उसके बाद अधिकांश भाग उपयोगकर्ता घटनाओं को अनुकरण करता है और स्पष्ट रूप से उजागर डीओएम तत्वों पर परीक्षणों का परीक्षण करता है।

क्योंकि परिदृश्य धावक एक आईफ्रेम सीमा में एप्लिकेशन के साथ इंटरैक्ट करता है, यह ब्राउज़र की समान डोमेन नीति से बाधित है। http://localhost:8000 पर परिदृश्य धावक की सेवा करना संभव नहीं होगा, फिर iframe में http://yourapp लोड करें, और फिर उस iframe के अंदर ईवेंट ट्रिगर करें।

इसके आस-पास एक तरीका यह है कि अपने एप्लिकेशन के समान सर्वर पर परिदृश्य धावक को होस्ट करना है।

http://plnkr.co/edit/rfqpSq?p=preview

आवेदन में एक परीक्षण धावक Cramming नहीं है बहुत संतोषजनक है, हालांकि: यहाँ इस बात का एक सरल उदाहरण है। कर्म आपको अंतर्निहित HTTP प्रॉक्सी के साथ इस तरह का एक तरीका देता है। आप किसी भी सर्वर के प्रॉक्सी को प्रॉक्सी करने के लिए कर्म को कॉन्फ़िगर कर सकते हैं ताकि वे सभी एक ही उत्पत्ति से उत्पन्न हो सकें।बस उन्हें विन्यास फाइल की proxies अनुभाग में जोड़ें:

proxies = { 
    '/': 'http://yourapp/', 
    '/service/': 'http://service/' 
} 

इस पार डोमेन के साथ अपने E2E परीक्षण की अनुमति देता है, लेकिन पकड़ है कि जब डोमेन का स्थानांतरण एक फ़ॉर्म सबमिशन के ज़रिये होती है या पुन: निर्देशित है, यह करने के लिए है प्रॉक्सी यूआरएल पर जाएं। अन्यथा परिदृश्य धावक आईफ्रेम का नियंत्रण खो देगा और परीक्षण जारी रखने में सक्षम नहीं होगा।

ध्यान दें कि सेलेनियम वेबड्राइवर में यह सीमा नहीं है। यह से ऊपर एक व्यक्तिगत ब्राउज़र विंडो का स्तर संचालित करता है, इसलिए यह उसी डोमेन नीति से बाधित नहीं है।

तो चलिए अपने विशिष्ट परिदृश्य को देखें।

  1. से http://yoursite/yourapp.html
  2. उपयोगकर्ता अपने आवेदन लोड फार्म का है कि तरह लग रहा है प्रस्तुत:
<form method="POST" action="http://service/remotesubmission"> 
    ...your form... 
    <input type="submit"> 
</form> 
वास्तविक HTTP अनुरोध और प्रतिक्रियाओं के संदर्भ में, मैं इस संभालने हूँ प्रवाह है कि आप व्यायाम करने के लिए चाहते हैं
  1. प्रदाता एक्स दूरस्थ पोस्ट संभालती है और फिर कम से एक फार्म पर रीडायरेक्ट:
<form method="POST" action="http://service/nextsubmission"> 
    ...provider's form... 
    <input type="submit"> 
</form> 
  1. प्रदाता एक्स हैंडल फॉर्म हैंडल करता है और फिर आपके एप पर रीडायरेक्ट करता है।

इस वास्तविक परिदृश्य है, तो मुझे लगता है कि एक ही रास्ता आप कर सकते कर्मा और कोणीय परिदृश्य धावक के साथ इस काम किया जाएगा करने के लिए:

  1. Conditionalize अपने रूप में कार्रवाई URL को इस प्रकार यह परीक्षण के दौरान बाहरी सेवा के लिए प्रॉक्सी यूआरएल को इंगित करता है।
  2. सुनिश्चित करें कि प्रदाता के प्रवाह में रीडायरेक्ट और एक्शन यूआरएल प्रॉक्सी पथों के भीतर रहें। मुझे नहीं लगता कि यह वर्तमान में संभव है, लेकिन संभवतः प्रॉक्स सामग्री के लिए प्रतिस्थापन पैटर्न स्थापित करने के लिए कर्म को पैच करना संभव होगा।
+0

ग्रेट उत्तर कार्ल, धन्यवाद। हम इसी तरह के निष्कर्ष पर आए, और उम्मीद कर रहे थे कि एक आसान विकल्प था। यह एक या दो दिन खुला होगा, और अन्यथा यह जवाब स्वीकार करेगा। – papercowboy

संबंधित मुद्दे