最新接口自動化測試面試題

前言

前面總結了一篇關于接口測試的常規面試題,現在接口自動化測試用的比較多,也是被很多公司看好。那么想做接口自動化測試需要具備哪些能力呢?

也就是面試的過程中,面試官會考哪些問題,知道你是不是真的做過接口自動化測試?總的來說問的比較多的就是以下幾個問題:

1.json和字典的區別? -對基礎數據類型的考察
2.測試的數據你放在哪? -數據與腳本分離
3.參數化 - 數據驅動模式
4.下個接口請求參數依賴上個接口的返回數據 - 參數關聯
5.依賴于登錄的接口如何處理 -token和session的管理
6.依賴第三方的接口如何處理 -mock模擬數據返回
7.不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試 -造數據
8.接口產生的垃圾數據如何清理 - 數據清理
9.一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功 - 造數據,改數據庫訂單狀態
10.python如何連接數據庫操作?
11.其它的就是運行出報告、代碼管理(git)、運行策略和持續集成jenkins相關了

1.json和字典dict的區別?

現在自動化培訓爛大街,是個人都能說的上幾個框架,面試如果問框架相關問題,求職者只需一瓶82年的雪碧,會吹的讓你懷疑人生!
所以面試官為了更清楚的知道你是停留在表面上的花拳繡腿還是有扎實的基礎,就不會問框架這種東西了。基本上問幾個數據類型的基礎就知道有沒貨了。

那么json和字典到底有什么區別呢?初學者連python的基礎數據類型都沒搞清楚,直接擼框架,有的人學了幾個月可能都迷迷糊糊的,以為json就是字典。這個是肯定不對的。

首先python里面的基礎數據類型有:int、str、 float、list、bool、tuple、dict、set這幾種類型,里面沒json這種數據類型。

JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基于 ECMAScript (歐洲計算機協會制定的js規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

由于你的代碼是python寫的(也有可能是php,java,c,ruby等語言),但是后端接口是java寫的(也有可能是其它語言),不同的語言數據類型是不一樣的(就好比中國的語言和美國的語言數據類型也不一樣,中國的一般說一只羊,一頭牛,美國都是 a /an這種單位),所以就導致你提交的數據,別的開發語言無法識別,這就需要規范傳輸的數據(傳輸的數據都是一個字符串),大家都遵循一個規范,按一個標準的格式去傳輸,于是就有就json這種國際化規范的數據類型。

json本質上還是字符串,只是按key:value這種鍵值對的格式來的字符串

import json# a是字典dict
a = {"a": 1, "b": 2, "c": True}# b是json
b = '{"a": 1, "b": 2, "c": true}'print(type(a))
print(json.dumps(a))   # a轉json

運行結果

<class 'dict'>
{"a": 1, "b": 2, "c": true}
<class 'str'>
{'a': 1, 'b': 2, 'c': True}

2.測試的數據你放在哪?

測試數據到底該怎么放,這個是面試官最喜歡問的一個題了,似乎仁者見仁智者見智,沒有標準的答案,有的人說放excel,也有的說放.py腳本,也有的說放ini配置文件,
還有放到json,yaml文件,txt文件,甚至有的放數據庫,五花八門,一百個做自動化的小伙伴有100個放的地方。

這里總結下測試的數據到底該怎么放?

首先測試的數據是分很多種的,有登錄的賬戶數據,也有注冊的賬戶數據,還有接口的參數,還有郵箱配置的數據等等等等,所以這個題不能一概而論給答死了。要不然就是給自己挖坑。

以下兩個大忌不能回答:

測試的數據是不能寫死到代碼里面的,這個是原則問題,也是寫代碼的大忌(你要是回答寫在代碼里面,估計就是回去等通知了)
測試數據放到.py的開頭,這種其實很方便,對于少量的,固定不變的數據其實是可以放的,但是面試時候,千萬不能這樣說,面試官喜歡裝逼的方法
測試數據存放總結:

1.對于賬號密碼,這種管全局的參數,可以用命令行參數,單獨抽出來,寫的配置文件里(如ini)
2.對于一些一次性消耗的數據,比如注冊,每次注冊不一樣的數,可以用隨機函數生成
3.對于一個接口有多組測試的參數,可以參數化,數據放yaml,text,json,excel都可以
4.對于可以反復使用的數據,比如訂單的各種狀態需要造數據的情況,可以放到數據庫,每次數據初始化,用完后再清理
5.對于郵箱配置的一些參數,可以用ini配置文件
6.對于全部是獨立的接口項目,可以用數據驅動方式,用excel/csv管理測試的接口數據
7.對于少量的靜態數據,比如一個接口的測試數據,也就2-3組,可以寫到py腳本的開頭,十年八年都不會變更的

總之不同的測試數據,可以用不同的文件管理

3.什么是數據驅動,如何參數化?

參數化和數據驅動的概念這個肯定要知道的,參數化的思想是代碼用例寫好了后,不需要改代碼,只需維護測試數據就可以了,并且根據不同的測試數據生成多個用例
python里面用unittest框架

import unittest
import ddt# 測試數據
datas = [ {"user": "admin", "psw": "123", "result": "true"},{"user": "admin1", "psw": "1234", "result": "true"},{"user": "admin2", "psw": "1234", "result": "true"},{"user": "admin3", "psw": "1234", "result": "true"},{"user": "admin4", "psw": "1234", "result": "true"},{"user": "admin5", "psw": "1234", "result": "true"},{"user": "admin6", "psw": "1234", "result": "true"},{"user": "admin7", "psw": "1234", "result": "true"},{"user": "admin8", "psw": "1234", "result": "true"},{"user": "admin9", "psw": "1234", "result": "true"},{"user": "admin10", "psw": "1234", "result": "true"},{"user": "admin11", "psw": "1234", "result": "true"}]@ddt.ddt
class Test(unittest.TestCase):@ddt.data(*datas)def test_(self, d):"""上海-悠悠:{0}"""print("測試數據:%s" % d)if __name__ == "__main__":unittest.main()

unittest框架還有一個paramunittest也可以實現

import unittest
import paramunittest
import time
# python3.6
# 作者:上海-魚魚@paramunittest.parametrized({"user": "admin", "psw": "123", "result": "true"},{"user": "admin1", "psw": "1234", "result": "true"},{"user": "admin2", "psw": "1234", "result": "true"},{"user": "admin3", "psw": "1234", "result": "true"},{"user": "admin4", "psw": "1234", "result": "true"},{"user": "admin5", "psw": "1234", "result": "true"},{"user": "admin6", "psw": "1234", "result": "true"},{"user": "admin7", "psw": "1234", "result": "true"},{"user": "admin8", "psw": "1234", "result": "true"},{"user": "admin9", "psw": "1234", "result": "true"},{"user": "admin10", "psw": "1234", "result": "true"},{"user": "admin11", "psw": "1234", "result": "true"},
)class TestDemo(unittest.TestCase):def setParameters(self, user, psw, result):'''這里注意了,user, psw, result三個參數和前面定義的字典一一對應'''self.user = userself.user = pswself.result = resultdef testcase(self):print("開始執行用例:--------------")time.sleep(0.5)print("輸入用戶名:%s" % self.user)print("輸入密碼:%s" % self.user)print("期望結果:%s " % self.result)time.sleep(0.5)self.assertTrue(self.result == "true")if __name__ == "__main__":unittest.main(verbosity=2)

如果用的是pytest框架,也能實現參數化

# content of test_canshu1.py# coding:utf-8import pytest
@pytest.mark.parametrize("test_input,expected",[ ("3+5", 8),("2+4", 6),("6 * 9", 42),])
def test_eval(test_input, expected):assert eval(test_input) == expectedif __name__ == "__main__":pytest.main(["-s", "test_canshu1.py"])

