2017-06-04 123 views
6

ne zaman kullanılacağına nasıl karar verebilirim Selenium 3.4.0 ile Python 3.6.1 ile çalışıyorum. Gytodriver 0.16.1 ve Windows 8 Pro makinede Mozilla Firefox 57.0, 64 bit işletim sistemi, x-64 işlemci kullanan, Java'nın JUnit'u temel alan bir Python olan unittest modülü aracılığıyla Python belgelerini takip eden bir senaryo yazdım. (Benim varsayım ben bir dize iddia ediyorum zaman self.assertIn("Python", driver.title)Selenium3.4.0-Python3.6.1: Selenium-Python bağlayıcılığında en doğru değeri kullanarak self.assertIn veya assert

Ama:

ben "sayfa başlığını" iddia ediyorum
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 

kullanıyorum: benim test yönteminde test_search_in_python_org() ben iyi çalışıyor şu satırları), sayfa kaynağında içinde kullanıyorum: assert "No results found." not in driver.page_source

Benim sorum nelerdir ben self.assertIn veya sadece assert kullanmalıdır karar verir faktörler/koşullar?

Herhangi bir öneri veya işaretçi size yardımcı olacaktır.

+0

[this] (https://stackoverflow.com/questions/2958169/what-are-the-advantages-or-difference-in-assert-false-and-self-assertfalse) soru – Andersson

cevap

5

Python unittestdocumentation'a baktığımda ve bir zamanlar burada yapmak zorunda olduğum Django unitestlerinden oluşan bir gruptan bahsetmek benim bulgularımdır.

KULLANIM DURUM: En basit bir şey ve bence ikisi arasındaki en büyük fark

ilk şey, her komutunu kullanabilirsiniz kasadır. Her ikisi de bir test sınıfı durumunda birbirinin yerine kullanılabilir durumdadır, ancak assertIn komutunu kullanmak için, en uygun kütüphaneyi içe aktarmanız gerekir. Yani, h'un hello adresinde olup olmadığını öğrenmek istiyorum.

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

ve sonra daha da benim cevap almak için, bu örnekte unittest.main() geçer, testler yapmalıyız: assertIn komutu aracılığıyla bunu yapmak için basit bir yoludur. Ancak assert komutunu kullanarak, h'un hello içinde olup olmadığını görmek çok daha kolaydır. Çok basitçe şu şekilde yapılır:

Temel olarak, her ikisi de bana aynı cevabı verecektir. Bununla birlikte, iki yöntemi ayırt eden, ikinci yöntemde kullanım kolaylığıdır.

BULGULAR: buldum

ikinci fark Python Shell sonuçların okunabilirliği oldu. unittest kütüphanesi, komutların çok spesifik olması için tasarlanmıştır. Yani bir test başarısız olursa, neyin yanlış gittiğini söyleyen çok net bir mesaj alacaksınız. b'un hello'da olup olmadığını görmek istediğinizi şimdi söyle. sınıf yöntemi (sadece "b" için "h" değiştirme) aracılığıyla yapıyor, biz testi çalıştırdıktan sonra elde mesajdır: çok uygun tam olarak ne olduğunu görmek için yapar 'b' not found in 'hello':

AssertionError: 'b' not found in 'hello' 

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

FAILED (failures=1) 

yüzden çok net anlatır

sorun. Ama aynı işlemi assert komutu ile yaptığınızı varsayalım.size hata türünü ( AssertionError) ve Traceback söyler rağmen, özellikle "b" is NOT in "hello" olduğunu söylemez

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

: Oluşturulan hata mesajı şey gibidir. Bu basit durumda, tracetaya bakmak ve demek ki merhaba, hayır merhaba! Ancak daha karmaşık durumlarda, bu hata mesajının neden oluştuğunu anlamak zor olabilir.

Genel olarak, iki yöntem çok benzerdir ve istediğiniz sonucu elde eder, ancak aslında burada ve orada daha az satır kodları ve Kabuk iletilerinin ne kadar düz iletime sahip olduğu küçük farklara gelir.

+1

için teşekkürler. Ayrıntılar. – DebanjanB

0

Kanıt bence, dahili program anahtar kelimesini anlatan python'da yerleşik anahtar sözcüktür. Başka bir deyişle, iddialı anahtar kelimeyle kod davranışınızı anlatabilirsiniz. Sizin durumunuzda, testcase'de assert kullanmamalısınız.

+0

Yani, test kullanımı self.assert yazarken, aksi halde kullanın – Erdenezul