[TOC]
在PC瀏覽器的地址欄輸入一串URL,然后按Enter鍵這個頁面渲染出來,這個過程中都發生了什么事?這個是很多面試官喜歡問的一個問題
如果測試只是停留在表面上點點點,不知道背后的邏輯,是無法發現隱藏的bug,只能找一些頁面上看得到的bug。
測試人員如果想在技術上有所提升,必然要都懂接口(API)測試,這也是近來年越來越多的公司意識到接口測試的重要性,招聘的時候要招一個中高級的測試人員,接口測試是必備技能了。
<br />
<details>
<summary>一、在PC瀏覽器的地址欄輸入一串URL,然后按Enter鍵這個頁面渲染出來,這個過程中都發生了什么事?
</summary>
```
1、首先,在瀏覽器地址欄中輸入url,先解析url,檢測url地址是否合法
2、瀏覽器先查看瀏覽器緩存-系統緩存-路由器緩存,如果緩存中有,會直接在屏幕中顯示頁面內容。若沒有,則跳到第三步操作。
瀏覽器緩存:瀏覽器會記錄DNS一段時間,因此,只是第一個地方解析DNS請求;
操作系統緩存:如果在瀏覽器緩存中不包含這個記錄,則會使系統調用操作系統,獲取操作系統的記錄(保存最近的DNS查詢緩存);
路由器緩存:如果上述兩個步驟均不能成功獲取DNS記錄,繼續搜索路由器緩存;
ISP緩存:若上述均失敗,繼續向ISP搜索。
3、在發送http請求前,需要域名解析(DNS解析),解析獲取相應的IP地址。
4、瀏覽器向服務器發起tcp連接,與瀏覽器建立tcp三次握手。
5、握手成功后,瀏覽器向服務器發送http請求,請求數據包。
6、服務器處理收到的請求,將數據返回至瀏覽器
7、瀏覽器收到HTTP響應
8、瀏覽器解碼響應,如果響應可以緩存,則存入緩存。
9、瀏覽器發送請求獲取嵌入在HTML中的資源(html,css,javascript,圖片,音樂······),對于未知類型,會彈出對話框。
10、瀏覽器發送異步請求。
11、頁面全部渲染結束
```
</details>
<br />
<details>
<summary>二、get和post的區別?</summary>
```
1、概括
對于GET方式的請求,瀏覽器會把http header和data一并發送出去,服務器響應200(返回數據);
而對于POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)
2、區別:
(1) get參數通過url傳遞,post放在request body中。
(2)get請求在url中傳遞的參數是有長度限制的,而post沒有。
(3) get比post更不安全,因為參數直接暴露在url中,所以不能用來傳遞敏感信息。
(4) get請求只能進行url編碼,而post支持多種編碼方式。
(5) get請求會瀏覽器主動cache,而post支持多種編碼方式。
(6) get請求參數會被完整保留在瀏覽歷史記錄里,而post中的參數不會被保留。
(7) GET和POST本質上就是TCP鏈接,并無差別。但是由于HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
(8) GET產生一個TCP數據包;POST產生兩個TCP數據包。
```
</details>
<br />
<details>
<summary>三、cookies機制和session機制的區別?</summary>
```
cookies數據保存在客戶端,session數據保存在服務器端;
cookies可以減輕服務器壓力,但是不安全,容易進行cookies欺騙;
session較安全,但占用服務器資源
```
</details>
<br />
<details>
<summary>四、常見的HTTP狀態碼有哪些?</summary>
```
1XX Informational(請求正在處理)
2XX Success(請求成功)
3XX Redirection(重定向) 需要進行附加操作以完成請求
4XX Client Error(客戶端錯誤)
5XX Server Error(服務器錯誤)
------------------------------------------------------------
200 請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
201 請求已經被實現,而且有一個新的資源已經依據請求的需要而建立,且其 URI 已經隨Location 頭信息返回
202 服務器已接受請求,但尚未處理
301 (永久移動) 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
302 (臨時移動) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。
303 (查看其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
304 (未修改) 自從上次請求后,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
305 (使用代理) 請求者只能使用代理訪問請求的網頁。 如果服務器返回此響應,還表示請求者應使用代理。
307 (臨時重定向) 服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以后的請求。
401 當前請求需要用戶驗證。如果當前請求已經包含了 Authorization 證書,那么401響應代表著服務器驗證已經拒絕了那些證書
403 服務器已經理解請求,但是拒絕執行它。與401響應不同的是,身份驗證并不能提供任何幫助,而且這個請求也不應該被重復提交
404 請求失敗,請求所希望得到的資源未被在服務器上發現
500 服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在服務器的程序碼出錯時出現。
501 服務器不支持當前請求所需要的某個功能。當服務器無法識別請求的方法,并且無法支持其對任何資源的請求。
502 作為網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。
503 由于臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是臨時的,并且將在一段時間以后恢復
# 301和302的區別:
301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼后會自動跳轉到一個新的URL地址,
這個地址可以從響應的Location首部中獲取(用戶看到的效果就是他輸入的地址A瞬間變成了另一個地址B)——
這是它們的共同點。
他們的不同在于。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的
同時也將舊的網址交換為重定向之后的網址;302表示舊地址A的資源還在(仍然可以訪問),這個重定向只
是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。 SEO302好于301
# 重定向原因:
1. 網站調整(如改變網頁目錄結構);
2. 網頁被移到一個新地址;
3. 網頁擴展名改變(如應用需要把.php改成.Html或.shtml)。 這種情況下,如果不做重定向,則用戶收藏夾或搜索
引擎數據庫中舊地址只能讓訪問客戶得到一個404頁面錯誤信息,訪問流量白白喪失;再者某些注冊了多個域名
的網站,也需要通過重定向讓訪問這些域名的用戶自動跳轉到主站點等。
```
</details>
<br />
<details>
<summary>五、http協議有哪幾種請求方式?</summary>
```
GET, POST 和 HEAD、OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
```
</details>
<br />
<details>
<summary>六、http和https區別?</summary>
```
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,
為了保證這些隱私數據能加密傳輸,于是網景公司設計了SSL(Secure Sockets Layer)協議用
于對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP
協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
總的來說: HTTPS=SSL+HTTP
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
(這個只是默認端口不一樣,實際上端口是可以改的)
4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、
身份認證的網絡協議,比http協議安全。
```
</details>
<br />
<details>
<summary>七、http 報文格式是怎樣的?</summary>
```
請求報文包含三部分:
a、請求行:包含請求方法、URI、HTTP版本信息
b、請求頭部(headers)字段
c、請求內容實體(body)
響應報文包含三部分:
a、狀態行:包含HTTP版本、狀態碼、狀態碼的原因短語
b、響應頭部(headers)字段
c、響應內容(body)實體
```
</details>
<br />
<details>
<summary>八、常見的 POST 提交數據方式</summary>
```
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
```
</details>
<br />
<details>
<summary>九、什么是DNS?</summary>
```
域名解析服務。將主機名轉換為IP地址。如將http://www.cnblogs.com/主機名轉換為IP地址:211.137.51.78
```
</details>
<br />
<details>
<summary>十、什么是Http協議無狀態協議?怎么解決Http協議無狀態協議?</summary>
```
(1)、無狀態協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息
(2)、無狀態協議解決辦法: 通過1、Cookie 2、通過Session會話保存。
```
</details>
<br />
<details>
<summary>十一、TCP和UDP的區別?</summary>
```
1. TCP和UDP區別
1) 連接
TCP是面向連接的傳輸層協議,即傳輸數據之前必須先建立好連接。
UDP無連接。
2) 服務對象
TCP是點對點的兩點間服務,即一條TCP連接只能有兩個端點;
UDP支持一對一,一對多,多對一,多對多的交互通信。
3) 可靠性
TCP是可靠交付:無差錯,不丟失,不重復,按序到達。
UDP是盡最大努力交付,不保證可靠交付。
4)擁塞控制,流量控制
TCP有擁塞控制和流量控制保證數據傳輸的安全性。
UDP沒有擁塞控制,網絡擁塞不會影響源主機的發送效率。
5) 報文長度
TCP是動態報文長度,即TCP報文長度是根據接收方的窗口大小和當前網絡擁塞情況決定的。
UDP面向報文,不合并,不拆分,保留上面傳下來報文的邊界。
6) 首部開銷
TCP首部開銷大,首部20個字節。
UDP首部開銷小,8字節。(源端口,目的端口,數據長度,校驗和)
2. TCP和UDP適用場景
從特點上我們已經知道,TCP 是可靠的但傳輸速度慢,UDP 是不可靠的但傳輸速度快。因此在選用具體協議通信時,應該根據通信數據的要求而決定。
若通信數據完整性需讓位與通信實時性,則應該選用TCP 協議(如文件傳輸、重要狀態的更新等);反之,則使用 UDP 協議(如視頻傳輸、實時通信等)。
```
</details>
<br />
<details>
<summary>十二、socket建立連接的過程?</summary>
<br />
首先服務器建立監聽, socket , bind , listen
然后客戶端發送請求, connect , send
最后連接確認, accept , response
## **詳細過程:**
建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket ,另一個運行于服務器端,稱為ServerSocket 。
套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。
1、服務器監聽:服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。
2、客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。
為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。
3、連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。
而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。
</details>
<br />
<details>
<summary>十三、tcp的三次握手與四次揮手</summary>
<br />
## **TCP 三次握手建立連接**
### **① 三次握手過程詳解**
三次握手的原文是?`three-way handshake`,整個名詞的可以翻譯為:**需要三個步驟才能建立握手/連接的機制**。當然,三次握手也可以叫?`three-message handshake`,通過三條消息來建立的握手/連接。
<br />
進行三次握手的主要作用就是為了確認雙方的接收能力和發送能力是否正常、指定自己的?**初始化序列號(Init Sequense Number, ?`ISN`)**?為后面的可靠性傳輸做準備。
<br />
三次握手過程如下圖:

