接口/UI自動化面試題

一、UI自動化

1.1、接口和UI自動化有多少用例?

  • 回答策略:根據接口設定用例,100個接口,自動化case在1500-2000左右。結合自身的項目,回答覆蓋的主功能流程。

  • 示例:

    • 接口自動化的測試case一般需要根據接口數量來確定,我當時將主功能流程接口實現了自動化,大概將近有80個的接口,case數量將近1000個;主要涵蓋了賬戶體系管理、合約簿記、出入金管理、流水錄入、資金清算、生成報表等核心業務流。通過數據驅動(YAML文件)實現參數化。

    • UI自動化一般根據業務功能進行設計,實現近200個用例自動化,涵蓋主回歸流程測試。主要需要考慮其底層的穩定以及后續維護成本,通常是30%的自動化覆蓋率。

1.2、什么是POM模式

  • 概述:POM全稱叫page object model,頁面對象模型。意思是把一個頁面當成一個對象,頁面的元素就是對象的屬性,頁面的操作就是對象的行為(方法)。一般情況分三層:基礎封裝層BasePage、PO頁面對象層、TestCase測試用例層。

    我這里是采用PO的設計模式,大致分成了基礎驅動層用于元素的定位和瀏覽器的操控;第二層是頁面對象層,將整個頁面的元素和功能進行封裝;第三個是業務邏輯層,是通過組合不同頁面中的功能實現用例中的業務流程;第四個數據管理層管理測試數據;用例執行層,用于用例的執行、斷言、日志和報告生成等。
    
  • 優點

    • 使得用例更簡單、更清晰,把很多業務操作封裝到PO頁面對象層,用例只需要調用即可。

    • 如果頁面有變動,只需要修改PO頁面對象層的屬性即,增加代碼的可維護性。

1.3、如何提高UI自動化的穩定性

  • 盡量使用相對路徑定位元素

  • 定位元素使用封裝顯示等待,增加條件

  • 用例和用例之間盡量避免依賴

  • 加入用例失敗重跑機制

  • 自動化測試的環境區分其他環境

1.4、談談印象最深的bug

1.4.1、腳本定位問題

在編寫自動化腳本時,遇到過像瀏覽器更新后,自動化測試用例會出現誤報的問題。

解決方式:1. 針對這個問題,我首先是思考影響范圍,比如其它瀏覽器是否有類似的情況存在,并對比不同瀏覽器原因是否都一致;2. 當我將一些影響因素排除之后,自己就通過網上查閱官方的文檔,學習和借鑒其他人的一些更改方法;嘗試去調整代碼的定位策略,如元素屬性和層
級關系,盡可能用相對路徑進行定位;以及更改了等待方式,通過在顯示等待中加了一些判定條件;增加用例失敗重跑機制等多種方式去規避這類問題,最終
問題得到了解決,并且我在后續會定期的去更新測試代碼,保證穩定性。

1.4.2、對比工具性能問題

在開發報表對比工具時,遇到了數據量大導致處理慢和數據格式不一致的問題。

解決方式:1. 首先,通過使用Pandas庫中的chunksize分塊讀取數據,避免內存過載,同時利用Pandas的向量化操作和分組聚合功能,提高處理能力;并行計算:
利用Dask加速計算;數據庫優化:添加索引的方式,減少查詢時間。2.  另外,針對格式問題,讀取數據后 統一設置相關列的數據格式。通過這些方法,解決了上述的問題。

1.5、遇到的挑戰

發現整體版本流程自動化覆蓋率很低,開發提測質量差,嚴重影響版本交付進度。

解決方法:1. 首先,我通過優先整理主功能流程,將回歸用例實現自動化全覆蓋,在開發腳本的過程中,我也在思考后續的用例如何便于維護,因此我通過引入PO
設計模式,并結合產品業務,大致分成了元素定位層、頁面操作層、業務邏輯層、數據管理層和用例執行層;此外,針對開發提測質量差的問題,我通過
Jenkins集成了自動化打包與用例執行自動化,在開發代碼提測后,會自動進行打包,并執行主功能用例,如果執行不通過,則代碼打回,將報錯的截圖和日志發送給開發。2.  需要將相關的依賴包批量移動和替換到指定的位置。3.  正則表達式+遞歸搜索的方式,篩選指定的路徑以及文件名稱解決了這個問題。

二、接口自動化

2.1、接口關聯是如何處理的

