A. python開發測試學習選擇哪裡好

哪裡好自己選,只是注意廣告做得多的不一定好。

-------------
Python測試開發分享感悟
今天Zoom.Quiet在公司內部分享了對Python測試開發的一些感悟,TDD以及一些開源的Python測試的庫。由於一直在測試一線奮戰,我被做為特邀嘉賓來到現場。由於時間關系,最後我的分享沒有進行。我在這里說說對Zoom.Quiet演講內容的一些感想吧。

下面的鏈接是Zoom.Quiet的幻燈片:
http://py.kingsoft.net/s5/100826-PyTDD/

我打算分享的關於Python GUI測試的幻燈片:
http://py.kingsoft.net/s5/100826-PyTDD/py-gui-automation/

1. 重點強調了TDD測試先行的做法,以及新需求到來時進行迭代的測試驅動開發過程。
感想:「測試先行」的確是TDD的核心,同時,TDD還有其他一些理念,其實也很值得分享,比如:

編寫完測試案例後,用最小化或最精簡的代碼,讓測試案例剛剛好通過( just enough)。然後再繼續補充測試案例,測試案例可能失敗,繼而再修改代碼,讓新的測試案例剛剛好通過。之後一直重復這個過程,直到你再也寫不出一個測試案例,需要修改你的代碼。「just enough code」,我對於這點感觸比較深。一方面因為,我們幾乎沒有可能一次性寫出完全正確讓所有測試案例都通過的代碼,所以必定存在這個迭代的過程。另一方面,能很好的遵循YAGNI(You Are'nt Gonna Need It),避免了過度的設計。
測試案例是最好的注釋,同時也是最好的文檔。

2. 分享了大量Python的開源測試工具或庫。
感想:知道了很多自己不知道的東西,很有意義。

3. 「沒有測試案例的持續集成不是持續集成」
感想:說的太好了。同時也要自我反省一下,一直想將測試案例加入持續構建,一直都沒有去做~

4. 「測試的本質是什麼?」
感想:記得一本測試的書講過,測試的本質,就是「想盡一切辦法尋找軟體的缺陷!」。我覺得也是有道理的,所謂的「保證軟體的質量」,並不準確,至少,我可以舉一個反例,進行高效的代碼審查以及招聘最優秀的程序員,同樣也能保證軟體的質量,是不是軟體測試呢?有人說自動化測試不能發現新的缺陷,只能保證已發現的BUG不再重現。其實,只是我們理解的是保證BUG不重現,歸根結底,自動化測試案例一直重復的執行,還是為了找到軟體的缺陷,並且,是存在發現新缺陷的可能的。所以,別想了,軟體測試就是找BUG,直到你再也找不出來為止。(你找不出來並不意味著沒有)。

5. 「當你的代碼需要使用過多的Mock對象進行測試時,意味著你的代碼依賴過多,重構它吧」
「不可測的代碼,是需要使用大量的Mock對象的代碼」
「減少依賴,減少Mock對象的使用」
感想:對於這兩個觀點,我有一些不同意見。首先,除非你開發的是類似計算素數或是其他單一性很強的代碼,你不可能不依賴到文件系統,資料庫,以及網路。而一旦你的測試案例依賴於這三樣東西,你的測試案例就不再屬於單元測試,而是集成測試。除非你只把這部分代碼交給集成測試,不然你必然需要使用Mock對象。
當然,這里所說的Mock對象也是廣義的概念。嚴格來說,存在諸如:Spy,Fake,Stub,Mock等具有不同意義的東西。雖然只是概念上的理解,在實際測試過程中對測試案例的理解,還是很有意義的。
所以,我覺得,最不可測試的代碼,因為是連Mock的機會都不給的代碼。這樣的代碼我遇到過很多,特別是C++的代碼,我見過的C++程序員,對依賴注入都沒什麼概念。依賴注入,是為了減少對具體對象的依賴,同時,也提供了更好的可測性。允許使用Mock對象進行模擬。
關於Mock的爭論其實有很多,我也只是表達一點自己的看法。我也沒有那麼絕對,過度使用Mock,我也是不推薦的。

6. 有人提問:「TDD對可測性的幫助有多大?」
我的回答:很大,非常大。當你寫過別人代碼的測試案例的時候你就會知道,假如一個傢伙從來不寫測試案例,他的代碼測試起來會非常痛苦。假如另一個傢伙自己就會寫一些測試案例測試自己的代碼,在寫測試代碼的過程中,其實就已經是在不斷的重構,使得代碼更具可測性的過程。所以,這樣的代碼的可測性會強很多。

7. 關於我自個開發的KWinAuto自動化GUI測試框架
說明:其實這個是我們內部使用的一個GUI測試框架。為了讓名字更好聽,我臨時修改了名字,因為靈感和一些東西來自開源的PyWinAuto,所以,我索性取了個名,叫KWinAuto。這個框架主要是非常簡單的處理了常見的Windows控制項的操作,並且是為我們自己實際測試量身打造的這么一個庫。離最終開源出來讓大家分享還是有一些距離,所以,就先不放出來了,大家就從我的幻燈片里先了解一下吧。

B. python用什麼方法測試

Python簡單易學、免費開源、高層語言、可移植性超強、可擴展性、面向對象、可版嵌入型、豐富的庫、規范的代碼權等。Python除了極少的涉及不到的開發之外,其他基本上可以說全能:系統運維、圖形處理、數學處理、文本處理、資料庫編程、網路編程、web編程、多媒體應用、pymo引擎、爬蟲編寫、機器學習、人工智慧等等。Python的應用特別廣,中國現在的人才缺口超過100萬。
如果你想要專業的學習Python開發,更多需要的是付出時間和精力,一般在2w左右。應該根據自己的實際需求去實地看一下,先好好試聽之後,再選擇適合自己的。只要努力學到真東西,前途自然不會差。

C. 測試轉python開發難不難

Python簡單易學、免費開源、高層語言、可移植性超強、可擴展性、面向對象、可嵌入型、回豐富的庫、規范的代答碼等。Python除了極少的涉及不到的開發之外,其他基本上可以說全能:系統運維、圖形處理、數學處理、文本處理、資料庫編程、網路編程、web編程、多媒體應用、pymo引擎、爬蟲編寫、機器學習、人工智慧等等。Python的應用特別廣,中國現在的人才缺口超過100萬。
如果你想要專業的學習Python開發,更多需要的是付出時間和精力,一般在2w左右。應該根據自己的實際需求去實地看一下,先好好試聽之後,再選擇適合自己的。只要努力學到真東西,前途自然不會差。

D. 如何使用python編寫測試腳本

1)doctest
使用doctest是一種類似於命令行嘗試的方式,用法很簡單,如下

