接口自動化測試怎么一步步學、按照我的方式、不可能學不會-第一集

第1節(jié):企業(yè)要求、接口測試流程、如何做、企業(yè)接口管理工具介紹

企業(yè)測試級別要求:

企業(yè)測試招聘要求:

企業(yè)接口如何做:

接口自動化測試體系流程:

企業(yè)接口管理用到最多工具【可以自己搭建喲】:

enlinker:?https://www.eolinker.com/#/

Eolinker 業(yè)內(nèi)領(lǐng)先的 API 全生命周期管理方案:API自動生成、API管理、API自動化測試、API網(wǎng)關(guān)、API監(jiān)控、API開放平臺?wxiao.w.eolinker.com

yapi:https://hellosean1025.github.io/yapi/

第2節(jié) 用例規(guī)范設(shè)計&【自動化用例框架再說到】

接口用例設(shè)計保持:參數(shù)是否必填、參數(shù)間是否存在關(guān)聯(lián)、參數(shù)取值范圍、業(yè)務(wù)規(guī)則

第3節(jié) charles抓包工具(方法定位接口問題)支持app/web

抓包作用:

1.抓web、app運用接口方便定位問題、接口測試

2.可以模擬一些數(shù)據(jù)、單個數(shù)據(jù)、多條數(shù)據(jù)

web抓包安裝即可,直接抓就能獲取對應(yīng)接口

蘋果&安卓抓包:?

1.charles安裝配置:

【Charles】抓包工具Charles使用for mac

? 1.pxory->pxory-settings中設(shè)置端口號8888.勾選enable

? 2.help->ssl pxorying->install charles root car證書

? 3.PC CMD中輸入ipconfig ,手機找到你對應(yīng)WIFI設(shè)置選擇手動IP端口號:8888(電腦WIFI必須和手機連接的wifi是一致)

? 4.打開手機瀏覽器你安裝證書 https://chls.pro/ssl charlesproxy.com/getssl

? (注意:如果手機自帶瀏覽器下載的證書無法安裝,請在市場下載一個chrome ,UC瀏覽器安裝證書)

? 蘋果手機抓包和android手機抓包配置一致,但是蘋果手機證書安裝會后需要在通用去找到你對應(yīng)的證書信任一下,即可

? 打開設(shè)置,點擊通用->關(guān)于本機->證書信任設(shè)置,找到當前要作為代理的電腦名,打開信任開關(guān)。

? ? ? ? ? ? ? ? ? 注意:電腦防火墻一定要關(guān)掉,不然都配置了,莫名其妙抓不了,找不到原因

2.數(shù)據(jù)模擬(重定向)

修改返回個參:tools->rewrite->enable勾選

修改接口返回全局參數(shù):tools->map local->勾選enable

preference:

request以及response的顯示設(shè)置

默認charles的數(shù)據(jù)顯示是沒有request以及response,需要將隱藏選項關(guān)閉

3.網(wǎng)絡(luò)模擬

設(shè)置網(wǎng)速:

Throttle Settings-》

第4節(jié) postman使用

第5節(jié) http協(xié)議/狀態(tài)碼詳解、websokcet協(xié)議、服務(wù)器交互流程

HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)

初步協(xié)議認識:

HTTP協(xié)議:超文本傳輸協(xié)議,用于普通瀏覽

HTTPS協(xié)議:安全超文本傳輸協(xié)議,身披SSL外衣的HTTP協(xié)議

FTP協(xié)議:文件傳輸協(xié)議,用于文件傳輸

POP3協(xié)議:郵局協(xié)議,收郵件使用

SMTP協(xié)議:簡單郵件傳輸協(xié)議,用來發(fā)送電子郵件

webscoket協(xié)議:服務(wù)器可以主動向客戶端推送消息,客戶端也可以主動向服務(wù)器發(fā)送消息,信息溝通

SSH協(xié)議:安全外殼協(xié)議,用于加密安全登陸,替代安全性差的Telent協(xié)議

http常見狀態(tài)代碼、狀態(tài)描述、說明:

200 OK? ? ? //客戶端請求成功

400 Bad Request? //客戶端請求有語法錯誤,服務(wù)器不理解請求的語法

401 Unauthorized //(未授權(quán)) 請求要求身份驗證。 對于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)。