通過一個yaml文件獨立保存所有接口提取的變量,并且這個變量在執行用例之前清空;(truncat())

  1. 在測試用例的yaml文件里通過一個關鍵字extract提取標量:json或者正則表達式提取

  2. 在下一個接口通過{{}}或${}的(熱加載)方式進行獲取。

    熱加載:代碼執行過程中,動態調用Python中的方法達到或得到動態參數的目的。
    

2.2、requests中的Session會話管理的作用是什么

  1. 首先,因為很多接口都需要cookie和session來記錄登錄狀態,并且必須要有這個登錄狀態才可以請求成功;

  2. Requests中的Session會話管理的作用就是自動記錄cookie和Session的登錄狀態,不需要再手動去記錄。

2.3、接口自動化測試中的斷言是如何實現的

  1. 首先,把斷言封裝成一個方法,這個方法會讀取yaml文件里的validate字段,包括斷言的方式和數據;

  2. 然后,在后臺實現了斷言,并體現在報告中,不需要再寫任何的Python代碼。

2.4、數據驅動和關鍵字驅動的理解

  • 數據驅動概念:從數據文件(Excel、CSV、數據庫)讀取輸入、輸出數據,然后通過變量傳入自動化用例中,測試數據都是在數據文件中,通過修改數據達到自動化用例執行的方式叫做數據驅動;

  • 關鍵字驅動:是從面向對像的思維出發,將同樣的業務邏輯封裝成一個函數,不同關鍵字實現不同的業務邏輯,這樣業務邏輯就可以通過調用關鍵字來實現業務功能。

2.5、接口測試過程中遇到過哪些bug

常規Bug:接口沒有實現、沒有按照接口文檔返回結果、接口報錯。

如:我在測試資金賬戶接口時,其中當前名義本金參數,我改成了負值也能創建成功。

2.6、怎么校驗結果是否正確

  • 狀態碼校驗:驗證返回的狀態碼為200。

  • 業務校驗:

    • 錯誤碼為0。

    • 當接口響應報文比較短,比較固定情況下,校驗完全一致。

    • 響應報文比較長,校驗核心最核心的業務信息。

    • 響應報文比較復雜,多層級XML或JSON格式,通過Xpath、正則表達式的匹配方式獲取關鍵字的業務節點進行校驗。

    • 查詢數據庫校驗或者通過其它接口進行校驗。

2.7、碰見過哪些異常,用到了哪些Python庫

  • 異常

    • NoSuchElementException 沒有該元素

    • NoSuchAttributeException 沒有該屬性

    • NoSuchElementException 沒有如此框架

    • ElementNotVisibleException 元素不可見異常

    • ElementNotSelectException 元素不可選

  • python庫

    • webdriver、os、time、json、request、pytest、pymysql

2.8、報表對比工具實現邏輯

  1. 數據接入

    1. 通過使用pandas解析報表(Excel/CSV)內容;

    2. 通過pyodbc連接數據庫,并查詢相關的數據庫表字段;

  2. 校驗規則設計

    1. 靜態校驗:字段是否為空、數據類型(浮點、保留位數);

    2. 業務邏輯校驗:將報表的字段與數據庫查詢的字段根據業務邏輯進行比較校驗

  3. 結果通知

    1. 通過發送郵件的方式告知相關的執行結果。
  4. 遇到的問題:性能處理

    1. 分塊處理:chunksize讀取報表數據,避免內存溢出

    2. 并行計算:利用Dask加速計算

    3. 數據庫優化:添加索引的方式,減少查詢時間

2.9、如何開展接口自動化測試(思維)

  1. 目的:為什么要做接口測試?

    1. 提效。人工、持續集成、交付
  2. 首先,我需要自動化的可行性分析,自動化率可以實現到什么樣的程度。

  3. 其次就是需要選擇合適的測試工具,做一個小的demo進行演示。

  4. 第三就是制定詳細的測試計劃,包含測試環境、測試范圍、測試用例設計,相對應的時間節點等;

  5. 第四就是用例的設計,我需要從新建波形到最后生成可執行文件,詳細測試相關的文件是否符合標準規范。

  6. 第五根據業務對自動化框架進行分層便于后續的腳本更新和維護。

    1. 我這里是采用PO的設計模式,大致分成了基礎驅動層用于元素的定位和瀏覽器的操控;

    2. 第二層是頁面對象層,將整個頁面的元素和功能進行封裝;

    3. 第三個是業務邏輯層,是通過組合不同頁面中的功能實現用例中的業務流程;

    4. 第四個數據管理層管理測試數據;

    5. 用例執行層,用于用例的執行、斷言、日志和報告生成等。

  7. 再考慮引入Jenkins的方式持續集成和定時運行。

  8. 將自動化流程化,出具相關的使用說明文檔和規范文檔。

  9. 后續持續不斷完善框架功能。

  10. 比如在軍工通信項目中,我對波形建模流程測試時,首先是確保頁面元素沒有問題,通過使用邊界值、因果圖法的測試方法測試輸入值是否有異常;其次再對實際的接口進行調用測試,確保后臺功能接口能夠正常傳參返參;之后再根據需求,設復雜的測試業務場景,通過mysql后臺查詢相關數據,確保實際結果與預期結果統一;

  11. 如果出現問題時,通過截圖的方式,將報錯頁面以及后臺報錯日志通過加上時間戳的方式保存在本地,當時我也通過jenkins將截圖和日志歸檔在構建完的產物中,便于后續的歷史回溯。