復制代碼代碼如下:

def f(n):
"""
>>> f(1)
1
>>> f(2)
2
"""
print(n)

if __name__ == '__main__':
import doctest
doctest.testmod()

應該來說是足夠簡單了,另外還有一種方式doctest.testfile(filename),就是把命令行的方式放在文件里進行測試。

2)unittest
unittest歷史悠久,最早可以追溯到上世紀七八十年代了,C++,java里也都有類似的實現,Python里的實現很簡單。
unittest在python里主要的實現方式是TestCase,TestSuite。用法還是例子起步。

復制代碼代碼如下:

from widget import Widget
import unittest
# 執行測試的類
class WidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget = Widget()
def tearDown(self):
self.widget.dispose()
self.widget = None
def testSize(self):
self.assertEqual(self.widget.getSize(), (40, 40))
def testResize(self):
self.widget.resize(100, 100)
self.assertEqual(self.widget.getSize(), (100, 100))
# 測試
if __name__ == "__main__":
# 構造測試集
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testSize"))
suite.addTest(WidgetTestCase("testResize"))

# 執行測試
runner = unittest.TextTestRunner()
runner.run(suite)

簡單的說,1>構造TestCase(測試用例),其中的setup和teardown負責預處理和善後工作。2>構造測試集,添加用例3>執行測試需要說明的是測試方法,在Python中有N多測試函數,主要的有:
TestCase.assert_(expr[, msg])
TestCase.failUnless(expr[, msg])
TestCase.assertTrue(expr[, msg])
TestCase.assertEqual(first, second[, msg])
TestCase.failUnlessEqual(first, second[, msg])
TestCase.assertNotEqual(first, second[, msg])
TestCase.failIfEqual(first, second[, msg])
TestCase.assertAlmostEqual(first, second[, places[, msg]])
TestCase.failUnlessAlmostEqual(first, second[, places[, msg]])
TestCase.assertNotAlmostEqual(first, second[, places[, msg]])
TestCase.failIfAlmostEqual(first, second[, places[, msg]])
TestCase.assertRaises(exception, callable, ...)
TestCase.failUnlessRaises(exception, callable, ...)
TestCase.failIf(expr[, msg])
TestCase.assertFalse(expr[, msg])
TestCase.fail([msg])

E. python寫的測試框架怎麼使用

安裝

>pipinstall-Upytest#通過pip安裝

>py.test--version#查看pytest版本

Thisispytestversion2.7.2,importedfromC:Python27libsite-packagespytest.pyc

簡單的測試

讓我們創建第一個文件,對個簡單的功能進行測試。

好吧!其實, 我也不理解這段代碼的含義,但是執行它的可運行測試用例了。

pytest/

├──test_case/

│├── test_sample.py

│├──test_class.py

│├── __init__.py

│ └──test_case2/

│ ├── test_main.py

│ ├── test_time.py

│ └──__init__.py

└──runtests.py

執行runtest.py文件。

>python runtest.py

當然,你也可以打開runtests.py 文件運行它。

===================================================================

*最後,pytest是如果識別測試用例的呢?它默認使用檢查以test_ *.py 或*_test.py命名的文件名,在文件內部查找以test_打頭的方法或函數,並執行它們。

pytest還有許多需要討論的地方,做為這個系列的第一節,先介紹到這里。

F. 如何使用python 語言來實現測試開發

