回答
在我的GAE項目中,我使用:
- NoseGAE —這是結合所有的關鍵部分其餘的一起
- 模擬,如約翰的優秀答案。我用這主要是出於AWS和其他網絡服務
- 配件(包,而不是想法)
我還喜歡很多的Rails的成語。我將測試分解爲單元,並使用Python包進行功能性測試。您可以使用--tests=unit
或--tests=functional
運行一個測試子集。這些都比Rails手動多一點,但至少我可以單元測試困難的東西,並確保我從來沒有迴歸。
我還做了一個簡單的FunctionalTest
類來完成Rails中很多常見的操作,比如assert_response
和assert_xpath
(類似於assert_select)。
class FunctionalTest(Test):
def get(self, *args, **kw):
self.response = app.get(*args, **kw)
def post(self, *args, **kw):
self.response = app.post(*args, **kw)
def assert_response(self, expected):
pattern = str(expected) if re.search(r'^\d+$', expected) \
else (r'^\d+ %s' % expected)
assert re.search(pattern, self.response.status, re.IGNORECASE), \
'Response status was not "%s": %s' % (expected, self.response.status)
def assert_xpath(self, path, expected):
element = ElementTree.fromstring(self.response.body)
found_nodes = element.findall('.' + path)
if type(expected) is int:
assert_equal(expected, len(found_nodes))
elif type(expected) is str or type(expected) is unicode:
assert (True in [(node.text == expected) for node in found_nodes])
else:
raise Exception, "Unknown expected value: %r" % type(expected)
如果你正在做大量的ListElement平等搜索,肯定學--tests=foo
語法,因爲測試列表中匹配的元素是很慢的。
有時候我喜歡將Rails控制檯加載到我的燈具數據上以查看測試環境中發生了什麼(即script/console test
)。做GAE類似的東西,使用參數--datastore_path="$TMPDIR/nosegae.datastore"
運行dev_appserver.py(或可能替代/tmp
爲$TMPDIR
。
接受這個答案的關鍵NoseGAE位信息,雖然約翰的回答也非常有幫助。 – 2009-10-23 04:08:09
謝謝,鮑勃!事實上,我計劃在未來將更多約翰的建議融入我自己的項目中。 – JasonSmith 2009-10-23 10:31:17
Bob,回顧一下我的代碼,我發現我有辦法針對NoseGAE創建的數據存儲庫運行普通的SDK服務器,所以我將其添加爲最後一段。 – JasonSmith 2009-10-26 04:35:30
你不會總是在Python中找到一對一的Ruby測試工具,但是Python中有一些很棒的測試工具。我發現有用的一些工具包括:
- unittest - Python標準庫中包含的xUnit工具。它包含了單元測試的所有基礎知識。
- doctest - 標準庫的一個很棒的部分,它允許你在函數,類,模塊,方法的文檔字符串中編寫測試。它在傳達預期的API使用方面非常出色。 Ian Bicking建議使用doctest進行行爲驅動開發。 Doctest非常適合Sphinx文檔系統(您可以確保每次構建文檔時都會傳遞文檔中的所有示例)。
- nose和py.test被視爲單元測試的下一代版本。他們可以運行所有現有的單元測試案例,但允許更簡單,非基於類的單元測試。 py.test也允許分佈式執行。
- mock是一個很好的嘲笑行爲庫。
- tdaemon監視目錄以更新您的代碼,並將重新執行您的測試套件。 (我的personal branch包含一些未完成的改進)。
- Buildbot,Bitten,甚至Hudson都可以作爲Python代碼的全功能持續集成服務器。
- coverage.py計算代碼的代碼覆蓋率。
- pylint將對您的代碼提供類似皮棉的分析,確保它遵循常見的編碼約定並且沒有任何常見的錯誤。還有一個「更輕」的分析工具,PyFlakes。
- 有很多HTTP/Browser測試工具可以在Python中很好地運行,包括Twill,Selenium和Windmill。
如果您在App Engine上使用Django,則它包含several extensions以允許您模擬HTTP客戶端和數據庫持久性。
還有很多其他工具我沒有用過(如PySpec和Behaviour),這也可能有幫助。我還沒有看到Python中的任何突變測試工具,但我敢打賭有一個(我很想知道它是什麼)。
快樂測試!
僅收藏該問題的回答 – 2009-10-20 01:33:42
這裏有很多很棒的鏈接我猜很多這些都不是下拉菜單,但我希望看到更多的答案,詳細說明他們如何將事情與GAE的開發環境整合在一起,特別是在OS X發射器。 – 2009-10-20 02:12:11
鮑勃,約翰的回答確實很棒。正如我剛纔所說的,一旦你安裝了NoseGAE插件,它就可以很順利地與所有這些工具一起航行。 – JasonSmith 2009-10-21 03:12:54
沒有使用App Engine的,但我對最流行的Python測試工具的感覺是
- unittest/doctest是Python標準 庫的測試包。 unittest是python的xUnit。
- nose是測試跑步者/取景器。它有很多選擇,包括
--with-coverage
,它使用coverage給你代碼覆蓋 報告。 - pylint是python中功能最強大的皮棉檢查工具。有用的 語法檢查器,因爲它建議未使用的變量/函數,當 方法應該是功能,等等。
- pester(突變檢測)
- buildbot(持續集成)
你可能會想引用的Python Testing Tools這(不是很完整)列表。
對於BDD來說,我上次檢查時該字段很薄。許多真正的BDD工具 不適用於鼻子和/或太限制它們所需的語法。 你可能對spec有一些好運,這是一個類似於BDD的鼻子插件。 剛發現pyccuracy,看起來很像黃瓜,但我沒有 試過。
爲了什麼它的價值,我現在只是用nosetests -v
(鼻子亞軍與 --verbose),其中會使用到文檔字符串的第一行中的測試運行 輸出。也就是說,給定像一個測試:
class TestFoo(unittest.TestCase):
def testAnyNameHere(self):
""" Foo should be bar"""
foo = "bar"
self.assertEqual(foo, 'bar')
nosetests會給:
$ nosetests -v
Foo should be bar... ok
-----------------------------
Ran 1 tests in 0.002s
OK
+1對於糾纏提及 – 2009-10-20 01:31:51
它看起來像另一個新選擇是Agar,它是基於google.appengine.ext.testbed,在App Engine SDK的一部分。見this blog post
- 1. 如何設置GeoPtProperty Google App Engine的
- 2. 如何在Google App Engine上設置PyParsing?
- 3. 如何設置在Eclipse中使用Groovy的Google App Engine項目?
- 4. Google App Engine:流量來源
- 5. Google App Engine:流量監控
- 6. 如何設置Google App Engine的IP並設置GCM?
- 7. Google App Engine本地(開發)IPython Shell
- 8. Google App Engine:登錄開發控制檯?
- 9. IntelliJ上的Google App Engine Java開發?
- 10. Google App Engine開發者重新部署
- 11. 使用Google App Engine發揮SQL Alchemy
- 12. 在Google App Engine中設置Cookie超時
- 13. Google App Engine設置替代Dev vs Online
- 14. 在Google App Engine上爲DataStore設置Django
- 15. Google App Engine - 設置索引/主頁
- 16. [Google App Engine]如何使用filter()?
- 17. 如何在Google App Engine中使用ujson
- 18. 如何在Google App Engine中使用sbt?
- 19. 如何在Google App Engine中使用CachedRowSet?
- 20. Google App Engine後端開始
- 21. 開發也可運行Google App Engine的Java Swing應用程序?
- 22. 從開發模式測試Google App Engine應用程序的doPost()
- 23. 如何在google-app-engine上用http-post設置cron作業?
- 24. 如何在Google App Engine中爲Go設置數據裝置
- 25. 如何在Google App Engine中爲Go應用設置應用範圍設置?
- 26. Google App Engine在發送郵件時使用PHP設置發件人名稱
- 27. 從Google App Engine發送線程郵件
- 28. 使用實體 - Google App Engine
- 29. Google App Engine使用maven
- 30. Google App Engine:使用Ajax
在Ruby社區中形成的TDD文化絕對讓人驚歎 – 2009-10-20 00:48:08