pytest里面還有一個更加強大的功能,獲得多個參數化參數的所有組合,可以堆疊參數化裝飾器

import pytest
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):print("測試數據組合:x->%s, y->%s" % (x, y))if __name__ == "__main__":pytest.main(["-s", "test_canshu1.py"])

4.下個接口請求參數依賴上個接口的返回數據

這個很容易,不同的接口封裝成不同的函數或方法,需要的數據return出來,用一個中間變量a去接受,后面的接口傳a就可以了

5.依賴于登錄的接口如何處理

登錄接口依賴token的,可以先登錄后,token存到一個yaml或者json,或者ini的配置文件里面,后面所有的請求去拿這個數據就可以全局使用了

如果是cookies的參數,可以用session自動關聯

s=requests.session()

后面請求用s.get()和s.post()就可以自動關聯cookies了

6.依賴第三方的接口如何處理

這個需要自己去搭建一個mock服務,模擬接口返回數據

moco是一個開源的框架,在github上可以下載到https://github.com/dreamhead/moco

moco服務搭建需要自己能夠熟練掌握,面試會問你具體如何搭建 ,如何模擬返回的數據,是用的什么格式,如何請求的

7.不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試

此題考的是造數據的能力,接口的請求數據,很多都是需要依賴前面一個狀態的
比如工作流這種,流向不同的人狀態不一樣,操作權限不一樣,測試的時候,每種狀態都要測到,就需要自己會造數據了。
平常手工測試造數據,直接在數據庫改字段狀態。那么自動化也是一樣,造數據可以用python連數據庫了,做增刪改查的操作
測試用例前置操作,setUp做數據準備
后置操作,tearDown做數據清理

8.接口產生的垃圾數據如何清理

跟上面一樣,造數據和數據清理,需用python連數據庫了,做增刪改查的操作
測試用例前置操作,setUp做數據準備
后置操作,tearDown做數據清理

9.一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功

跟上面一樣,也是考察造數據,修改數據的狀態

10.python如何連接數據庫操作?

這個就是詳細的考察你是如何用python連數據庫的,并且最好能現場寫代碼那種(有的筆試題就是python連數據庫)
具體問你用到哪個模塊,查詢的數據是什么類型?如何刪除數據?如何新增數據?如何修改數據?
PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
詳情參考教程http://www.runoob.com/python3/python3-mysql.html
?

#!/usr/bin/python3
# 查詢EMPLOYEE表中salary(工資)字段大于1000的所有數據:
import pymysql# 打開數據庫連接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法獲取操作游標 
cursor = db.cursor()# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \WHERE INCOME > %s" % (1000)
try:# 執行SQL語句cursor.execute(sql)# 獲取所有記錄列表results = cursor.fetchall()for row in results:fname = row[0]lname = row[1]age = row[2]sex = row[3]income = row[4]# 打印結果print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \(fname, lname, age, sex, income ))
except:print ("Error: unable to fetch data")# 關閉數據庫連接
db.close()

其它的就是運行出報告、代碼管理(git)、運行策略和持續集成jenkins相關了,這個所以的自動化但是一樣的,后面會單獨講一篇jenkins持續集成相關


????????????? 【下面是我整理的2023年最全的軟件測試工程師學習知識架構體系圖】


一、Python編程入門到精通

二、接口自動化項目實戰?

三、Web自動化項目實戰


四、App自動化項目實戰?

五、一線大廠簡歷


六、測試開發DevOps體系?

七、常用自動化測試工具

八、JMeter性能測試?

九、總結(尾部小驚喜)

生命不息,奮斗不止。每一份努力都不會被辜負,只要堅持不懈,終究會有回報。珍惜時間,追求夢想。不忘初心,砥礪前行。你的未來,由你掌握!

生命短暫,時間寶貴,我們無法預知未來會發生什么,但我們可以掌握當下。珍惜每一天,努力奮斗,讓自己變得更加強大和優秀。堅定信念,執著追求,成功終將屬于你!