對於各種驅動介面,Python來編寫測試用例的好處是:由於Python不需要編譯,你所執行的也就是你所編寫的,當發生異常的時候,你無須打開集成開發環境,載入測試工程、並調試,你能夠很方便的看到python測試腳本的內容,什麼地方出了異常可以立刻發現,例如:
from ctypes import *
rc =c_int(-12345);
dll = windll.LoadLibrary("dmodbc.dll");#載入被測試組件
#=================#
SQLHANDLE_env = pointer(c_long(0));
SQLHANDLE_cnn = pointer(c_long(0));
SQLHANDLE_stmt = pointer(c_long(0));
pdns = c_char_p("FASTDB");
puid = c_char_p("SYSDBA");
ppwd = c_char_p("SYSDBA");
#env handle
rc = dll.SQLAllocHandle(1,None,byref(SQLHANDLE_env));
print "result of henv handle alloc :%d" %rc;
#cnn handle
rc = dll.SQLAllocHandle(2,SQLHANDLE_env,byref(SQLHANDLE_cnn));
print "result of cnn handle alloc :%d" %rc;
#connect!
rc = dll.SQLConnect(SQLHANDLE_cnn,pdns,-3,puid,-3,ppwd,-3)
print "result of connect :%d" %rc;
#stmt handle
rc = dll.SQLAllocHandle(3,SQLHANDLE_cnn,byref(SQLHANDLE_stmt));
print "result of stmt handle alloc:%d" %rc;
#exec
rc = dll.SQLExecDirect(SQLHANDLE_stmt,"insert into t values(1)",-3);
print "result of exec:%d" %rc;
#free========================
rc = dll.SQLFreeHandle(3, SQLHANDLE_stmt);
print rc;
rc = dll.SQLDisconnect(SQLHANDLE_cnn);
print rc;
rc = dll.SQLFreeHandle(2, SQLHANDLE_cnn);
print rc;
rc = dll.SQLFreeHandle(1, SQLHANDLE_env);
print rc;
在上面我們可以看到,Python調用c/c++介面是十分容易的,只需要把動態庫載入進來,然後把這個動態庫當作一個對象實例來使用就可以了。下面將是一個使用ado.net介面的例子:
import System;
from Dm import *#Dm是DMDBMS提供的ado.Net的DataProvider
#print dir(Dm.DmCommand);
i =0;
cnn = Dm.DmConnection("server = 127.0.0.1; User ID = SYSDBA; PWD = SYSDBA; Database = SYSTEM; port = 12345");
cmd = Dm.DmCommand();
cmd.Connection = cnn;
cmd.CommandText = "insert into t values(1);";
cnn.Open();
i=cmd.ExecuteNonQuery();
print i;
cmd.Dispose();
cnn.Close();
可以看到,.net對象的使用與在VisualStdio上進行開發幾乎沒有任何區別。
通過使用Python進行測試用例的開發,最大的好處莫過於:學習成本非常低,測試工程師只需要學習Python,對於其他語言稍有了解就可以了。同時只需要少量的測試開發工程師對Python測試框架進行維護。
這樣的好處就是便於測試人員將精力專精在一個方向,免於「什麼都會一點,但什麼都不精」的情況。當然測試人員具備廣闊的知識面,會使用各種常見的開發工具與平台是好事情,並且也是必要的,不過在短時間內要求迅速能夠勝任大多數任務也是企業在人才培養上的期望目標。

G. 用python可以做什麼測試

1.將日常工作最常用的一些命令或者工具腳本化,比如用Python腳本完成更新代碼,打包功內能
2.使用Python創建一個聲稱測試容數據的腳本,開發每次都要找你幫忙創建一堆測試數據,你能忍受每次都要滑鼠點擊那麼多次來填寫n多表單么,為啥不搞個腳本
3.做一些自動化測試的工作
4.用Python創建一些簡單網站,把開發,測試,產品經常煩擾你的工作都放到網頁上,讓他們自己傻瓜操作多好。
5.用來維護測試伺服器
6.CI(持續集成)往往也需要一個腳本來配合工作
7.創建一些監控程序,監控測試環境和線上的介面

H. python和java哪個比較適合做自動化測試,和測試開發一般用哪種語言。

用python,類庫多,方便,簡單,容易上手,自動化平台測試開發-Python測試開發實戰 推薦看一下這本書

I. Python和軟體測試哪個簡單初學者可以學好嗎

python是一種編程語言,適合邏輯思維好的人學
軟體測試相對比較簡單,但是現在基本都是自動化,是要求會一點python或java語言的
初學者建議學測試能好一點,剛開始從手工測試開始,再學自動化測試,一步一步來

J. Python的wep開發和軟體測試哪個難

你這個來態度可不好,不要哪個簡單源就學哪個簡單就代表著技術含量低技術含量低就代表著容易學成容易學成就代表著技術不值錢容易被替代?也就是工作待遇也不好,也容易失業。
不要認為女生就一定要學習,容易的,其實在it技術行當裡面,你說的這些技術男生女生都一樣,只不過女生很少有喜歡學習編程的,但不代表就不能學不適合學。