2023最新合集Python自動化測試開發(fā)框架【全棧/實戰(zhàn)/教程】合集精華,學(xué)完

一、目前軟件測試的市場行情以及測試人員能力標準。
這兩天我聽了幾個去京東、平安銀行,阿里等大廠的招聘錄音:總結(jié)一下:
一般這些大廠業(yè)務(wù)測試:5-6成,接口,自動化,性能:4-5成,流程規(guī)范:1成
從上面的需求我們不難看出目前市面上對測試人員的要求:綜合型的測試人才,側(cè)重業(yè)務(wù)能力(京東是小B端業(yè)務(wù),平安銀行信用卡業(yè)務(wù)),代碼能力(在自動化框架這一塊有一定的建樹)以及開發(fā)思維
(代碼的封裝能力)。
?
而接口測試或者接口自動化是每一個面試中都必問的環(huán)節(jié)。比如:(只口述,不打字) 1.主流接口測試工具:????????????????????Postman+Newman+Jenkins持續(xù)集成接口自動化(基于Javascript語言) Jmeter+Ant+Jenkins持續(xù)集成接口自動化(基于Java語言)
Apifox+Apifox-cli+Jenkins持續(xù)集成接口自動化(基于Javascript語言)
?
2.接口自動化測試以及接口自動化測試平臺:(一般適用于大中型的項目或者公司) python+requests+pytest+yaml+allure+logging+jenkins接口自動化。
開發(fā)自動化測試平臺。
?
既然我們有postman,jmeter,apifox等工具都可以實現(xiàn)接口測試,為什么我們要封裝框架或者是開發(fā)測試平臺???????????????????????????????????????工具弊端如下:??1.敏捷開發(fā)接口數(shù)量巨大,如何實現(xiàn)團隊合作和版本控制(如果是聯(lián)網(wǎng)協(xié)作,安全問題?)。
2.功能太死板,有些接口功能難以實現(xiàn)(比如說:自定義加密,RSA加密,簽名等)。
3.當接口項目當中出現(xiàn)了多種協(xié)議的接口。
4.沒有辦法生成美觀的測試報告以及日志監(jiān)控的實現(xiàn)。
5.框架或平臺可以自定義功能并推廣到所有的項目中復(fù)用。
基于目前的市場形式以及行業(yè)需求,所以從今天開始我們就和大家講三天的接口自動化VIP課程,希望對大家找工作和跳槽有所幫助,同時也希望大家能夠認真的學(xué)完并且動手實踐起來。
?
二、全面熟練Requests庫以及底層方法調(diào)用邏輯??????????????????1.requests庫是用來發(fā)送HTTP請求,接收HTTP響應(yīng)的Python第三方庫,主要用于做接口自動化測試,使用前需要安裝:
??
2.?詳解Requests模塊常用方法:
?
1?
def?get(url,?params=None,
2?url:接口請求地址
**kwargs): 發(fā)送get請求
3?params:是get請求用于傳參,這個參數(shù)會自動的以?的方式加到url之后,多個參數(shù)之間用&分割。
4?**kwargs:可變長度字典參數(shù)
5
6?def?post(url, data=None, json=None, **kwargs):?發(fā)送post請求
7?data:用于傳參
8?json: 用于傳參
9?files: 文件上傳
10
11?基于Postman:
12?form-data:?既有表單參數(shù)也有文件上傳 files
13?Content-Type:multipart/form-data
14?x-www-form-urlencoded 表單 data
15?Content-Type:application/x-www-form-urlencoded?(data)
16?raw:?json(json),xml(data),text(data)
17?Content-Type:application/json (json)
18?Content-Type:text/plain (data)
19?Content-Type:application/javascript?(data)
20?Content-Type:text/html (data)
21?Content-Type:application/xml (data)
22?binay:二進制文件上傳(data)
23?Content-Type:application/octrent-stream (data)
24
25?def?put(url, data=None, **kwargs): 發(fā)送put請求
26?def?delete(url, **kwargs): 發(fā)送delete請求
27
28?requests模塊下的:
29?def?request(method, url, **kwargs): 發(fā)送任意請求/它是get,post,put,delete的底層方法。
?
30
31?def session(): 獲得一個session對象
32?session對象的:
33?def request( session對象的request方法
34?self,
35?method, 請求方式?get?post put delete
36?url, 請求URL地址,接口文檔標準的接口請求地址
37?params=None, params參數(shù):請求數(shù)據(jù)中的鏈接,常見的一個get請求,請求參數(shù)都是放在url地址
38?data=None, data參數(shù):請求數(shù)據(jù),參數(shù)為表單的數(shù)據(jù)格式
39?json=None, json參數(shù):接口常見的數(shù)據(jù)請求格式
40?headers=None, 請求頭:請求頭信息 ,http請求中,編碼方式等內(nèi)容的添加
41?cookies=None, cookie信息:保存用戶的登錄信息。比如做一些充值功能,但是需要用戶已經(jīng)登錄
42?files=None, 文件上傳
43
44?auth=None, 鑒權(quán)的意思,接口設(shè)置操作權(quán)限
45?timeout=None, 超時處理
46?allow_redirects=True, 重定向,請求不成功,再次請求(該功能并不是很常用)
47?proxies=None, 設(shè)置代理
48?hooks=None, 鉤子
49?stream=None, 文件下載功能,通過請求方式,下載文件,進行驗證
50?verify=None, 證書驗證?1.要么請求忽略證書 2.要么加載證書地址
51?cert: CA證書
52?):
53
54?requests.request()和session.request()的區(qū)別在于:
55?前者的每個請求都是獨立,后者會自動的關(guān)聯(lián)所有的請求的cookie信息(類似于jmeter的http cookie管理器
?
?
3.?requests模塊中的response對象的屬性和方法?編寫一個簡單的get案例之后講解Response對象。
使用requests方法后會返回一個Response對象,存儲服務(wù)器的返回信息。Response返回信息如下:
?
?
?
三、Requests接口自動化測試實戰(zhàn)?1.get請求接口???????????????2.get請求接口(需要接口關(guān)聯(lián))????3.post請求接口(包括json傳參和data傳參) 4.文件上傳接口
5.訪問phpwind首頁接口(正則表達式應(yīng)用)????????????6.登錄phpwind接口(包括:請求頭,cookie鑒權(quán),session鑒權(quán))
?
1?
class TestApi:
?
2
3?#類變量
4?access_token?=?""
5?csrf_token =?""
6?session?= requests.session() #創(chuàng)建會話對象
7
8?#get請求接口
9?def test_get_token(self):
10?urls =?"https://api.weixin.qq.com/cgi-bin/token"
11?datas?=?{
12?"grant_type":"client_credential",
13?"appid":"wx6b11b3efd1cdc290",
14?"secret":"106a9c6157c4db5f6029918738f9529d"
15 }
16?res =?requests.get(url=urls,params=datas)
17?result =?res.json()
18?TestApi.access_token?=?result["access_token"]
19?print(result["access_token"])
20?#在第一個接口里面獲取到access_token鑒權(quán)碼
21
22?#get請求接口(需要接口關(guān)聯(lián))
23?def test_select_flag(self):
24?urls =?"https://api.weixin.qq.com/cgi-bin/tags/get"
25?datas?=?{
26?"access_token":?TestApi.access_token
27 }
?
28 res
=?requests.get(url=
urls,?params=
datas)
29 print(res.json())
?
30
31?#post請求接口(包括json傳參和data傳參)
32?def test_edit_flag(self):
33?urls =?"https://api.weixin.qq.com/cgi-bin/tags/update"
34?ps?=?{
35?"access_token":?TestApi.access_token
36 }
37?datas?=?{"tag":{"id":7206,"name":"beibei"+str(int(time.time()))}}
38?res?=?requests.post(url=urls,data=json.dumps(datas),params=ps)
39?print(res.json())
?
40
41?#文件上傳接口
42?def test_file_upload(self):
43?urls?=?"https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+TestApi
44?datas?=?{
45?"media":open(r"E:\shu.png","rb")
46 }
47?res =?requests.post(url=urls,files=datas)
48?print(res.json())
?
49
50?#訪問phpwind首頁接口(正則表達式應(yīng)用)
51?def test_phpwind(self):
52 urls =?"http://47.107.116.139/phpwind"
53?#res?=?requests.get(url=urls)
54?res =?TestApi.session.get(url=urls)
55?result=res.text
56?TestApi.csrf_token?=?re.search('name="csrf_token"?value="(.*?)"',result).group(1
57?print(TestApi.csrf_token)
58
59?#登錄接口(包括:請求頭,cookie鑒權(quán),session鑒權(quán))
60?def test_login(self):
61?urls=?"http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
62?datas?=?{
63?"username":"admin",
64?"password":"msxy",
65?"csrf_token":TestApi.csrf_token,
66?"backurl":"http://47.107.116.139/phpwind/",
?
?
?
接口關(guān)聯(lián)必用的三種方式以及對應(yīng)python庫詳解:
1.通過類變量保存中間變量實現(xiàn)接口關(guān)聯(lián)。
2.通過單獨的文件保存中間變量實現(xiàn)接口關(guān)聯(lián)。
3.極限封裝成零代碼方式提取和使用實現(xiàn)接口關(guān)聯(lián)。
?
(1)?正則提取(正則只能夠提取字符串的數(shù)據(jù))?re.seach:只匹配一個值,通過下標[1]取值,沒有匹配到返回None????re.findall:匹配多個值,返回列表list,多個值通過下標取值,沒有匹配到返回None
??
?
(2)?JsonPath提?。?/strong>jsonpath只能夠提取json格式的數(shù)據(jù))
jsonpath.jsonpath,返回的是一個列表,通過下標取值,沒有找到返回None
?
語法規(guī)則:
(1)?$?根節(jié)點
(2)?.或者[] 用于獲取子節(jié)點的對象。如:
$.jiaoyu
$["mashang"]
區(qū)別在于[]的方式它的功能更強大,它可以同時取多個節(jié)點:如:
$["mashang","jiaoyu"]
(3)?.. 表示通過相對路徑取值,通過遞歸取值。
$..name
(4)?*?通配符
$.*?匹配到根節(jié)點下所有的節(jié)點的值。
$..*?遞歸匹配到根節(jié)點下所有的對象或者。
(5)?數(shù)組的處理方式,它是通過[]來處理,如:
$.mashang[0].student[1].name 0代表取數(shù)組的第1個值。 切片取值:從start(包含)開始到end(不包含)結(jié)束。如:
$.mashang[1:3]?下標從1開始到2
$.mashang[:3] 下標從0開始到2
$.mashang[1:] 下標從1開始到最后的下標
$.mashang[-2:-1]?-1是倒數(shù)第1個,-2倒數(shù)第2個。
?
四、接口自動化框架封裝:
目的:簡化接口自動化的落地實施,統(tǒng)一化,標準化,企業(yè)期望達到:不懂代碼的團隊也能夠通過框架實現(xiàn)接口自動化測試。
?
(1)、接口自動化統(tǒng)一請求封裝為什么需要封裝統(tǒng)一接口請求: 1.去除重復(fù)的,冗余的代碼。
2.實現(xiàn)統(tǒng)一的異常處理和日志監(jiān)控。封裝代碼如下:
?