只有不斷地挑戰自己,才能不斷地超越自己。堅持追求夢想,勇敢前行,你就會發現奮斗的過程是如此美好而值得。相信自己,你一定可以做到!?

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?

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

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

相關文章

大數據面試總結 二

1、事實表主要分成幾種&#xff1a; 1、事務事實表&#xff1a;又稱作原子事實表&#xff0c;主要是用來描述業務過程&#xff0c;跟蹤控件或者時間上某點的度量事件&#xff0c;保存的是最原子的數據 2、周期事實表&#xff1a;以一個周期作為一個時間間隔&#xff0c;用來記…

2021版吳恩達深度學習課程Deeplearning.ai 05序列模型 12.5

學習內容 05.序列模型 1.1 為什么用序列模型 1.序列模型常見的應用 1.2 注釋 notation 1.*T_x(i)表示訓練樣本x(i)的序列長度&#xff0c;T_y(i)表示target(i)的序列長度2.訓練集表示單詞的方式*構建字典的方式*在訓練集中查找出現頻率最高的單詞*網絡搜集常用字典3.如果遇…

【C語言快速學習基礎篇】之一基礎類型、進制轉換、數據位寬

文章目錄 一、基礎類型(根據系統不同占用字節數會有變化)1.1、有符號整形1.2、無符號整形1.3、字符型1.4、浮點型1.5、布爾型 二、進制轉換2.1、二進制2.2、八進制2.3、十進制2.4、十六進制2.5、N進制2.6、進制轉換關系對應表 三、數據位寬3.1、位3.2、字節3.3、字3.4、雙字3.5…

程序員常用英文單詞

英語對于程序員來說多么重要應該無需過多解釋了&#xff0c;把近期在網上收集到的分享到這里供大家學習交流。 PS&#xff1a;感謝原作者的收集&#xff0c;謝謝。 A abstract 抽象的 abstract base class (ABC) 抽象基類abstract class 抽象類 abstraction 抽象、抽象物、抽象…

【數據結構高階】紅黑樹

目錄 一、紅黑樹的概念 二、紅黑樹的性質 2.1 紅黑樹與AVL樹的比較 三、紅黑樹的實現 3.1 紅黑樹節點的定義 3.2 數據的插入 3.2.1 紅黑樹的調整思路 3.2.1.1 cur為紅&#xff0c;f為紅&#xff0c;g為黑&#xff0c;u存在且為紅 3.2.1.2 cur為紅&#xff0c;f為紅&am…

【重點】【LCA】236. 二叉樹的最近公共祖先