回顧一下圖中字符的含義:
* `SYN`:連接請求/接收 報文段
* `seq`:發送的第一個字節的序號
* `ACK`:確認報文段
* `ack`:確認號。希望收到的下一個數據的第一個字節的序號
<br />
**1)第一次握手**:客戶端向服務端發送一個 SYN 報文(SYN = 1),并指明客戶端的初始化序列號 ISN(x),即圖中的 seq = x,表示本報文段所發送的數據的第一個字節的序號。此時客戶端處于?`SYN_Send`?狀態。
> `SYN-SENT`?:在發送連接請求后等待匹配的連接請求
<br />
**2)第二次握手**:服務器收到客戶端的 SYN 報文之后,會發送 SYN 報文作為應答(SYN = 1),并且指定自己的初始化序列號 ISN(y),即圖中的 seq = y。同時會把客戶端的 ISN + 1 作為確認號 ack 的值,表示已經收到了客戶端發來的的 SYN 報文,希望收到的下一個數據的第一個字節的序號是 x + 1,此時服務器處于?`SYN_REVD`?的狀態。
> `SYN-RECEIVED`:在收到和發送一個連接請求后等待對連接請求的確認
<br />
**3)第三次握手**:客戶端收到服務器端響應的 SYN 報文之后,會發送一個 ACK 報文,也是一樣把服務器的 ISN + 1 作為 ack 的值,表示已經收到了服務端發來的的 SYN 報文,希望收到的下一個數據的第一個字節的序號是 y + 1,并指明此時客戶端的序列號 seq = x + 1(初始為 seq = x,所以第二個報文段要 +1),此時客戶端處于?`Establised`?狀態。
服務器收到 ACK 報文之后,也處于?`Establised 狀態`,至此,雙方建立起了 TCP 連接。
> `ESTABLISHED`:代表一個打開的連接,數據可以傳送給用戶
<br />
### **② 為什么要三次握手**
三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數據的發送與接收,而三次握手最主要的目的就是**雙方確認自己與對方的發送與接收是正常的**。
只有經過三次握手才能確認雙發的收發功能都正常,缺一不可:
* 第一次握手(客戶端發送 SYN 報文給服務器,服務器接收該報文):客戶端什么都不能確認;服務器確認了對方發送正常,自己接收正常
* 第二次握手(服務器響應 SYN 報文給客戶端,客戶端接收該報文):
客戶端確認了:自己發送、接收正常,對方發送、接收正常;
服務器確認了:對方發送正常,自己接收正常
* 第三次握手(客戶端發送 ACK 報文給服務器):
客戶端確認了:自己發送、接收正常,對方發送、接收正常;
服務器確認了:自己發送、接收正常,對方發送、接收正常
<br />
## **TCP 四次揮手釋放連接**
### **① 四次揮手過程詳解**
建立一個 TCP 連接需要三次握手,而終止一個 TCP 連接要經過四次揮手(也有將四次揮手叫做四次握手的)。這是由于 TCP 的**半關閉**(half-close)特性造成的,TCP 提供了連接的一端在結束它的發送后還能接收來自另一端數據的能力。
<br />
TCP 連接的釋放需要發送四個包(執行四個步驟),因此稱為四次揮手(`Four-way handshake`),**客戶端或服務端均可主動發起揮手動作**。

