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

你可以在公眾號:傷心的辣條 ! 自行領取一份216頁軟件測試工程師面試寶典文檔資料【免費的】。以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Shell、互聯(lián)網(wǎng)程序原理、Mysql數(shù)據(jù)庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續(xù)集成、測試架構開發(fā)測試框架、性能測試、安全測試等。
現(xiàn)在我邀請你進入我們的軟件測試學習交流群:【746506216】,備注“入群”, 大家可以一起探討交流軟件測試,共同學習軟件測試技術、面試等軟件測試方方面面,還會有免費直播課,收獲更多測試技巧,我們一起進階Python自動化測試/測試開發(fā),走向高薪之路。