濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)

Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)

熱門(mén)標(biāo)簽:宿遷星美防封電銷(xiāo)卡 ai電銷(xiāo)機(jī)器人源碼 百度地圖標(biāo)注沒(méi)有了 西藏房產(chǎn)智能外呼系統(tǒng)要多少錢(qián) 長(zhǎng)沙高頻外呼系統(tǒng)原理是什么 地圖標(biāo)注審核表 ai電話(huà)機(jī)器人哪里好 外呼并發(fā)線(xiàn)路 湛江智能外呼系統(tǒng)廠(chǎng)家

在上一篇Python接口自動(dòng)化測(cè)試系列文章:Python接口自動(dòng)化淺析unittest單元測(cè)試原理,主要介紹單元測(cè)試,unittest模塊特性、大致流程、源碼及實(shí)戰(zhàn)例子。

以下主要介紹接口概念、接口用例設(shè)計(jì)及登錄接口測(cè)試實(shí)戰(zhàn)。

1、什么是接口?

接口:檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)。

通俗來(lái)說(shuō),接口就是連接前后端的橋梁,接口測(cè)試可以簡(jiǎn)單理解為脫離了前端的功能測(cè)試。

一個(gè)又一個(gè)的接口就對(duì)應(yīng)功能測(cè)試內(nèi)一個(gè)又一個(gè)的功能。

但注意,一個(gè)功能有可能不是一個(gè)接口就能實(shí)現(xiàn)。

那么,接口測(cè)試和功能測(cè)試的區(qū)別在哪呢?

其實(shí)功能測(cè)試就是在頁(yè)面上輸入我們的參數(shù)值,點(diǎn)點(diǎn)點(diǎn);

而接口測(cè)試沒(méi)有前端,而是通過(guò)接口文檔上的調(diào)用地址、請(qǐng)求參數(shù)等,校驗(yàn)返回的結(jié)果值,

也就是說(shuō),接口可以看成沒(méi)有界面的功能測(cè)試。

因此,可以分析,系統(tǒng)間的接口包含三部分:輸入、處理邏輯、輸出。

2、如何開(kāi)展接口測(cè)試?

接口測(cè)試流程如下:

1.需求評(píng)審,熟悉業(yè)務(wù)和需求;

2.開(kāi)發(fā)提供API接口文檔;

3.根據(jù)開(kāi)發(fā)交付的接口文檔,編寫(xiě)接口測(cè)試用例;

4.接口測(cè)試用例評(píng)審;

5.開(kāi)始執(zhí)行接口測(cè)試;

6.提交測(cè)試報(bào)告;

3、如何設(shè)計(jì)接口用例?

1.獲取接口文檔

一般公司的開(kāi)發(fā)會(huì)提供接口文檔,沒(méi)有接口文檔的自行抓包吧(摸摸頭),不知道怎么抓包的小伙伴,可以看看之前的Fiddler系列文章。

Fiddler

接口文檔是我們測(cè)試時(shí)最重要的一個(gè)依據(jù),一個(gè)規(guī)范的接口文檔至少包括:

1.接口說(shuō)明;

2.調(diào)用URL;

3.請(qǐng)求方法(get、post等);

4.請(qǐng)求參數(shù)、參數(shù)類(lèi)型、請(qǐng)求參數(shù)說(shuō)明等;

5.返回參數(shù)說(shuō)明;

如下為一個(gè)簡(jiǎn)單的登錄接口文檔:

2.分析接口文檔的接口,提取測(cè)試點(diǎn)

接口測(cè)試用例跟常規(guī)的功能測(cè)試用例基本一樣,

可以從接口功能測(cè)試、接口業(yè)務(wù)測(cè)試、接口性能測(cè)試、接口安全測(cè)試等角度考慮。

接口的邏輯校驗(yàn),可以參照接口流程圖來(lái)進(jìn)行設(shè)計(jì),一個(gè)分支需要作為一個(gè)場(chǎng)景去進(jìn)行測(cè)試,需要覆蓋到流程圖里面所有的邏輯分支。