2.10、對于加密接口、簽名接口如何進行測試

  • 加密接口:在調用接口時,需要清楚接口的方式是什么。如:
    • 對稱式的加密方式(私鑰加密):Base64。
    • 非對稱的加密方式(雙鑰加密):RSA加密方式。
    • 只加密不解密:MD5、SHA1。
    • 自定義加密規則:混合加密方式。
  • 清楚加密規則后,在請求接口之前,先對參數做對應的加密之后再發送請求。單一加密方式,postman和Jmeter有些支持。Poatman使用JavaScript腳本實現,Jmeter使用beanshell中的java代碼實現。

2.11、依賴于第三方數據的接口如何進行測試

可以通過Postman搭建Mock服務,但是Postman的Mock服務由訪問次數限制,一天只能訪問1000次。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73459.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73459.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73459.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Docker部署RabbitMQ

第一步:安裝 RabbitMQ # 1. 拉取鏡像 docker pull rabbitmq:3.12.0-management# 2. 啟動容器(開放端口 數據持久化) docker run -d \--nameshare_rabbitmq \-p 5672:5672 \ # AMQP 協議端口-p 15672:15672 \ # 管理界面端口…

2.基于多線程的TCP服務器實現

目錄 1. 簡單分析之前的代碼 2. 多線程服務器設計 2.1 C11線程的基本使用 2.2 服務器主體邏輯 3. 錯誤處理的封裝 4. 完整的代碼實現 客戶端代碼(client.cpp) 服務器代碼(server.cpp) 5. 運行方式 在我們預想中&#xff…

Python Web 框架 Django、Flask 和 FastAPI 對比

在探索 Python Web 框架時,Django、Flask 和 FastAPI 無疑是最常被提及的名字。根據我們最新的 Python 開發者調查,這三大框架繼續穩坐后端 Web 開發的熱門寶座。它們均為開源項目,并且與 Python 的最新版本無縫兼容。然而,面對不…

SQL Server數據庫表刪除分區

在 SQL Server 中刪除分區并將表恢復到非分區狀態,需按以下步驟操作: 一、合并所有分區 1. 檢查現有分區結構 首先確認表的分區方案和分區函數: -- 查看分區方案 SELECT * FROM sys.partition_schemes;-- 查看分區函數 SELECT * FROM sys…

信息安全和病毒防護——安全協議關于SSL和TLS協議的補充說明

文章目錄 SSL與TLS的關系SSL與TLS的核心區別SSL/TLS的典型應用安全建議總結SSL與TLS的關系 SSL(Secure Sockets Layer,安全套接層)和TLS(Transport Layer Security,傳輸層安全)是同一技術體系的演進版本,而非完全獨立的協議。其發展歷程如下: SSL 1.0(1994):未公開…

[原創](Modern C++)現代C++的關鍵性概念: 多維數組的下標引用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、C …

從零構建大語言模型全棧開發指南:第二部分:模型架構設計與實現-2.2.3實戰案例:在筆記本電腦上運行輕量級LLM

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 實戰案例:在筆記本電腦上運行輕量級LLM2.2.3 模型架構設計與實現1. 環境與工具準備1.1 硬件要求1.2 軟件棧選擇2. 輕量級模型架構設計2.1 模型參數配置2.2 關鍵技術優化3. 實戰流程3.1 數據準備流程3.2…

工業軟件的破局與重構:從技術依賴到自主創新的未來路徑

工業軟件作為現代工業的“神經與大腦”,不僅是制造業數字化轉型的核心工具,更是國家工業競爭力的戰略制高點。近年來,中國工業軟件市場在政策驅動與技術迭代中迅猛發展,但核心技術受制于人的困境仍待突破。如何實現從“跟跑”到“…