題目 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root null || root p || root q) {return root;}TreeNode left lowestCommonAncestor(root.left, p, q);TreeNode right lowestCommonAncestor(root.right, p, …

【重點】【DFS】124.二叉樹中的最大路徑和

題目 和求二叉樹直徑相同套路 class Solution {private int max Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {if (root null) {return 0;}dfs(root);return max;}// 返回經過root的單邊分支最大和public int dfs(TreeNode root) {if (root null) {return 0;}…

IT新聞資訊系統,使用mysql作為后臺數據庫,此系統具有顯示數據庫中的所有信息和刪除兩大功能。

表的準備&#xff1a; -- MySQL Administrator dump 1.4 -- -- ------------------------------------------------------ -- Server version 5.1.40-community /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET OLD_CHARACTER_SET_RESULTSCHAR…

LTP測試

LTP 測試 LTP套件是由 Linux Test Project 所開發的一套系統測試套件。它基于系統資源的利用率統計開發了一個測試的組合,為系統提供足夠的壓力。通過壓力測試來判斷系統的穩定性和可靠性。壓力測試是一種破壞性的測試,即系統在非正常的、超負荷的條件下的運行情況 。用來評估…

mysql庫名規范

mysql庫名的一些規范和建議&#xff1a; 庫名以小寫字母、數字、下劃線組成&#xff0c;不要以數字開頭。建議不要超過32個字符&#xff0c;但盡量用簡短的名稱。因為很多地方用到庫名&#xff0c;如果庫名太長&#xff0c;容易出錯。庫名選擇有意義的名稱&#xff0c;盡量與應…

55.手寫實現grpc連接池以及gin和grpc交互

文章目錄 一、簡介前置說明 二、敏感詞過濾服務1、定義sensitive.proto文件2、protoc生成pb.go文件3、sensitive服務端實現 三、關鍵詞匹配服務1、編寫keywords.proto文件2、生成pb.go文件3、keywords服務端實現 四、gin web 路由服務1、新建grpcpool服務作為gin web服務2、根據…

GEE影像升尺度(10m->250m)

GEE影像升尺度&#xff08;10m->250m&#xff09; 代碼 var ext /* color: #d63000 *//* shown: false *//* displayProperties: [{"type": "rectangle"}] */ee.Geometry.Polygon([[[108.74625980473367, 28.562445155322063],[108.74625980473367, …

【MySQL】之死鎖問題及其解決方案

前言 數據庫死鎖問題是我們老生常談的問題了&#xff0c;在我們實際開發過程中經常會遇到&#xff0c;為了盡量避免出現死鎖&#xff0c;我們需要了解出現死鎖的場景。同時&#xff0c;如果線上出現了死鎖之后怎么去分析、排查和解決&#xff0c;下面我就這兩點介紹一下。 一、…

ubuntu22.04 怎么開啟SSH服務

在 Ubuntu 22.04 LTS 中&#xff0c;默認情況下不會自動啟動 SSH 服務。如果你想通過 SSH 訪問你的 Ubuntu 系統&#xff0c;你需要手動安裝 SSH 服務器&#xff0c;并確保 22 端口&#xff08;SSH 的默認端口&#xff09;是開放的。以下是必要的步驟&#xff1a; 安裝 SSH 服…

Java 多線程之同步(鎖)相關類總結

文章目錄 一、概述二、volatile 可見性/有序性三、synchronized 互拆鎖/排他鎖/非觀鎖四、DCL&#xff08;Double-Checked Locking&#xff09;五、CAS&#xff08;Compare and Set&#xff09;六、ReentrantLock 可重入鎖/公平/非公平鎖七、ReentrantReadWriteLock 讀寫鎖/共享…

Day56力扣打卡

打卡記錄 數對統計&#xff08;DP狀態壓縮&#xff09; 參考文獻 #include <bits/stdc.h>using namespace std;void solve(){int n;cin >> n;map<int, int> mapp;vector<int> a(n);for (auto& x : a){cin >> x;mapp[x] ;}vector<array&…

使用WebyogSQLyog使用數據庫

數據庫 實現數據持久化到本地&#xff1a; 使用完整的管理系統統一管理&#xff0c; 數據庫&#xff08;DateBase&#xff09;&#xff1a; 為了方便數據存儲和管理&#xff08;增刪改查&#xff09;&#xff0c;將數據按照特定的規則存儲起來 安裝WebyogSQLyog -- 創建數…

101基于matlab的極限學習機ELM算法進行遙感圖像分類

基于matlab的極限學習機ELM算法進行遙感圖像分類&#xff0c;對所獲取的遙感圖片進行初步分類和最終分類。數據可更換自己的&#xff0c;程序已調通&#xff0c;可直接運行。

如何使用 Explain 分析 SQL 語句?

如何使用 Explain 分析 SQL 語句&#xff1f; MySQL中EXPLAIN命令是我們分析和優化SQL語句的利器。 如何使用EXPLAIN來分析SQL語句&#xff0c;接下來有15個例子&#xff0c;一起學習唄 1. EXPLAIN的基本使用 EXPLAIN可以用于分析MySQL如何執行一個SQL查詢&#xff0c;包括如…