回顧一下上圖中符號的意思:
* `FIN`?:連接終止位
* `seq`:發送的第一個字節的序號
* `ACK`:確認報文段
* `ack`:確認號。希望收到的下一個數據的第一個字節的序號
剛開始雙方都處于`ESTABLISHED`?狀態,假設是客戶端先發起關閉請求。四次揮手的過程如下:
**1)第一次揮手**:客戶端發送一個 FIN 報文(請求連接終止:FIN = 1),報文中會指定一個序列號 seq = u。并**停止再發送數據,主動關閉 TCP 連接**。此時客戶端處于?`FIN_WAIT1`?狀態,等待服務端的確認。
> `FIN-WAIT-1`?- 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認;
**2)第二次揮手**:服務端收到 FIN 之后,會發送 ACK 報文,且把客戶端的序號值 +1 作為 ACK 報文的序列號值,表明已經收到客戶端的報文了,此時服務端處于?`CLOSE_WAIT`?狀態。
> `CLOSE-WAIT`?- 等待從本地用戶發來的連接中斷請求;
**此時的 TCP 處于半關閉狀態,客戶端到服務端的連接釋放**。客戶端收到服務端的確認后,進入`FIN_WAIT2`(終止等待 2)狀態,等待服務端發出的連接釋放報文段。
> `FIN-WAIT-2`?- 從遠程TCP等待連接中斷請求;
**3)第三次揮手**:如果服務端也想斷開連接了(沒有要向客戶端發出的數據),和客戶端的第一次揮手一樣,發送 FIN 報文,且指定一個序列號。此時服務端處于?`LAST_ACK`?的狀態,等待客戶端的確認。
> `LAST-ACK`?- 等待原來發向遠程TCP的連接中斷請求的確認;
**4)第四次揮手**:客戶端收到 FIN 之后,一樣發送一個 ACK 報文作為應答(ack = w+1),且把服務端的序列值 +1 作為自己 ACK 報文的序號值(seq=u+1),此時客戶端處于?**`TIME_WAIT`?(時間等待)狀態**。
> `TIME-WAIT`?- 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
?? 注意 !!!這個時候由服務端到客戶端的 TCP 連接并未釋放掉,**需要經過時間等待計時器設置的時間 2MSL(一個報文的來回時間) 后才會進入?`CLOSED`?狀態**(這樣做的目的是確保服務端收到自己的 ACK 報文。如果服務端在規定時間內沒有收到客戶端發來的 ACK 報文的話,服務端會重新發送 FIN 報文給客戶端,客戶端再次收到 FIN 報文之后,就知道之前的 ACK 報文丟失了,然后再次發送 ACK 報文給服務端)。服務端收到 ACK 報文之后,就關閉連接了,處于?`CLOSED`?狀態。
<br />
### **② 為什么要四次揮手**
由于 TCP 的**半關閉**(half-close)特性,TCP 提供了連接的一端在結束它的發送后還能接收來自另一端數據的能力。
任何一方都可以在數據傳送結束后發出連接釋放的通知,待對方確認后進入**半關閉狀態**。當另一方也沒有數據再發送的時候,則發出連接釋放通知,對方確認后就**完全關閉**了TCP連接。
<br />
**通俗的來說,兩次握手就可以釋放一端到另一端的 TCP 連接,完全釋放連接一共需要四次握手**。
<br />
舉個例子:A 和 B 打電話,通話即將結束后,A 說 “我沒啥要說的了”,B 回答 “我知道了”,于是 A 向 B 的連接釋放了。但是 B 可能還會有要說的話,于是 B 可能又巴拉巴拉說了一通,最后 B 說“我說完了”,A 回答“知道了”,于是 B 向 A 的連接釋放了,這樣整個通話就結束了。
</details>
<br />
<details>
<summary>網頁加載慢,你知道幾種原因? </summary>
<br />
**1.帶寬不足**,首先想到的就是自己網速的問題,但是一般網速在1M以上的,打開網頁一般不會是很慢的。網站服務器的帶寬不夠的話,當大量用戶訪問的時候,網頁的加載也是很慢的,這就是網絡的出口端和入口端兩個方面
**2.硬件配置低**,本機的配置也會是一方面的,但是只要不是老賽揚單核+512M的配置,一般不會是電腦配置的問題。服務器端的配置也是同樣的道理。
**3.CPU或者是內存被占滿的時候**,打開網頁很是會很慢的,因為整個電腦都很慢
**4..DNS解析慢**,域名的解析是需要專門的域名解析服務器來完成的,DNS解析包括往復解析的次數及每次解析所花費的時間,它們兩者的積即是DNS解析所耗費的總時間,在http請求的過程中,域名解析和建立連接占的時間很多。
**5.JS阻塞請求**,寫的js代碼出現問題,解析就會花費很長時間,這兩個js請求之間會出現一個很大的空隙,就會導致這段時間的資源加載都被阻塞住,
**6.接受數據時間過長**,http請求的大部分時間應該花在后面幾個階段,比如等待響應和接收數據。但是,如果接收數據的時間太長了,長到數百毫秒甚至以秒計算的時候,那也是有問題的。這種情況一般是因為下載的內容太重了,例如大圖片、大腳本等。這類問題可以使用GZIP壓縮、圖片壓縮或者JS/CSS的minify等手段來解決。
**7.加載某個資源太慢**,如果某個請求比其他的請求多出很多的時間,那么一般情況就是某個資源的加載太慢,導致了整個網頁變慢,原因有可能是1)資源在第三方站點上,他們很慢;2)這個資源太大了;3)這個資源使用的域名有問題
**8.后端代碼問題**,主要有代碼冗余、數據庫發生鎖死、動態請求時間過長等,這就需要RD優化一切可以優化的東西了
**9.前端頁面請求的資源過多**,onload之前如果有幾百行,速度自然會慢的,如果請求的資源不存在,那么速度將會更慢
**10.網頁本身中包含了追蹤或者是分析用戶的工具**,從而導致網頁的加載時間變的慢,比如之前海盜灣中會給用戶的電腦插入挖礦的js腳本
</details>
<br />
- Linux
- Linux 文件權限概念
- 重點總結
- Linux 文件與目錄管理
- 2.1 文件與目錄管理
- 2.2 文件內容查閱
- 文件與文件系統的壓縮,打包與備份
- 3.1 Linux 系統常見的壓縮指令
- 3.2 打包指令: tar
- vi/vim 程序編輯器
- 4.1 vi 的使用
- 4.2 vim編輯器刪除一行或者多行內容
- 進程管理
- 5.1 常用命令使用技巧
- 5.2 進程管理
- 系統服務 (daemons)
- 6.1 通過 systemctl 管理服務
- Linux 系統目錄結構
- Linux yum命令
- linux系統查看、修改、更新系統時間(自動同步網絡時間)
- top linux下的任務管理器
- Linux基本配置
- CentOS7開啟防火墻
- CentOS 使用yum安裝 pip
- strace 命令
- Linux下設置固定IP地址
- 查看Linux磁盤及內存占用情況
- Mysql
- 關系數據庫概述
- 數據庫技術
- 數據庫基礎語句
- 查詢語句(--重點--)
- 約束
- 嵌套查詢(子查詢)
- 表emp
- MySQL數據庫練習
- 01.MySQL數據庫練習數據
- 02.MySQL數據庫練習題目
- 03.MySQL數據庫練習-答案
- Mysql遠程連接數據庫
- Python
- python基礎
- Python3中字符串、列表、數組的轉換方法
- python字符串
- python安裝、pip基本用法、變量、輸入輸出、流程控制、循環
- 運算符及優先級、數據類型及常用操作、深淺拷貝
- 虛擬環境(virtualenv)
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 進程和線程
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- Web開發
- HTML簡介
- Python之日志處理(logging模塊)
- 函數式編程
- 高階函數
- python報錯解決
- 啟動Python時報“ImportError: No module named site”錯誤
- python實例
- 01- 用python解決數學題
- 02- 冒泡排序
- 03- 郵件發送(smtplib)
- Django
- 01 Web應用
- Django3.2 教程
- Django簡介
- Django環境安裝
- 第一個Django應用
- Part 1:請求與響應
- Part 2:模型與后臺
- Part 3:視圖和模板
- Part 4:表單和類視圖
- Part 5:測試
- Part 6:靜態文件
- Part 7:自定義admin
- 第一章:模型層
- 實戰一:基于Django3.2可重用登錄與注冊系統
- 1. 搭建項目環境
- 2. 設計數據模型
- 3. admin后臺
- 4. url路由和視圖
- 5. 前端頁面設計
- 6. 登錄視圖
- 7. Django表單
- 8. 圖片驗證碼
- 9. session會話
- 10. 注冊視圖
- 實戰二:Django3.2之CMDB資產管理系統
- 1.項目需求分析
- 2.模型設計
- 3.數據收集客戶端
- 4.收集Windows數據
- 5.Linux下收集數據
- 6.新資產待審批區
- 7.審批新資產
- django 快速搭建blog
- imooc-Django全棧項目開發實戰
- redis
- 1.1 Redis簡介
- 1.2 安裝
- 1.3 配置
- 1.4 服務端和客戶端命令
- 1.5 Redis命令
- 1.5.1 Redis命令
- 1.5.2 鍵(Key)
- 1.5.3 字符串(string)
- 1.5.4 哈希(Hash)
- 1.5.5 列表(list)
- 1.5.6 集合(set)
- 1.5.7 有序集合(sorted set)
- Windows
- Win10安裝Ubuntu子系統
- win10遠程桌面身份驗證錯誤,要求的函數不受支持
- hm軟件測試
- 02 linux基本命令
- Linux終端命令格式
- Linux基本命令(一)
- Linux基本命令(二)
- 02 數據庫
- 數據庫簡介
- 基本概念
- Navicat使用
- SQL語言
- 高級
- 03 深入了解軟件測試
- day01
- 04 python基礎
- 語言基礎
- 程序中的變量
- 程序的輸出
- 程序中的運算符
- 數據類型基礎
- 數據序列
- 數據類型分類
- 字符串
- 列表
- 元組
- 字典
- 列表與元組的區別詳解
- 函數
- 案例綜合應用
- 列表推導式
- 名片管理系統
- 文件操作
- 面向對象基礎(一)
- 面向對象基礎(二)
- 異常、模塊
- 05 web自動化測試
- Day01
- Day02
- Day03
- Day04
- Day05
- Day06
- Day07
- Day08
- 06 接口自動化測試
- 軟件測試面試大全2020
- 第一章 測試理論
- 軟件測試面試
- 一、軟件基礎知識
- 二、網絡基礎知識
- 三、數據庫
- SQL學生表 — 1
- SQL學生表 — 2
- SQL查詢 — 3
- SQL經典面試題 — 4
- 四、linux
- a. linux常用命令
- 五、自動化測試
- 自動化測試
- python 筆試題
- selenium面試題
- 如何判斷一個頁面上元素是否存在?
- 如何提高腳本的穩定性?
- 如何定位動態元素?
- 如何通過子元素定位父元素?
- 如果截取某一個元素的圖片,不要截取全部圖片
- 平常遇到過哪些問題?如何解決的
- 一個元素明明定位到了,點擊無效(也沒報錯),如果解決?
- selenium中隱藏元素如何定位?(hidden、display: none)
- 六、接口測試
- 接口測試常規面試題
- 接口自動化面試題
- json和字典dict的區別?
- 測試的數據你放在哪?
- 什么是數據驅動,如何參數化?
- 下個接口請求參數依賴上個接口的返回數據
- 依賴于登錄的接口如何處理?
- 依賴第三方的接口如何處理
- 不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試
- 接口產生的垃圾數據如何清理
- 一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功
- python如何連接數據庫操作?
- 七、App測試
- 什么是activity?
- Activity生命周期?
- Android四大組件
- app測試和web測試有什么區別?
- android和ios測試區別?
- app出現ANR,是什么原因導致的?
- App出現crash原因有哪些?
- app對于不穩定偶然出現anr和crash時候你是怎么處理的?
- app的日志如何抓取?
- logcat查看日志步驟
- 你平常會看日志嗎, 一般會出現哪些異常
- 抓包工具
- fiddler
- Wireshark
- 安全/滲透測試
- 安全性測試都包含哪些內容?
- 開放性思維題
- 面試題
- 字節測試面試
- 一、計算機網絡
- 二、操作系統
- 三、數據庫
- 四、數據結構與算法
- 五、Python
- 六、Linux
- 七、測試用例
- 八、智力/場景題
- 九、開放性問題
- python3_收集100+練習題(面試題)
- python3_100道題目答案
- 接口測試
- 接口測試實例_01
- python+requests接口自動化測試框架實例詳解
- 性能測試
- 性能測試流程
- 性能測試面試題
- 如何編寫性能測試場景用例
- 性能測試:TPS和QPS的區別
- jmeter
- jmeter安裝配置教程
- Jmeter性能測試 入門
- PyCharm
- 快捷工具
- 1-MeterSphere
- 一、安裝和升級
- 2- MobaXterm 教程
- 3-fiddler抓包
- 4-Xshell
- Xshell的安裝和使用
- Xshell遠程連接失敗怎么解決
- 5-Vmware
- Vmware提示以獨占方式鎖定此配置文件失敗
- Windows10徹底卸載VMWare虛擬機步驟
- VM ware無法關機,虛擬機繁忙
- VMware虛擬機下載與安裝
- 解決VM 與 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以運行 VM 的方法
- VMware虛擬機鏡像克隆與導入
- 6-WPS
- 1.WPS文檔里的批注怎么刪除
- 2.wps表格中設置圖表的坐標
- 3. wps快速繪制數學交集圖
- 7-MongoDB
- Win10安裝配置MongoDB
- Navicat 15.x for MongoDB安裝破解教程
- Apache
- apache層的賬戶權限控制,以及apache黑名單白名單過濾功能
- HTTP / HTTPS協議
- HTTP協議詳解
- 代理
- 狀態碼詳解
- HTTPS詳解
- Selenium3+python3
- (A) selenium
- selenium自動化環境搭建(Windows10)
- 火狐firebug和firepath插件安裝方法(最新)
- 元素定位工具和方法
- Selenium3+python3自動化
- 新手學習selenium路線圖---學前篇
- 1-操作瀏覽器基本方法
- 2-八種元素定位方法
- 3-CSS定位語法
- 4-登錄案例
- 5-定位一組元素find_elements
- 6-操作元素(鍵盤和鼠標事件)
- 7-多窗口、句柄(handle)
- 8-iframe
- 9-select下拉框
- 10-alert\confirm\prompt
- 11-JS處理滾動條
- 12-單選框和復選框(radiobox、checkbox)
- 13-js處理日歷控件(修改readonly屬性)
- 14-js處理內嵌div滾動條
- 15-table定位
- 16-js處理多窗口
- 17-文件上傳(send_keys)
- 18-獲取百度輸入聯想詞
- 19-處理瀏覽器彈窗
- 20-獲取元素屬性
- 21-判斷元素存在
- 22-爬頁面源碼(page_source)
- 23-顯式等待(WebDriverWait)
- 24-關于面試的題
- 25-cookie相關操作
- 26-判斷元素(expected_conditions)
- 27-判斷title(title_is)
- 28-元素定位參數化(find_element)
- 29-18種定位方法(find_elements)
- 30- js解決click失效問題
- 31- 判斷彈出框存在(alert_is_present)
- 32- 登錄方法(參數化)
- 33- 判斷文本(text_to_be_present_in_element)
- 34- unittest簡介
- 35- unittest執行順序
- 36- unittest之裝飾器(@classmethod)
- 37- unittest之斷言(assert)
- 38- 捕獲異常(NoSuchElementException)
- 39- 讀取Excel數據(xlrd)
- 40- 數據驅動(ddt)
- 41- 異常后截圖(screenshot)
- 42- jenkins持續集成環境搭建
- 43- Pycharm上python和unittest兩種運行方式
- 44- 定位的坑:class屬性有空格
- 45- 只截某個元素的圖
- 46- unittest多線程執行用例
- 47- unittest多線程生成報告(BeautifulReport)
- 48- 多線程啟動多個不同瀏覽器
- (B) python3+selenium3實現web UI功能自動化測試框架
- (C) selenium3常見報錯處理
- 書籍
- (D)Selenium3自動化測試實戰--基于Python語
- 第4章 WebDriver API
- 4.1 從定位元素開始
- 4.2 控制瀏覽器
- 4.3 WebDriver 中的常用方法
- 4.4 鼠標操作
- 4.5 鍵盤操作
- 4.6 獲得驗證信息
- 4.7 設置元素等待
- 4.8 定位一組元素
- 4.9 多表單切換
- 4.10 多窗口切換
- 4.11 警告框處理
- 4.12 下拉框處理
- 4.13 上傳文件
- 4.14 下載文件
- 4.15 操作cookie
- 4.16 調用JavaScript
- 4.17 處理HTML5視頻播放
- 4.18 滑動解鎖
- 4.19 窗口截圖
- 第5章 自動化測試模型
- 5.3 模塊化與參數化
- 5.4 讀取數據文件
- 第6章 unittest單元測試框架
- 6.1 認識unittest