歌曲緩存相關功能

1. 核心組件 MusicCacheManager (音樂緩存管理器) 單例模式:確保全局只有一個實例,方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…

解決 Ubuntu/Debian 中 `apt-get` 報錯 “無法獲得鎖 /var/lib/dpkg/lock“

問題描述 在 Ubuntu/Debian 系統中運行 sudo apt-get install 或 sudo apt update 時,遇到以下錯誤: E: 無法獲得鎖 /var/lib/dpkg/lock - open (11: 資源暫時不可用) E: 無法鎖定管理目錄(/var/lib/dpkg/),是否有其他進程正占用它&#…

阿里開源的免費數據集成工具——DataX

企業里真實的數據流轉是什么樣子的呢? 左側描述了一個企業真實的樣子,我們總是需要把數據從一個地方搬到另一個地方,最后就是搬來搬去搬成了一張張解不開的網。 右側則表達了使用DataX為中心實現數據的同步。 什么是DataX DataX是一個異構…

26考研——圖_圖的遍歷(6)

408答疑 文章目錄 三、圖的遍歷圖的遍歷概述圖的遍歷算法的重要性圖的遍歷與樹的遍歷的區別圖的遍歷過程中的注意事項避免重復訪問遍歷算法的分類遍歷結果的不唯一性 廣度優先搜索廣度優先搜索(BFS)概述BFS 的特點廣度優先遍歷的過程示例圖遍歷過程 BFS …

前端解決方案:實現網頁截圖并導出PDF功能

前端解決方案:實現網頁截圖并導出PDF功能 在前端開發中,我們經常會遇到需要將網頁內容導出為PDF的需求。本文將以一個準考證預覽和導出的例子,帶你一步步實現這個功能。我們會處理包括跨域圖片、Canvas繪圖、PDF生成等多個技術要點。 一、基…

【MySQL】表操作

表操作 一、創建表 1、語句2、語句介紹3、注意事項4、介紹5、示例 二、查看表結構 1、語句2、介紹3、返回的信息4、示例 三、添加字段 1、語句2、語句介紹3、示例 四、修改 1、語句2、語句介紹3、示例 五、刪除 1、語句2、示例 六、修改表名 1、語句2、語句介紹3、示例 七、刪…

[新聞.AI]國產大模型新突破:阿里開源 Qwen2.5-VL-32B 與 DeepSeek 升級 V3 模型

(本文借助 Deepseek-R1 協助生成) 在2025年3月24日至25日的短短24小時內,中國AI領域迎來兩大重磅開源更新:阿里通義千問團隊發布多模態大模型Qwen2.5-VL-32B-Instruct,而DeepSeek則推出編程能力大幅提升的DeepSeek-V3…

深入剖析C# List<T>的底層實現與性能奧秘

一、動態數組的本質:List的架構設計 在C#的集合類型體系中,List作為最常用的線性數據結構,其核心實現基于動態數組機制。與傳統數組不同,List通過智能的容量管理策略,在保持數組高速隨機訪問優勢的同時,突…

【單元測試】

一、框架 不同的編程語言有不同的測試框架,以下是一些常見的測試框架: 1)Java:JUnit、TestNG2)Python:unittest、pytest3)JavaScript:Jest、Mocha4)C#:NUni…

機器學習——XGBoost

XGBoost(極度梯度提升樹,eXtreme Gradient Boosting)是基于GBDT的優化模型,其最大特性在于對GBDT的損失函數展開到二階導數,使得其梯度提升樹模型更接近其真實損失 其XGBoost分類樹擬合和預測方法的基本思路為: 遍歷所有的樹&…

響應“一機兩用”政策 ,實現政務外網安全

在數字化辦公的浪潮下,企業與政務機構面臨著既要保障數據安全,又要高效訪問互聯網的雙重需求。“一機兩用”成為解決這一難題的關鍵。 政策驅動,需求迫切 隨著《網絡安全法》《數據安全法》等法律法規的相繼出臺,網絡安全防護的要…

【后端】【Django】Django DRF API 單元測試完整方案(基于 `TestCase`)

Django DRF API 單元測試完整方案(基于 TestCase) 一、方案概述 使用 django.test.TestCase 和 rest_framework.test.APIClient 進行 API 單元測試,確保 API 正確性、權限控制、數據返回格式、業務邏輯 等。 二、基本步驟 使用 setUp() 初始…