接口的參數(shù)校驗(yàn),可以參照接口文檔中的參數(shù)定義去進(jìn)行驗(yàn)證,需要覆蓋到所有參數(shù)對(duì)應(yīng)的枚舉值以及錯(cuò)誤碼等信息。

3.接口測(cè)試用例設(shè)計(jì)思路

接口功能的關(guān)注點(diǎn)是:

1.接口參數(shù)正確與否:接口傳入的參數(shù)是否有正確填寫(xiě);

2.接口參數(shù)缺失:接口參數(shù)有必填、選填參數(shù),傳參時(shí),測(cè)試參數(shù)缺失對(duì)結(jié)果的影響;

3.接口參數(shù)邊界值:比如用戶(hù)名、密碼有長(zhǎng)度限制,需要測(cè)試不同長(zhǎng)度的參數(shù)對(duì)結(jié)果的影響;

4.接口參數(shù)類(lèi)型:比如接口文檔中用戶(hù)名為String類(lèi)型,測(cè)試傳入其他數(shù)據(jù)類(lèi)型對(duì)結(jié)果的影響。

4.接口測(cè)試其他范圍

接口業(yè)務(wù)測(cè)試

主要是從業(yè)務(wù)的角度出發(fā),把接口組合成一條業(yè)務(wù)鏈,比如登錄之后充值,在數(shù)據(jù)庫(kù)中金額是否正確等等

接口的性能測(cè)試

是指接口是否滿(mǎn)足業(yè)務(wù)的要求,比如業(yè)務(wù)要求系統(tǒng)可以滿(mǎn)足50個(gè)人同時(shí)下單,那么下單這個(gè)接口就要可以承擔(dān)50 TPS,目前業(yè)內(nèi)一般使用JMETER去做接口性能測(cè)試,jmeter接口性能后續(xù)會(huì)單獨(dú)在Jmeter系列文章里介紹。

接口安全測(cè)試

接口的安全性主要圍繞Token、Timestamp和Sign三個(gè)機(jī)制展開(kāi)設(shè)計(jì),保證接口的數(shù)據(jù)不會(huì)被篡改和重復(fù)調(diào)用。

注意:本文主要涉及接口功能測(cè)試,相信做過(guò)功能測(cè)試的童鞋,設(shè)計(jì)接口測(cè)試用例也是沒(méi)問(wèn)題的。

4、接口測(cè)試用例實(shí)戰(zhàn)

以下,我們以登錄接口進(jìn)行實(shí)戰(zhàn)。

隨著代碼模塊越來(lái)越多,混在一起,雜亂無(wú)章,這時(shí)我們考慮架構(gòu)分層了,上篇文章:Python接口自動(dòng)化之requests請(qǐng)求封裝,封裝的requests請(qǐng)求類(lèi),每個(gè)用例都要調(diào)用,可以放在公共模塊里。

在項(xiàng)目下新建一個(gè)文件夾common

放入請(qǐng)求模塊requests_handler.py

requests_handler.py

import requests
class RequestsHandler:
    def __init__(self):
        """session管理器"""
        self.session = requests.session()
    def visit(self, method, url, params = None, data= None, json= None, headers= None):
        result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)
        try:
            # 返回json結(jié)果
            return result.json()
        except Exception:
            return 'not json'
    def close_session(self):
        self.session.close()

編寫(xiě)登錄接口用例,調(diào)用封裝的請(qǐng)求類(lèi)。

登錄用例,新建一個(gè)test_cases文件夾,用來(lái)存放用例模塊。

test_Login.py

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
    def setUp(self):
        # 請(qǐng)求類(lèi)實(shí)例化
        self.req = RequestsHandler()
    def tearDown(self):
        self.req.close_session()
    def test_login_success(self):
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": "12345678"
        }
    
        res = self.req.visit('post',login_url,json=payload)
        self.assertEqual(0, res['code'])
if __name__ == '__main__':
    unittest.main()

運(yùn)行結(jié)果為:

Ran 1 test in 0.213s
OK

對(duì)于用例的一些總結(jié):

setUp, tearDown

前置條件,后置條件,setUp實(shí)例化,在運(yùn)行測(cè)試用例前獲取session管理器, tearDown,在測(cè)試用例執(zhí)行結(jié)束后關(guān)閉session管理器。