403 Forbidden? //服務(wù)器收到請求,服務(wù)器拒絕拒絕請求

404 Not Found? //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯誤

501 (尚未實施) 服務(wù)器不具備完成請求的功能。 例如,服務(wù)器無法識別請求方法時可能會返回此代碼

503 Server Unavailable? //服務(wù)器當前不能處理客戶端的請求,一段時間后可能恢復正常

http:發(fā)送請求->服務(wù)器返回連接應(yīng)答->客戶端返回就緒->最終結(jié)果顯示結(jié)果

Webscoket:

1.WebSocket建立在TCP協(xié)議之上,并且與HTTP協(xié)議有著良好的兼容性,最大的特點就是服務(wù)器可以主動向客戶端推送消息,客戶端也可以主動向服務(wù)器發(fā)送消息

客戶端通過HTTP協(xié)議向服務(wù)端發(fā)送握手-》服務(wù)端向客戶端返回ACK(數(shù)據(jù)包傳達確認信息),此時握手成功-》建立連接并維持該連接;-》后面服務(wù)端和客戶端就可以基于建立的連接進行雙向通信-》直到連接關(guān)閉

2.WebSocket與HTTP對比

3. WebSocket的協(xié)議標識符是 ws,加密為 wss

ws://ip:port/some/path

服務(wù)器交互流程:

DNS就是域名解析:

例如:bai來說就是電腦訪問網(wǎng)du站需要知道網(wǎng)站所在的IP地址zhi,有了DNS服務(wù)之dao后登陸百度只需要輸入www.baidu.com而不是202.108.22.5。

DNS服務(wù)會將域名解析為IP地址,方便用戶訪問網(wǎng)站時不需要記住枯燥的數(shù)字

跨域:

