python爬虫如何运行在web_Python Web爬网-使用爬虫进行测试
本章介紹了如何在Python中使用Web抓取工具執行測試。
介紹
在大型Web項目中,會定期執行網站后端的自動化測試,但經常會跳過前端測試。這背后的主要原因是網站的編程就像各種標記和編程語言的網絡一樣。我們可以為一種語言編寫單元測試,但是如果以另一種語言進行交互則變得很有挑戰性。這就是為什么我們必須具有一組測試來確保我們的代碼按預期執行的原因。
使用Python測試
當我們談論測試時,它意味著單元測試。在深入研究Python測試之前,我們必須了解單元測試。以下是單元測試的一些特征-
組件功能的至少一個方面將在每個單元測試中進行測試。
每個單元測試都是獨立的,也可以獨立運行。
單元測試不會干擾任何其他測試的成功或失敗。
單元測試可以任何順序運行,并且必須至少包含一個斷言。
單元測試-Python模塊
所有標準Python安裝均隨附名為Unittest的Python模塊,用于單元測試。我們只需要導入它,剩下的就是unittest.TestCase類的任務,它將執行以下操作-
SetUp和tearDown函數由unittest.TestCase類提供。這些功能可以在每次單元測試之前和之后運行。
它還提供了assert語句,以允許測試通過或失敗。
它運行以test_開頭的所有功能作為單元測試。
例
在這個例子中,我們將結合使用web scraping和unittest。我們將測試Wikipedia頁面以搜索字符串“ Python”。它將基本上進行兩個測試,第一個測試標題頁是否與搜索字符串相同(即是否為“ Python”),第二個測試確保標題頁具有內容div。
首先,我們將導入所需的Python模塊。我們使用BeautifulSoup進行網頁抓取,當然也使用unittest進行測試。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import unittest
現在我們需要定義一個將擴展unittest.TestCase的類。全局對象bs將在所有測試之間共享。指定單元測試的功能setUpClass將完成此任務。在這里,我們將定義兩個功能,一個用于測試標題頁,另一個用于測試頁面內容。
classTest(unittest.TestCase):bs=NonedefsetUpClass():url='https://en.wikipedia.org/wiki/Python'Test.bs=BeautifulSoup(urlopen(url),'html.parser')deftest_titleText(self):pageTitle=Test.bs.find('h1').get_text()self.assertEqual('Python',pageTitle);deftest_contentExists(self):content=Test.bs.find('div',{'id':'mw-content-text'})self.assertIsNotNone(content)if__name__=='__main__':unittest.main()
運行上面的腳本后,我們將獲得以下輸出-
----------------------------------------------------------------------
Ran 2 tests in 2.773s
OK
An exception has occurred, use %tb to see the full traceback.
SystemExit: False
D:\ProgramData\lib\site-packages\IPython\core\interactiveshell.py:2870:
UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
用硒測試
讓我們討論如何使用Python Selenium進行測試。這也稱為硒測試。Pythonunittest和Selenium并沒有太多共同點。我們知道Selenium會向不同的瀏覽器發送標準的Python命令,盡管它們的瀏覽器設計有所不同。回想一下,我們在先前的章節中已經安裝并使用了Selenium。在這里,我們將在Selenium中創建測試腳本并將其用于自動化。
例
借助下一個Python腳本,我們正在創建用于Facebook登錄頁面自動化的測試腳本。您可以修改該示例以自動執行您選擇的其他表單和登錄,但是概念是相同的。
首先用于連接到Web瀏覽器,我們將從selenium模塊導入webdriver-
from selenium import webdriver
現在,我們需要從硒模塊導入密鑰。
from selenium.webdriver.common.keys import Keys
接下來,我們需要提供用戶名和密碼以登錄我們的Facebook帳戶
user = "gauravleekha@gmail.com"
pwd = ""
接下來,提供用于Chrome的網絡驅動程序的路徑。
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
driver = webdriver.Chrome(executable_path=path)
driver.get("http://www.facebook.com")
現在,我們將使用assert關鍵字驗證條件。
assert "Facebook" in driver.title
在以下代碼行的幫助下,我們正在將值發送到電子郵件部分。在這里,我們通過ID對其進行搜索,但可以通過按driver.find_element_by_name(“ email”)的名稱進行搜索。
element = driver.find_element_by_id("email")
element.send_keys(user)
在下面的代碼行的幫助下,我們將值發送到密碼部分。在這里,我們通過ID對其進行搜索,但可以通過按driver.find_element_by_name(“ pass”)的名稱進行搜索。
element = driver.find_element_by_id("pass")
element.send_keys(pwd)
在電子郵件和密碼字段中插入值之后,下一行代碼用于按Enter /登錄。
element.send_keys(Keys.RETURN)
現在,我們將關閉瀏覽器。
driver.close()
運行上述腳本后,將打開Chrome網絡瀏覽器,您會看到正在插入電子郵件和密碼,然后單擊登錄按鈕。
比較:單元測試或硒
很難比較unittest和硒,因為如果您要使用大型測試套件,則需要unites的語法嚴格性。另一方面,如果您要測試網站的靈活性,那么硒測試將是我們的首選。但是,如果我們可以將兩者結合在一起,該怎么辦?我們可以將硒導入Python單元測試中,并充分利用兩者。Selenium可用于獲取有關網站的信息,而unittest可以評估該信息是否符合通過測試的標準。
例如,我們通過結合以下兩種方法來重寫上述Python腳本,以實現Facebook登錄的自動化-
importunittestfromseleniumimportwebdriverclassInputFormsCheck(unittest.TestCase):defsetUp(self):self.driver=webdriver.Chrome(r'C:\Users\gaurav\Desktop\chromedriver')deftest_singleInputField(self):user="gauravleekha@gmail.com"pwd=""pageUrl="http://www.facebook.com"driver=self.driver
driver.maximize_window()driver.get(pageUrl)assert"Facebook"indriver.title
elem=driver.find_element_by_id("email")elem.send_keys(user)elem=driver.find_element_by_id("pass")elem.send_keys(pwd)elem.send_keys(Keys.RETURN)deftearDown(self):self.driver.close()if__name__=="__main__":unittest.main()
上一頁 打印頁面
總結
以上是生活随笔為你收集整理的python爬虫如何运行在web_Python Web爬网-使用爬虫进行测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: img 隐藏_CSS3界面样式和溢出文字
- 下一篇: python函数式编程思想_以pytho