對(duì)于斷言

小伙伴們可能不知道到底用返回結(jié)果中的哪個(gè)字段斷言。個(gè)人意見(jiàn),如果code、msg比較詳細(xì)的話(huà),可以利用code、msg其中一個(gè)來(lái)斷言,當(dāng)然code、msg一起做斷言也可以,甚至你覺(jué)得返回結(jié)果中某個(gè)數(shù)據(jù)符合你的預(yù)期,也是可以拿來(lái)斷言,斷言手段是靈活多變的,自行選擇最優(yōu)方案。

小伙伴們看到總結(jié),退出微信,打開(kāi)王者榮耀,一氣呵成,其實(shí)還沒(méi)完呢,我們寫(xiě)了正向用例,還有異常用例也寫(xiě)兩條,更多的異常用例可以自行擴(kuò)展下。

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
    def setUp(self):
        # 請(qǐng)求類(lèi)實(shí)例化
        self.req = RequestsHandler()
    def tearDown(self):
        # 關(guān)閉session
        self.req.close_session()
    def test_login_success(self):
        """
        正確手機(jī)號(hào),正確密碼
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": "12345678"
        }
 
        res = self.req.visit('post',login_url,json=payload)
        # 根據(jù)請(qǐng)求結(jié)果中的code進(jìn)行斷言
        self.assertEqual(0, res['code'])
    def test_phone_is_null(self):
        """
        手機(jī)號(hào)為空,密碼正確
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "",
            "pwd": "12345678"
        }
       
        res = self.req.visit('post', login_url, json=payload)
        # 根據(jù)返回結(jié)果中的msg進(jìn)行斷言
        self.assertEqual("手機(jī)號(hào)碼為空", res['msg'])
    def test_pwd_is_null(self):
        """
        正確用戶(hù)名,密碼為空
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": ""
        }
    
        res = self.req.visit('post', login_url, json=payload)
        # 根據(jù)返回結(jié)果中的msg進(jìn)行斷言
        self.assertEqual("密碼為空", res['msg'])
if __name__ == '__main__':
    unittest.main()

測(cè)試結(jié)果為:

Ran 3 tests in 0.259s
OK

以上代碼如下痛點(diǎn):

  • 用例和數(shù)據(jù)未分離,維護(hù)成本大。可以數(shù)據(jù)與測(cè)試腳本分離,使用Excel存放測(cè)試用例,方便維護(hù)。
  • 仔細(xì)研究發(fā)現(xiàn)正向用例、異常用例,只是傳入的數(shù)據(jù)不一樣,其他都是通用
    這種情況下,我們可以引入ddt數(shù)據(jù)驅(qū)動(dòng),減少代碼量。

到此這篇關(guān)于Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Python接口自動(dòng)化登錄接口測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理
  • Python接口自動(dòng)化淺析unittest單元測(cè)試原理
  • python使用pytest接口自動(dòng)化測(cè)試的使用
  • python+requests+pytest接口自動(dòng)化的實(shí)現(xiàn)示例
  • python接口自動(dòng)化測(cè)試數(shù)據(jù)和代碼分離解析

標(biāo)簽:大同 海南 普洱 盤(pán)錦 寧夏 漯河 南平 林芝

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)》,本文關(guān)鍵詞  Python,接口,自動(dòng)化,淺析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python接口自動(dòng)化淺析登錄接口測(cè)試實(shí)戰(zhàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    都江堰市| 自治县| 桃园县| 德安县| 周口市| 滕州市| 潞西市| 凭祥市| 时尚| 五指山市| 如东县| 偏关县| 四川省| 分宜县| 五峰| 枞阳县| 陆丰市| 曲麻莱县| 长沙市| 高安市| 株洲县| 高碑店市| 镇江市| 田阳县| 扶沟县| 潢川县| 阳信县| 固镇县| 武清区| 盈江县| 苍溪县| 福州市| 体育| 河源市| 辰溪县| 东宁县| 广安市| 新昌县| 綦江县| 馆陶县| 宿州市|