a網(wǎng)站(百度一下,你就知道)要請求一個b網(wǎng)站的數(shù)據(jù)(www.baidutest.com

jsonp前端解決跨域

nginx反向代理

第5節(jié) cookie、token、session&request和response認識

應(yīng)用場景直觀理解:

cookie日常登錄一個網(wǎng)站,今天輸入用戶名密碼登錄了,第二天再打開很多情況下就直接打開了。這個時候用到的一個機制就是cookie

session的一個場景是購物車,添加了商品之后客戶端處可以知道添加了哪些商品,而服務(wù)器端如何判別呢,所以也需要存儲一些信息,這里就用到了session

token一般運用登錄會生成一個token傳入下一個其它接口,作為身份驗證

cookie原理:Cookie技術(shù)會根據(jù)從服務(wù)器端發(fā)送的響應(yīng)報文內(nèi)的一個叫做Set-Cookie的首部字段信息,通知客戶端保存Cookie

Session原理:是存放在服務(wù)器端、用來存放用戶數(shù)據(jù)的(類似于HashTable結(jié)構(gòu))。

當瀏覽器第一次發(fā)送請求時,服務(wù)器自動生成了一個HashTable和一個Session ID用來唯一標識這個HashTable,并將其通過響應(yīng)發(fā)送到瀏覽器。當瀏覽器第二次發(fā)送請求,會將前一次服務(wù)器響應(yīng)中的Session ID放在請求中一并發(fā)送到服務(wù)器上,服務(wù)器從請求中提取出Session ID,并和保存的所有Session ID進行對比,找到這個用戶對應(yīng)的HashTable,以此來達到共享數(shù)據(jù)的目的

過程:

Session是另一種記錄客戶狀態(tài)的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session??蛻舳藶g覽器再次訪問時只需要從該Session中查找該客戶的狀態(tài)就可以

Token:身份驗證令牌? 用戶向服務(wù)器申請登錄系統(tǒng)令牌-》拿著申請的令牌登錄對應(yīng)系統(tǒng)(用的比較多)

request和response的認識

1.requests.get() 獲取HTML網(wǎng)頁的主要方法,對應(yīng)HTTP的GET

2.requests.post() 向HTML網(wǎng)頁提交POST請求的方法,對應(yīng)HTTP的POST

get方法需要接受一個參數(shù)URL,構(gòu)造一個向目標服務(wù)器發(fā)送請求的request對象,返回一個包含對象服務(wù)器資源的response對象,常用為【response = requests.get("url")】

response對象的屬性

a.response.text HTTP響應(yīng)內(nèi)容的字符串形式

b.response.encoding 響應(yīng)的內(nèi)容編碼

c.response.content 響應(yīng)內(nèi)容的二進制

第6節(jié) python環(huán)境基礎(chǔ)設(shè)施搭建pycharm

python 3以上 一步步安裝

配置環(huán)境變量: 系統(tǒng)變量-》path中加入::\Program Files\python

C:\Program Files\python\Scripts

pytchram 2019.2? pychram破解

Pycharm2019.2.1永久激活 - pycod - 博客園

-javaagent:C:\Program Files\JetBrains\PyCharm 2019.2\bin\jetbrains-agent.jar

License server: http://jetbrains-license-server

第7節(jié) 循環(huán)、python列表、字典、截取、面相對象、mysql連接操作(MySQLdb)

字符串&字典&截取&列表:

#python標準的數(shù)據(jù)類型

#number數(shù)字

#String字符串

#Tuple元組

#dictionary字典

#運算符 + -* / % 取整

# a=10;b=20;

# print(a+b)

# print(a-b)

# print(a*b)

# print(b/a)

# # 取余數(shù)

# print(b%a)

# #取整數(shù)

# print(9//2)

#條件判斷語句 >80分 你真棒? <50分你真差80

# cc=float(input("你輸入的成績:"));

# if cc>=80:

#? print("你真棒");

# elif cc<50:

#? print("你真差");

#循環(huán)語句

# a=0;

# while a<10:

#? ? a=a+1;

#? ? print(a)

#contiue用于跳過該次循環(huán)? break退出循環(huán)

#i>10退出循環(huán)

# i=1;

# while i:

#? ? print(i);

#? ? i=i+1;

#? ? if i>20:

#? ? ? ? break

#? ? # i+=1

#輸出1-10偶數(shù)

# i=1;

# while i<10:

#? ? i+=1;

#? ? if i%2>0:

#? ? ? ? continue

#? ? print(i)

for循環(huán)

# list=["a","b","c","d"] #列表

# for i in list:

#? ? print(i)

列表

list=["a","b","c","d"]? 列表的方法? append追加

list=["a","b","c","d","a"]

# list.append(11)

# print(list)

#移除列表元素

# list.remove('a')

# print(list)

#count統(tǒng)計列表中的次數(shù)

num=list.count("a")

print(num)

#pop移除列表的一個元素

# list.pop(2)

# print(list)

#反向列表元素

list.reverse()

print(list)

#字符串操作

cc="123456789";

print(cc[0:3]) #截取第一位到第三位

print(cc[:]) #截取全部字符

print(cc[2]) #截取第三個字符

print(cc[-3:])#截取倒數(shù)三位的字符

print(cc[::-1]) #倒序排序字符

#元組 元組和列表類似,不同之處就是元組的元素不能修改

aa=(1,2,3,4)

bb=(5,6)

print(aa+bb)

#區(qū)別:元組定義元素不能修改,而字典可以被修改

#字典 鍵key 值value

aa={"name":"清心","age":18}

print(aa['name'])

aa['age']=19

print(aa['age'])

面向?qū)ο螅悍庋b

#面向?qū)ο?oop 一種編程思想,萬物皆對象,面向?qū)ο筇岣吡司幊绦?,重復利用性搞?/p>

#一個對象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)

#把需要重用的函數(shù)或者功能封裝,方便程序直接調(diào)用

#例如我們班的同學都需要睡覺,喝水,吃飯

#清心、Leon,“”都需要喝水,吃飯

封裝:

封裝

繼承

第8節(jié) requests 庫介紹/get/post/上傳/json請求講解

get:

post:

上傳圖片:

常見參數(shù):

? r.url 打印url地址

? r.text 打印服務(wù)器響應(yīng)的內(nèi)容

? r.encoding 打印編碼格式

? r.content 打印請求響應(yīng)體

? r.json()? 打印json格式

? r.status_code 響應(yīng)狀態(tài)碼

? r.headers 響應(yīng)頭信息

? r.headers['token'] 響應(yīng)頭某一個值

? timeout意思是:如果這個接口請求到服務(wù)器響應(yīng)回來的內(nèi)容超過3S就會報錯

? 斷言: self.assertEqual(name,"xxx")

1.json.dumps 將字典轉(zhuǎn)化為字符串)

