1、你做了幾年的測驗、自動化測驗,說一下 selenium 的原理是什么?
我做了五年的測驗,1年的自動化測驗;
selenium 它是用 http 協議來連接 webdriver ,客戶端可以使用 Java 或者 Python 各種編程語言來實作;
2、什么專案適合做自動化測驗?
關鍵字:不變的、重復的、規范的
第一點,需求變化不能太頻繁;
第二點,專案周期要足夠長,如果自動化代碼還沒有寫完,公司就倒閉了,那也不需要自動化了
第三點,腳本可以重復使用:在一些典型的場景,比如說 “冒煙測驗、回歸測驗” 的地方就是經常使用自動化測驗;
第四點,被測驗的軟體是否規范:比如說是不是有需求檔案、規范的介面檔案、是否有原型圖、你的介面設計是不是比較規范;
第五點,手工測驗是無法完成的;比如說一個性能測驗,不能同時有 一千只手一直做好點點點,自動化測驗的成本不是特別高
3、Python 生成器 和迭代器的區別?
作為迭代器必須實作兩個特定的方法 “iter(),next()” ;
生成器是一種特許的迭代器,支持所有的迭代操作,除此之外生成器還實作了,普通迭代器沒有的一些特性;
比如說它可以通過 send 的方法與生成器內部進行資料互動;還有它可以通過 close 方法去進行關閉;甚至還可以通過 throw 方法,引發內部的例外;
4、為什么用 Mac 寫代碼?
表面原因是 Mac 方便易用,顏值也高;深層原因是因為現在的服務器,大多都是采用 Linux 系統,而 Mac 系統 和 Linux 系統其實都是基于原來的 Unix 系統開發的;
而 Mac 基本上能夠維持我們的開發環境和線上的一致性;
為什么不用 Linux ?
用 Linux 寫代碼也是一個很好的選擇,但是 Linux 的界面操作和他的娛樂功能不是特別強,而 Mac 做到了很好的平衡;
5、你是怎么開展自動化測驗作業的?
第一,根據產品的業務特性整理出來,可以做自動化的一個功能模板;
第二,我們會根據有限級以及人員現狀,來制定自動化測驗計劃;
第三,我們會從功能用例當中挑選合適的用例來轉成自動化用例;
第四,是框架選型,選擇編制語言或者工具來實作,我們的團隊都是會代碼的能力還不錯,所以我們選擇的是 Python 語言來實作的;
第五,就是自動化測驗的腳本開發;
第六,根據專案來制定自動化的執行方案;
第七,就是測驗報告的分析作業,以及 自動化測驗成果的匯報,跟進后期的維護;
6、請說下什么是閉包函式?
完成的閉包必須包含以下三個特性:函式中必須嵌套一個函式;外層函式回傳值是內層函式的函式名;記憶體嵌套函式對外層作用率,有非全域變數的參考;
簡單來說閉包函式,第二個回傳的不僅僅是一個簡單的函式,這個函式它還呆了一個封閉的作用域;
7、請介紹一下你的自動化測驗框架?
在上家公司搭建了 API 介面自動化測驗框架,使用 Python 中的 unittest 框架結合 requests 模塊,采用資料驅動思想(ddt)和分層設計理念,實作測驗用例自動化執行;
我的框架主要分為一下幾大模塊:
模塊一:cases(K色死)檔案夾,自己根據介面需求封裝的模塊(注冊,登錄,充值),保存測驗用例的類
模塊二:configs(康菲格斯)檔案夾,組態檔,存放專案當中共有配置:檔案名、日志器,資料庫,url地址
模塊三:datas(得塔斯):保存測驗用例 Excel 檔案資料;
往往一條測驗用例的自動化代碼都是一樣的,只不過只是資料不同而已,會將資料和代碼分離,使用 ddt 進行驅動,這分離就是資料驅動思想;
會將一條測驗用例的資料放到 Excel 、資料庫中,一條資料代表一條用例,這樣可以精簡代碼,方便維護
模塊四:libs(來波斯)檔案夾,第三方庫檔案夾、ddt 和 HTML 報告;
ddt:修改 ddt 庫,如果資料是字典,則獲取字典當中的 title 對應的值,加到測驗用例名稱中;HTML 報告,使用更加美化詳細的報告
模塊五:logs(老格斯)檔案夾,存放日志檔案;
模塊六:reports(瑞跑次)檔案夾,存放生成的報告
模塊七:scripts(思怪珀斯)檔案夾,存放封裝的類和模塊,封裝了通用的工具模塊
constants :(康斯ten死)py檔案是存盤目錄路徑檔案;使用 os 庫,存放定位的檔案目錄 import os
handle_config.py:(憨豆個.康飛個)檔案封裝了對組態檔的讀寫操作;
from configparser import ConfigParser 使用 (康飛個.拍兒澀)方法,進行組態檔的讀寫
handle_context.py:(憨豆.康 泰可斯特)py檔案是引數化的封裝;
使用 re 模塊,正則來實作引數化 search (譯:澀吃)方法搜索、sub(譯:薩博)方法替換操作
handle_excel.py:(憨豆.一顆賽歐)py 檔案是 對Excel 檔案的封裝;
使用 openpyxl 模塊,來處理 excel 檔案對,檔案進行讀寫操作, 存盤測驗資料(用例資料)用例資料);包括:獲取所有測驗用例、對執行結果在指定行進行寫入
第一步. 打開excel檔案:使用load_workbook(譯:樓的我的不可)傳入檔案名,默認active 獲取第一個表單,否則獲取指定的表單
獲取表頭的資訊,使用iter_rows(艾特木肉絲)方法,嵌套元祖的元祖,省略最小行號
zip函式將表頭的元祖與每一行用例所在的元祖進行拼接,dict轉換為字典后,添加到串列當中one_list = []
handle_log.py:(憨豆.啷個)py檔案是,使用 logging (啷個應)模塊,來創建日志器, 記錄專案中的日志資訊;import logging
1. 定義日志收集器,使用.getLogger方法,收集器的名字case
2. 指定日志收集器的日志等級,使用logging物件中.setLevel方法(賽特,萊歐)
3. 定義日志輸出渠道
輸出到控制臺,使用logging(老根)當中的.StreamHandler(絲錐木汗都)
輸出到檔案,使用logging(老根)當中的.FileHandler(發偶,憨豆)方法,(指定檔案名, 默認a以追加的方式,)
4. 指定日志輸出渠道的日志等級,使用物件.setLevel(賽特,萊歐)方法
5. 定義日志顯示的格式,logging(老根)當中的 Formatter(佛梅特) 函式
6. 對接, 將日志收集器與輸出渠道對接,收集器中addHandler(按得,憨豆)函式
handle_mysql.py:(憨豆.滿色口)py檔案是 MySQL 資料庫封裝;
使用 pymysql 庫來連接 mysql 資料庫,進行資料庫操作的封裝;主要是執行sql陳述句, 進行資料校驗;import pymysql
import random (譯:軟的木),Python中的 random 模塊用于生成亂數
1.建立鏈接,使用 pymysql 庫中的 connect(可耐科特)
2.創建游標 cursor(烤色)
3.需要執行 sql 陳述句
4.執行那條 sql 陳述句,使用 游標 當中的 execute(埃克斯Q特)
5.手動提交,使用 鏈接物件當中的 commit(可買次)
6.獲取執行結果,使用 游標 當中的 fetchone(翻吃萬)
7.關閉鏈接,釋放資源 close(科樓司)
先關游標 cursor.close()
再關閉游標物件 conn.close()
handle_request.py:(憨豆.瑞快死特)py檔案是 requests 請求庫的封裝;
使用 requests (瑞快死特)庫用來向介面發起請求的封裝;import requests
handle_user.py:(憨豆,有責兒)py檔案是
使用 上面封裝的:資料庫操作,requests 介面請求封裝、組態檔封裝類、來創建 一個用戶
run.py:入口檔案,收集并執行測驗用來
自動識別加載測驗用例的方法:discover (譯:迪斯卡瓦)方法
先加載測驗用例
使用 unittest 中 defaultTestLoader(譯:滴fao的.泰斯特.樓澤)中 discover(迪斯卡瓦)方法
第一種,使用 . 代表當前py檔案所在的路徑,自動加載以 test 開頭的 py 檔案模塊
第二種,使用絕對路徑加載,使用 r 進行轉碼
執行用例
1.需要創建執行器物件,使用 unittest 當中的 TextTestRunner(譯:泰斯特.泰斯特.軟那兒)
one_runner = unittest.TextTestRunner()
2.運行套件
one_runner.run(one_suite)
能夠 web 自動化測驗框架,采用 PO 模式和關鍵字驅動思想,使用 Python 中的 pytest 框架結合 selenium 模塊和 allure 插件,實作測驗用例自動化執行
8、pytest 和 unittest 的區別?
首先 unittest 是 pytest 官方庫,兼容性更好更穩定,pytest 在安裝的時候可能會出現和 Python 的版本出現兼容問題;
在 用例撰寫上面,unittest 當中,用例都是以類的形式撰寫的,并且都要繼承于這個 testcase;
pytest 當中,支持函式 和 類兩種形式,并且 pytest 有 conftest.py 這個檔案來支持全域的共享前置后置;
在 用例收集上, unittest 當中,要利用 testloader he testsuite 來主動收集和加載用例;pytest 當中,能夠自動識別用例;
在 用例分類和篩選上面,unittest 當中,對現有的用例進行一個篩選和處理的話是比較麻煩的;pytest 當中,可以通過打標記來輕松實作用例篩選;
在 運行失敗的機制上面,unittest 當中,官方庫并沒有提供失敗重啟的機制;pytest 當中,自帶的失敗重運行機制;
在 運行程序上面,unittest 當中,沒有支持的插件;pytest 當中,有 700 多個插件,可以支持的插件非常豐富;
9、串列推導式是什么?
推導式 是 Python 中用來生成資料的一種高級用法,Python 不僅有串列推導時,還有字典推導式、集合推導式、生成器運算式;
它的語法都是一樣的,都是通過 for 回圈來創建資料的一種簡寫的方式;
10、什么是 PO 模式?
PO模式:全稱:Page Object Model (譯:配只.奧播摘可t.毛豆)簡稱POM,叫做頁面物件,針對頁面、UI界面;
PO 思想主要來源于 馬丁福勒(marktin Flowwer)在 2004年發表的一篇文章最開始他不叫 PO ,而是叫做 window driver ,后來 selenium 沿用了這種思想,所以改成了 PO;
主要用途:是把一個具體的頁面轉化為編程語言當中的一個物件,頁面特性轉化成物件屬性,頁面操作轉化為物件方法;
在自動化測驗當中,主要用來實作對頁面操作和測驗邏輯的一個分離;
11、最熟悉的 selenium 操作?
基本上 selenium 提供的一下幾大類操作都能夠靈活使用,比如說:八大元素定位方式、三大等待方式、用戶點擊、輸入等常見操作、
還有視窗切換、iframe 切換操作,比如說 actionchains 檔案上傳、JS操作 等一些復雜問題的操作;
對于 selenium 還沒有提供現場封裝方法的話 會查閱 W3C 組織提供的 webdriver 標準進行自己進行捕捉;
12、selenium 中登錄按鈕除了 click 還有什么方式?
還有這兩種方式:比如說要用到 物理鍵盤進行操作,發出回車指令;然后,如果說這個登錄按鈕,在一個表單里面的話,也可以在定位到這個用戶輸入框,輸入完了之后,直接用3D 方法進行提交
13、PO 模式的封裝原則有哪些?
selenium 在官方的 wiki 上面給我們提供了六個原則,實際測驗程序中可以這么理解:
第一個原則是,公共方法表示頁面提供的一個服務,比如我們可以把 登錄封裝成一個 logo 的方法,把搜索方法封裝成一個設施方法,把注冊操作封裝成一個 register 的方法;
第二個原則是,盡量不要暴露頁面的內部;比如說一個HTML的頁面還有一個頁面的上下結構;
第三個原則是,在 PO 當中一般不做斷言,會做到頁面邏輯和測驗邏輯的分離
第四個原則是,PO 一般里面的方法回傳 self 或者是其他的 Page Object 也可以是一個元素屬性
第五個原則是,整個 PO 你不需要封裝整個頁面的行為,用到什么邏輯就封裝什么
第六個原則是,對于統一操作,如果出現不同的結果,可以把用不同的方法來表示,比如說登錄成功有跳轉,登錄失敗有報錯,
如果登錄還有一種會授權的狀況,那么可以封裝成三個單獨的方法:login success、login error、login invalid
14、Python 中的小整數池你有了解過嗎?
小整數池 是指在運行 Python 程式的時候,Python 解釋器會自動創建,負 5 到 256 之間的整數物件,保存到快取里面,也就是我們所說的小整數池;
當程式中將這些整數復制給變數的時候,那么 Python 解釋器,就會不斷重新去分配記憶體去創建這個物件了,而是直接參考,已經創建好的快取里面的物件;
小整數池這個設計的初衷是為了優化程式的運行效率,需要相同的整數的時候,直接從這個整數池里面拿出來就可以用,可以避免頻繁去創建和銷毀這個物件,提升效率、節約記憶體;
15、Xpath 和 CSS 選擇器有什么區別?
CSS 的寫法會簡單一點,xpath 會相對復雜一些,在主流瀏覽器中,CSS 的決議的效率更高一點,查找的速度會更快;
Xpath 支持的函式更多,操作的方式靈活功能會強大一點,對于復雜的元素定位,xpath 反而會更加簡潔;
CSS 它不支持 文本定位;Xpath 是支持文本定位的;
16、需要鑒權的介面,你是如何處理的?
首先,確認一下介面是采用什么方式進行的鑒權的,是 cookie_session 還是 token ;
如果是 cookie_ session 的方式,那么可以直接用 requests 模塊里面的 session 類去創建一個物件直接發送請求,它會自動記錄 cookie 資訊;
如果是 token ,那么先分析 token 是怎么回傳的,然后提取對應的 token 的值,在發送請求的時候需要根據需求傳入這個 token ;
17、UI 自動化中常用的等待方式?
UI 自動化測驗當中等待的方式 主要有三種:
第一種,強制等待,一般情況下我們不太使用;他主要用的場景在于不同系統互動的地方;
第二種,隱式等待:這種等待比較智能,它可以通過全域配置,但是智能用于元素定位;
第三種,顯示等待:是 selenium 當中比較靈活的一種等待方式;他的實作原理,其實是通過 while 回圈不停的嘗試需要進行的操作;
19、find_element() 和 find_elements() 有什么區別?
find_element() :回傳找到的第一元素,如果找不到的話會直接報錯;
find_elements() :會回傳所有符合條件的元素,放到一個串列里面;如果找不到的話也不會報錯,回傳的是一個空串列;
20、什么是 XPATH ?
Xpath 是 XML 路徑語言(XML Path Language),可以用來查詢各個網頁當中的元素位置,我們在自動化測驗程序中呢,可以對 網頁 和 APP 頁面的元素進行精準定位
然后在爬蟲領域可以對頁面結構進行靈活的決議
21、request 模塊發送請求的時候,怎么傳遞引數?
首先要確認一下介面的請求引數是什么型別的,如果介面需要的是查詢字串引數的話,那么就是 params 查;如果介面需要的是 json 型的引數的話,那么就直接使用 json 去查;
如果是 上傳檔案 的情況的話,那么可以通過 files 的引數來傳遞;
如果是 表單型別 的情況的話,那么可以使用 data 來傳遞,data 默認就是用來傳遞表單型別的引數;
那么當使用 data 傳參的時候,也可以在那個請求頭中,通過 content type 來指定這個請求引數的型別
22、selenium 自動化如何進行檔案上傳?
如果是 input 元素的檔案上傳,可以通過 selenium 當中的 send_keys 方式進行傳遞,但是這種方式局限性比較大,如果遇到像通過 js 呼叫的組件呢,會有一些問題;
這個時候就需要通過一些和系統互動的方式去完成上傳操作,比如通過 autoit,pywinauto 或者是 pyautogui 這些第三方庫進行操作
23、串列反轉的幾種方式?
第一種,是可以通過倒序切片反轉,然后步長是 -1,;
第二種,是可以通過 串列的方式,串列有一個方法叫做 reverse (譯:瑞外兒四),可以實作反轉;
24、Python 中的類方法、實體方法、靜態方法 有何區別?
類方法就是 類的方法,在定義的時候需要在上方加上一個 @classmethod 進行修飾,形參是 cls;類 和 實體 都是可以去呼叫;
實體方法是 實體物件方法,只有實體物件可以呼叫,類是不能呼叫的,形參是 self 指的是物件本身;
靜態方法是一個任意的函式,只是剛好放在這個類里面,他需要在上方加上一個 @staticmethod 進行修飾,可以使用物件直接呼叫;,靜態方法跟這個類沒有太大的關系;
25、Python 當中的裝飾器是什么?
裝飾器 又叫 修飾器,是Python 中的高階語法,裝飾器可以通過 類 或者 函式 來實作,通常使用 @ 符號來表示一個裝飾器;
作用:是用來擴展投個 函式 或者 類 的功能
26、Python 中的深復制 和 淺復制有什么區別?
深淺復制 通常是在資料嵌套的情況下討論,當被嵌套的資料是 可變型別 的資料的情況下,對這個資料進行復制的時候,我們就要考慮到這個深淺復制;
淺復制,比如說,串列嵌套串列,串列中自帶的 copy 方法進行復制就是 淺復制;
呼叫 copy 方法復制串列的時候,只會復制這個串列,串列中參考的其他資料(比如嵌套的串列)不會進行復制,是直接參考;
淺復制由于復制的不徹底,原串列參考的資料發送變化的時候,那么復制之后的資料也會受到影響
深復制,就要用到 copy 模塊里面的 deepcopy 方法,呼叫 deepcopy 方法復制串列的時候,不僅會復制這個串列,而串列中參考的其他資料(比如嵌套串列)也會進行復制;
27、什么是 PEP8 規范?
PEP8規范 又叫 Python8號增強提案,他主要針對于 Python 代碼撰寫風格,而制定的一個指南;
比如:首先在一個模塊中,模塊中的函式 或者 類,他們的間隔是兩行;然后類里面的方法,他們間隔是一行;代碼行的縮進通常用一個 tab 鍵 及四個空格來表示;
然后一行代碼 PEP8的規范里面指出來,最大應該是79個字符;
關于這個規范還有很多要求,也就不一一舉例了;
28、Python 函式的多載機制是什么?
函式多載主要是為了解決兩個問題:第一個,是可變引數型別,第二個,是可變引數個數;
在 Python 當中引數不需要申明型別,函式是可以接受任何型別的引數的;如果函式的功能相同,一個函式就可以處理了;
在 Python 當中通過 一個 * 號 和 兩個 ** 號 來處理可變引數個數;所以在 Python 里面他不需要處理函式多載;
29、Python 中常見的 可變引數型別 和 不可變引數型別 都有哪些?
不可變的資料型別包括:整數、浮點數、負數、布林值、字串
可變引數型別包括:字典、串列、集合、元祖
30、你的專案是什么階段介入介面自動化測驗的?
首先,我這個專案是一個全新的專案,我負責介面測驗,另外五個人負責功能測驗;因為是新專案,所以我在專案開發階段,我就開始介入介面自動化;
撰寫了自動化用例,我們使用 yapi 平臺管理介面的,相當于是提供了介面檔案,由于介入的時間比較早,在這個程序當中,自動化發現了 幾百個 bug;
為了后面的功能測驗人員節約了很多時間,同時也能夠保證,跟的上頻繁上線的步伐;
31、關于 Python 中的 intern 機制,你有了解過嗎?
在運行 Python 程式的時候,會專門分配一塊空白的記憶體空間,用來保存由數字、字母、下劃線組成的字串,也就是純單詞、字符組成的字串,
這塊空白的記憶體就被稱為 字串駐留池,也稱作 大整數池;
所謂的 intern 機制,就是在程式運行程序中創建新的字串的時候,首先根據這個字串,駐留池里面查找是否這個字串,在這個駐留池里面是否已經創建了;
如果有的話就已經直接拿過來用,如果沒有的話就在重新創建;創建之后如果是一個純單詞字符的話,會加入到這個駐留池當中,這樣的一個機制,能夠避免頻繁的創建和銷毀;
這個物件能夠提升我們程式的一個運行效率;
32、Python 中 *args 和 **kwargs 的作用?
都是不定長,可以解決函式中引數不固定的問題,*args 可以把位置引數轉化成元祖;**kwargs 可以把 關鍵字引數轉化成字典;
33、行程,執行緒,協成,你是怎么理解的?
行程是作業系統資源分配的基本單位;執行緒是作業系統調度的基本單位;協成 也叫 微執行緒,協成 存在于執行緒 之中,是比執行緒更小的可執行單元;
行程和執行緒可根據作業系統的調度,有可能是并發執行,有可能是并行;協成在一個執行緒之中,只能并發不能實作并行
34、Python 的多執行緒有什么缺點?
根據 Python 官方檔案知道,由于 Cpython 解釋器的全域解釋器鎖的存在,那么多執行緒在同一時刻只能有一個執行緒執行,
意思就是說 Python 中的多執行緒只能并發執行,沒有辦法實作真正的并行;也就是無法利用多核 CPU 的資源
35、Python 如何去操作 MySQL 資料庫?
可以使用的庫有幾個:pymysql、或者是 mysql_clinet 都可以進行連接;建立游標物件以后就可以直接執行 SQL 陳述句了
36、Python 總什么是 命名元祖?
命名元祖 是 Python 提供的一個叫做 namedtuple 的類,可以從 collection 包中匯入,命名元組繼承自 元祖類,所以具備元組的特性,
同時他可以訪問屬性的方式去獲取,元組的元素可讀性大大的提高,也可以非常方便的轉換成像字典這樣型別;
37、函式的引數定義有幾種方式?
必傳引數、默認引數、可變長引數
38、類里面去定義方法有幾種形式?
分別是 實體方法、靜態方法、類方法
類方法 和 實體方法 它都是跟類 或者 實體 有關系,它們的引數總是一個 實體 或者 類
但是 靜態方法 就是一個普通函式,只不過我們剛好把他扔到了這個類的里面而已,它的引數沒有說一定要是 類 或是誰;
39、unittest 框架的幾個概念,幾個組件?
一共有五個概念:
TestCase :是用來撰寫測驗用例的,我們所撰寫的所有測驗用例都需要繼承 testcase 這個類;
TestSuite :是用來加載測驗用例的容器,也就是一個測驗套件,
TesttLoader :是用來收集測驗用例的,并加載到這個測驗套件里面的;
TestTestRunner :是用來運行測驗用例,并生成文本形式的報告的;我們可以換成 HtmlTestRunner 來生成 HTML 格式的報告;
fixture :是就是夾具,用例或者 用例的前置和后置作業可以在這個里面做
40、Python 中的魔術方法了解過嗎?
有了解過,Python 類當中內置的那個雙下劃 開頭 和 結尾 的方法,都叫做 魔法函式,它是在特定的情況下除法的;
比如說:類的初始化 init,它就是在創建物件的時候會自動呼叫,用于初始化物件;
Python 當中有很多的特性,都是通過魔術方法來實作的,
41、Python 中如何定義匿名函式?
Python 中定義匿名函式非常簡單,通過 lambda 運算式來定義就可以了;
lambda 運算式的基本句法是:lambda 空格 然后加上函式的引數,接下來在冒號后面跟上函式的回傳值;
42、Python 中 queue 模塊佇列 和 行程 queue 佇列,有什么區別?
queue 模塊中的 Queue 只能在同一個行程中進行通信,只能實作多執行緒的資料互動,不能實作多行程的資料互動;
那么 行程 模塊當中的 Queue 可以跨行程使用,能夠實作多行程進行資料互動,
43、同步請求 和 異步請求 的區別?
同步請求,是指在一個執行緒當中,如果你發起一次請求以后,在收到回傳結果之前,你是不能發起下一次請求的;
異步請求,是指在 同一個執行緒當中,如果你發起一次請求以后,在等待回傳結果的這段時間之內,你可以繼續去發起其他的請求
44、Python 中 with 操作檔案為什么不用手動關閉,原理是什么?
Python 中的 with 關鍵字,它是用來啟動一個物件的背景關系管理器的;
他的原理是:當我們使用 with 去通過 open 打開檔案的時候,它會觸發檔案物件的背景關系管理器,然后當 with 當中的代碼運行結束后,會自動去呼叫背景關系管理器的退出方法;
在這個方法中他會去呼叫 close 來關閉檔案,所以不需要我們手動去關閉檔案;
45、Python 中的垃圾回識訓制是什么?
我們常用的Python 解釋器 CPython 主要使用了三種垃圾回識訓制來完成對這個無效資料的回收以及記憶體的釋放,分別是:參考計數、標記清除 還有 分代回收
垃圾回收的策略 是以這個參考計數為主,然后 標記清除 和 分代回收 只是做一個輔助性的手段;
46、curl 和 wget 有什么區別?
curl 是一個更加強大的網路訪問工具,有非常強大的引數傳遞系統,不僅支持 HTTP 協議,還有像 FTP 這樣的協議 非常非常多;
如果想簡單的發送一個請求,用 wget 就可以;如果你要專職的測驗這個網路,還是用 curl 會更加安心一些
47、什么是編碼 和 解碼?
編碼是從一種形式或格式通過一定的規則轉換成另外一種形式的程序;解碼就是相反的;
比如說編程當中的字串,我們經常需要通過 UTF-8格式 把他編碼成二進制的格式;然后解碼的程序是,把這個二進制的格式,在轉換成字串的格式;
48、序列化 和 反序列化 的區別?
簡答來說 序列化,將物件轉化成一個位元組流的程序,反序列化,就是把位元組流轉化成一個物件的程序;
在介面自動化測驗當中,我們經常需要把 編程語言的物件,轉換成 json 格式,這個就是一個序列化的程序;
如果我們需要把 json 轉化成 編程語言物件,這就是反序列化的程序
49、框架 和 庫 有什么區別?
庫 是代碼的集合,供程式員呼叫;就是 庫為我們提供了很多封裝好的函式,看起來零零散散的,但是我們使用起來比較靈活;
而 框架 就是為了解決刻一個 或者 是為一類問題而設計的;框架為我們提供了一條龍服務一整套服務,經常會制定很多規則 或者 約束,一個框架呢通常來說會呼叫很多的庫;
總的來說 庫 更加靈活,而 框架使用起來會更加的方便
軟體測驗面試檔案
我們學習必然是為了找到高薪的作業,下面這些面試題是來自阿里、騰訊、位元組等一線互聯網大廠最新的面試資料,并且有位元組大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的作業,
這些資料你都可以進入我們的軟體測驗學習交流群:【914172719】,備注“入群”可自取這份檔案, 大家也可以一起探討交流,共同學習軟體測驗技術、面試等軟體測驗方方面面,還會有免費直播課,識訓更多測驗技巧,我們一起進階Python自動化測驗/測驗開發,走向高薪之路,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551440.html
標籤:其他
上一篇:從不均勻性角度淺析AB實驗
下一篇:返回列表

