2017-06-04 6 views
6

पर जोर दें मैं पाइथन 3.6.1 के साथ सेलेनियम 3.4.0 के साथ काम कर रहा हूं। मैंने पाइथन दस्तावेज के बाद unittest मॉड्यूल के माध्यम से एक स्क्रिप्ट लिखी है जो कि जावा 8 प्रो मशीन, 64 बिट ओएस, एक्स -64 प्रोसेसर पर geckodriver 0.16.1 और मोज़िला फ़ायरफ़ॉक्स 57.0 का उपयोग कर जावा के JUnit पर आधारित एक अंतर्निहित पायथन है।सेलेनियम 3.4.0-पायथन 3.6.1: सेलेनियम-पायथन में अनइंस्टेट का उपयोग करके बाध्यकारी कैसे मैं तय करता हूं कि self.assertIn का उपयोग कब करें या

def test_search_in_python_org(self): 
     driver = self.driver 
     driver.get("http://www.python.org") 
     self.assertIn("Python", driver.title) 
     elem = driver.find_element_by_name("q") 
     elem.send_keys("pycon") 
     elem.send_keys(Keys.RETURN) 
     assert "No results found." not in driver.page_source 

जब मैं "पृष्ठ का शीर्षक" जोर देते हुए हूँ मैं उपयोग कर रहा हूँ: self.assertIn("Python", driver.title)

लेकिन, जब मैं एक स्ट्रिंग जोर देते हुए कर रहा हूँ (मेरी धारणा मेरी परीक्षा पद्धति test_search_in_python_org() में मैं निम्नलिखित लाइनों जो अच्छी तरह से काम करता है), पृष्ठ स्रोत के भीतर मैं उपयोग कर रहा हूं: assert "No results found." not in driver.page_source

मेरा प्रश्न यह है कि मुझे क्या लगता है कि मुझे self.assertIn या assert का उपयोग करना चाहिए या नहीं?

कोई सुझाव या पॉइंटर्स सहायक होंगे।

+0

जांचें [यह] (https://stackoverflow.com/questions/2958169/what-are-the-advantages-or-difference-in-assert-false-and-self-assertfalse) प्रश्न – Andersson

उत्तर

5

पायथन unittestdocumentation पर देखकर और Django unittests के समूह से भी याद करते हुए कि मुझे एक बार यहां करना पड़ा, मेरे निष्कर्ष हैं।

उपयोग के मामले:

सबसे पहले बात यह है कि सबसे सरल बात और मेरी राय में दोनों के बीच सबसे बड़ा अंतर है, ऐसे मामलों में जहां आप प्रत्येक आदेश का उपयोग कर सकते हैं। वे टेस्ट क्लास के मामले में एक दूसरे के लिए उपयोग करने योग्य हैं, हालांकि, assertIn कमांड का उपयोग करने के लिए, आपको सबसे अजीब लाइब्रेरी आयात करने की आवश्यकता है। तो, मुझे लगता है कि मैं जानना चाहता हूं कि hhello में है या नहीं। assertIn आदेश के माध्यम से यह करने के लिए एक आसान तरीका है:

class MyTestCase(unittest.TestCase): 
    def is_h_in_hello(self): 
     self.assertIn("h", "hello") 

और उसके बाद मैं परीक्षण चलाने के लिए की जरूरत है, कि इस उदाहरण में unittest.main() के माध्यम से है, ताकि मेरा उत्तर प्राप्त करने के लिए। लेकिन assert कमांड का उपयोग करके, यह देखना आसान है कि hhello में है या नहीं। जो बहुत आसानी से किया जाता है:

assert "h" in "hello" 

लेकिन अनिवार्य रूप से, दोनों मुझे एक ही जवाब देंगे। हालांकि, दूसरी विधि में उपयोग की सादगी दो विधियों में क्या अंतर है।

परिणाम:

दूसरा अंतर मैंने पाया अजगर शैल पर परिणामों की पठनीयता था। unittest लाइब्रेरी डिज़ाइन की गई है ताकि आदेश बहुत विशिष्ट हो। तो यदि कोई परीक्षण विफल हो जाता है, तो आपको एक बहुत स्पष्ट संदेश प्राप्त होगा कि क्या गलत हुआ। अब कहें कि आप देखना चाहते हैं कि bhello में है या नहीं। वर्ग विधि (बस "b" को "h" बदलना) के माध्यम से यह कर, संदेश हम परीक्षण चलाने के बाद मिलता है:

AssertionError: 'b' not found in 'hello' 

---------------------------------------------------------------------- 
Ran 1 test in 0.038s 

FAILED (failures=1) 

इसलिए यह बहुत स्पष्ट रूप से आपको बताता है: 'b' not found in 'hello' है, जो यह देखने के लिए बहुत सुविधाजनक एकदम वही है जिसे बनाता है समस्या। लेकिन कहें कि आप assert कमांड के माध्यम से एक ही प्रक्रिया करते हैं।

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    assert "b" in "hello" 
AssertionError 

हालांकि यह आप त्रुटि प्रकार (AssertionError), और ट्रैस बैक बताता है, यह विशेष रूप से आपको लगता है कि "b" is NOT in "hello" नहीं बताता है: त्रुटि उत्पन्न संदेश कुछ की तरह है। इस साधारण मामले में, ट्रेसबैक को देखना बहुत आसान है और कहें, हेल्लो में कोई बी नहीं है! हालांकि अधिक जटिल मामलों में, यह देखना मुश्किल हो सकता है कि यह त्रुटि संदेश क्यों उत्पन्न हुआ था।

कुल मिलाकर, दो विधियां बहुत समान हैं और आपको वह परिणाम मिल जाएगा जो आपको चाहिए, लेकिन अनिवार्य रूप से यह यहां और वहां छोटे अंतरों के नीचे आता है, जिसमें कोड की कम लाइनें होती हैं और शैल संदेश कितनी सीधे आगे बढ़ते हैं।

+1

धन्यवाद बहुत कुछ विवरण। – DebanjanB

0

मेरी राय में, जोर अजगर जो कार्यक्रम की आंतरिक स्थिति बताता है में निर्मित कीवर्ड है। दूसरे शब्दों में, जोरदार कीवर्ड के साथ, आप अपने कोड व्यवहार को बता सकते हैं। आपके मामले में, आपको टेस्टकेस में जोर नहीं देना चाहिए।

+0

मेरा मतलब है, जब आप टेस्ट उपयोग self.assert लिख रहे हैं, अन्यथा जोर से उपयोग करें – Erdenezul

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

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