2.json.loads()函數(shù)是將json格式數(shù)據(jù)轉(zhuǎn)換為字典(可以這么理解,json.loads()函數(shù)是將字符串轉(zhuǎn)化為字典)

第九節(jié) cookie seesion 實戰(zhàn)

獲取cookie

實例化調(diào)用:

session用法:

第10節(jié)? jsonpath

? 1. jsonpath介紹

? ? 用來解析多層嵌套的json數(shù)據(jù);JsonPath 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現(xiàn)版本,包括:Javascript, Python, PHP 和 Java

? 2. JsonPath 對于 JSON 來說,相當于 XPath 對于 XML。

? ? 安裝方法:pip install jsonpath? ? 官方文檔:JSONPath - XPath for JSON

3.jsonpath在工作中為我們省了很多力,不用整那么多循環(huán),獲取值從此不費勁,你看

接口:

import jsonpath

? ? #獲取車的NAME

? ? rets = jsonpath.jsonpath(cc, '$..name')

? ? #獲取carNum小于10多少name的值判斷

? ? rescc=jsonpath.jsonpath(cc,"$.data.resList[?(@.carNum<10)].name")?

#獲取tags所有value值

? ? resdd= jsonpath.jsonpath(cc, "$.data.resList[*].tags[*].value")

#組織片段獲取最后兩個值

? ? resff = jsonpath.jsonpath(cc, "$.data.resList[-2:]")?

第11節(jié)? unittest、各種斷言用法、discover、unittest參數(shù)化(paramunittest)

1.unittest單元測試框架:

主要作用:加載用例、執(zhí)行用例、管理用例、集成報告

優(yōu)點:提供用例組織與執(zhí)行方法;提供比較方法;提供豐富的日志、清晰的報告

2.unittest官方文檔? ? https://docs.python.org/2/library/unittest.html

注意事項:

模塊名以test開頭

類以Test開頭

方法以test開頭

3.unittest前需要了解該框架的五個概念:[test case,test suite,test runner,test fixture]

test fixture一個測試用例的初始化準備及環(huán)境還原,主要是setUp() 和 setDown()方法;

setUp() 和 setDown():

setUpClass和tearDownClass只執(zhí)行一次:

setUpClass和tearDownClass的參數(shù)是cls,且在定義之前必須加裝飾器@classmethod

#classmethod 修飾符對應(yīng)的函數(shù)不需要實例化,不需要 self 參數(shù),但第一個參數(shù)需要是表示自身類的 cls 參數(shù)【先科普一下】

test case:一個完整的測試單元,執(zhí)行該測試單元可以完成對某一個問題的驗證,完整體現(xiàn)在:測試前環(huán)境準備(setUp),執(zhí)行測試代碼(run),以及測試后環(huán)境還原(tearDown);

test suite:多個測試用例的集合,測試套件或測試計劃;

test runner:執(zhí)行測試用例,并將測試結(jié)果保存到TextTestResult實例中,包括運行了多少測試用例,成功了多少,失敗了多少等信息;

加入unittest.skip("暫時不執(zhí)行")這條用例不執(zhí)行

verbosity=2

0代表得到執(zhí)行的測試總數(shù)和全局結(jié)果

1代表得到成功的顯示,失敗的顯示f,錯誤顯示E

2可以得到詳細信息

4.unittest斷言我們也經(jīng)常用到:

5. unittest中上面用到addtest有成千上萬的用例加載太麻煩了

discover()方法可以批量加載用例,果斷用上,別用addtest一條一條加載了

unittest中的discover()方法可以批量加載用例

start_dir:測試模塊名或測試用例所在目錄

? pattern='test*.py':表示用例文件名的匹配方式,此處匹配的是以test開頭的.py類型的文件,*表示匹配任意字符

? top_level_dir:測試模塊的頂層目錄import unittest

用例1:

class MyTestCase(unittest.TestCase):

? ? def test_1(self):

? ? ? ? print("1");

用例2:

class MyTestCase(unittest.TestCase):

? ? def test_2(self):

? ? ? ? print("2")

6. 加載生成htmltestrunner報告

? 第一種方式:

第二種方式:

8.unittest參數(shù)化使用(paramunittest)

paramunittest是unittest實現(xiàn)參數(shù)化的一個專門的模塊,可以傳入多組參數(shù),自動生成多個用? 例 前面講數(shù)據(jù)驅(qū)動的時候,用ddt可以解決多組數(shù)據(jù)傳入,自動生成多個測試用例

pip install paramunittest

1.官方文檔地址:ParamUnittest

2.github源碼下載地址:rik0/ParamUnittest

paramunittestdemo.py 例子:

第12節(jié)? pytest自動化框架方式

pytest與unittest對比優(yōu)缺點:

? 1.有獨立的命名,并通過聲明它們從測試函數(shù)、模塊、類或整個項目中的使用來激活。

? 2.按模塊化的方式實現(xiàn),每個fixture都可以互相調(diào)用。

? 3.unittest需要繼承unitest.testcase類,pytest不需要繼承,可以是個類,可以是個函數(shù)? ?

? 4.unittest測試報告htmltestrunner,pytest-html或者是allure

? 5.unittest參數(shù)化需要依賴第三方庫,pytest不需要依賴,直接使用parametrize

? 6.unittest不支持重試,pytest支持重試

? 安裝:?

? ? pip install -U pytest? ?

? pip install -U pytest-html

? pip install -U pytest-rerunfailures(失敗重跑插件)

? 命令行檢查:py.test --version

? 官網(wǎng):API Reference - pytest documentation

? 命名:文件名以test_*.py文件和*_test.py

? test_開頭的函數(shù)? Test開頭的類? test_開頭的方法?

fixture:fixture是pytest中的一個特性:

? 1.包括定義傳入測試中的數(shù)據(jù)集,配置測試前系統(tǒng)的初始狀態(tài),為批量測試提供數(shù)據(jù)源等等

? 2.fixture是pytest用于將測試前后進行預(yù)備,清理工作的代碼分離出核心測試邏輯的一種機制? ?

main運行中-s還有幾個參數(shù):一一道來

-v 用于顯示每個測試函數(shù)的執(zhí)行結(jié)果

-q 只顯示整體測試結(jié)果? ? -s 用于顯示測試函數(shù)中print()函數(shù)輸出

? -x, 在第一個錯誤或測試失敗時立即退出? -h 幫助

fixture的scope參數(shù)方式:【function,module,class,session】

a.function:每個test都運行,默認是function的scope,這種都執(zhí)行

b.class:每個class的所有test只運行一次

c.module:每個module的所有test只運行一次

? session:每個session只運行一次

? fixture為session級別是可以跨.py模塊調(diào)用的,多個.py文件的用例的時候,

? 如果多個用例只需調(diào)用一次fixture,并且寫到conftest.py文件里

conftest.py文件

執(zhí)行session文件

pytest參數(shù)化

pytest中偶爾會使用mark標記方式

備注:除了執(zhí)行bb之外的用例not bb 【 pytest.main(["-s", "test_server.py", "-m=not bb"])

pytest預(yù)期異常

預(yù)期就是拋出一個異常,拋出異常后pytest或停止該條測試用例的繼續(xù)執(zhí)行

第13節(jié) pytest報告生成加載+allure

第一種方式生成報告:pip install pytest-html

if __name__ == '__main__':

? ? unittest.main('-m smoke',

? ? ? ? ? ? ? ? ? '-junit-xml=report/test.xml',

? ? ? ? ? ? ? ? ? '--html=report/test.html'

? ? )

第二種方式生成報告 allure-pytest

安裝:pip install allure-pytest

首先認識幾個概念

官網(wǎng): http://allure.qatools.ru/

@allure.feature # 用于定義被測試的功能,被測產(chǎn)品的需求點

@allure.story # 用于定義被測功能的用戶場景,即子功能點

@allure.severity #用于定義用例優(yōu)先級

@allure.issue #用于定義問題表識,關(guān)聯(lián)標識已有的問題,可為一個url鏈接地址

@allure.testcase #用于用例標識,關(guān)聯(lián)標識用例,可為一個url鏈接地址

@allure.attach # 用于向測試報告中輸入一些附加的信息,通常是一些測試數(shù)據(jù)信息

@pytest.allure.step # 用于將一些通用的函數(shù)作為測試步驟輸出到報告,調(diào)用此函數(shù)的地方會向報告中輸出步驟

allure.environment(environment=env) #用于定義environment環(huán)境

用例實現(xiàn):

封裝一個shell方法啟動進程:

報告方法加載xml&report:

報告結(jié)果生成:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容