欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+requests+unittest執(zhí)行接口自動(dòng)化測(cè)試詳情

 更新時(shí)間:2022年09月08日 15:20:19   作者:程序員威子  
這篇文章主要介紹了Python+requests+unittest執(zhí)行接口自動(dòng)化測(cè)試詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下

1、安裝requests、xlrd、json、unittest庫(kù)

<1>pip 命令安裝:

pip install requests
pip install xlrd
pip install json
pip install unittest

2、創(chuàng)建六類(lèi)Python Package

利用Page Object Model 設(shè)計(jì)理念創(chuàng)建六類(lèi)Python Package(也可根據(jù)項(xiàng)目要求具體實(shí)施)

3、創(chuàng)建一個(gè)Base_Page.py

先在base包里創(chuàng)建一個(gè)Base_Page.py

<1>導(dǎo)入模塊,并創(chuàng)建Base類(lèi),封裝各類(lèi)請(qǐng)求方法

import requests  #導(dǎo)入requests模塊
class Base():   
    def method_post(self,url,params = None,data = None,headers = None,files = None):
        return requests.post(url = url,params = params,data = data,headers = headers,files = files)
    def method_get(self,url,params = None,data = None,headers = None,files = None):
        return requests.get(url = url,params = params,data = data,headers = headers,files = files)
    def method_put(self,url,params = None,data = None,headers = None,files = None):
        return requests.put(url = url,params = params,data = data,headers = headers,files = files)
    def method_delete(self,url,params = None,data = None,headers = None,files = None):
        return requests.delete(url = url,params = params,data = data,headers = headers,files = files

因?yàn)槊恳粋€(gè)請(qǐng)求都會(huì)有params參數(shù)或是data參數(shù),但是不可能兩個(gè)都存在,所以這里用了None,依次類(lèi)推

<2>適配于接口用例執(zhí)行,讀取Excel表時(shí),將各類(lèi)請(qǐng)求做判斷,當(dāng)符合哪一種時(shí),就去執(zhí)行哪一種

def requests_type(self,method,url,params = None,data = None,headers = None,files = None):
        if method =='post' or method =='POST':
            return self.method_post(url = url,params = params,data = data,headers = headers,files = files)
        elif method =='get' or method =='GET':
            return self.method_get(url = url,params = params,data = data,headers = headers,files = files)
        elif method =='put' or method =='PUT':
            return requests.put(url = url,params = params,data = data,headers = headers,files = files)
        elif method =='delete' or method =='DELETE':
            return requests.delete(url = url,params = params,data = data,headers = headers,files = files)

<3> 將幾種請(qǐng)求做簡(jiǎn)單調(diào)試,調(diào)試通了,那么我們就可以進(jìn)行下一項(xiàng)

也可以對(duì)需要拿到cookie的接口進(jìn)行封裝方法保存:

def Get_Login_cookie(self,data):
        res = self.method_post(url = "請(qǐng)求網(wǎng)址",data = data)
        return {"userId":str(res.json()['result']['userId']),"sessionId":res.json()['result']['sessionId']}

之后我們要將base頁(yè)驗(yàn)證的這些代碼做清除,否則的話永遠(yuǎn)都是調(diào)的這些接口

4、創(chuàng)建common類(lèi)

再common類(lèi)下創(chuàng)建commons.py文件,并創(chuàng)建common類(lèi)

<1> 封裝日志方法

這里我添加了一個(gè)data包,用于存放xlrd表,以及html報(bào)告存放路徑、log日志存放路徑

log_path = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測(cè)試\report\logs'
report_html = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測(cè)試\report\html'
read_xlrd = r'D:\PycharmProjects\自動(dòng)化接口\自動(dòng)化接口測(cè)試\data'
class Common():
    #封裝日志方法
    def get_logs(self,path = log_path):
        import logging,time
        logs = logging.getLogger()
        logs.setLevel(logging.DEBUG)
        path = path+'/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log'
        write_file = logging.FileHandler(path,'a+',encoding='utf-8')
        write_file.setLevel(logging.DEBUG)
        set_logs = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')
        write_file.setFormatter(set_logs)
        pycharm_text = logging.StreamHandler()
        pycharm_text.setFormatter(set_logs)
        logs.addHandler(write_file)
        logs.addHandler(pycharm_text)
        return logs

<2> 封裝讀取Excel表方法,把他轉(zhuǎn)換成字典形式,方便json格式讀取

# 讀取Excel表方法,方便后續(xù)讀取接口用例數(shù)據(jù)
    def ReadExcelTypeDict(self,file_name,path = read_xlrd):
        path = path+'/' + file_name
        import xlrd
        work_book = xlrd.open_workbook(path)  # 打開(kāi)Excel表
        sheets = work_book.sheet_names()  # 獲取所有的sheets頁(yè)
        DatasList = []
        for sheet in sheets:
            sheets = work_book.sheet_by_name(sheet)
            nrows = sheets.nrows
            for i in range(0,nrows):
                values = sheets.row_values(i)
                DatasList.append(values)
        title_list = DatasList[0]
        content_list = DatasList[1:]
        new_list = []
        for content in content_list:
            dic = {}
            for i in range(len(content)):
                dic[title_list[i]] = content[i]
            new_list.append(dic)
        return new_list   #最終返回為字典形式 有鍵和值

為什么要轉(zhuǎn)換格式呢?

這里就涉及到了怎么設(shè)計(jì)一個(gè)自動(dòng)化接口用例

用例的參數(shù)值要用json格式寫(xiě)入,不要有空格
預(yù)期結(jié)果的出參也要用json格式寫(xiě)入
不要有' '值都要用" "包起來(lái)

<3>封裝一個(gè)生成HTML報(bào)告方法

# 封裝一個(gè)HTML報(bào)告方法
    def GetHtmlResult(self,suite,title,path = report_html):
        import HTMLTestReportCN,time
        path = path + '/' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.html'
        with open(path,'wb+') as f:
            run = HTMLTestReportCN.HTMLTestRunner(stream=f,description='用戶(hù)相關(guān)接口測(cè)試報(bào)告',tester='小白',title = title)
            run.run(suite)

其余還有需要補(bǔ)充的可以繼續(xù)添加,我這里三個(gè)基本夠用

5、讀取Excel數(shù)據(jù)表聯(lián)合使用

在case包下創(chuàng)test用例,并調(diào)用我們?cè)赽ase頁(yè)封裝好的請(qǐng)求api以及common中的讀取Excel數(shù)據(jù)表聯(lián)合使用

<1>創(chuàng)建test_login.py

<2> 導(dǎo)入unittest、common類(lèi)下的commons類(lèi)、ddt數(shù)據(jù)驅(qū)動(dòng)、Base下的base_page頁(yè)

import unittest
import ddt
import 自動(dòng)化接口測(cè)試.common.commons as common
from 自動(dòng)化接口測(cè)試.base.Base_Page import Base

<3> 搭建unittest框架內(nèi)部,并填充方法

import unittest
import ddt
import 自動(dòng)化接口測(cè)試.common.commons as common
from 自動(dòng)化接口測(cè)試.base.Base_Page import Base
r = common.Common().ReadExcelTypeDict('cezxhi .xlsx')  # 拿到具體的Excel表數(shù)據(jù)
@ddt.ddt  #導(dǎo)入ddt模塊
class TestLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:  # setupclass類(lèi)方法  全部用例開(kāi)始前執(zhí)行一次
        cls.logs = common.Common().get_logs() # 導(dǎo)入日志方法
        cls.logs.debug('開(kāi)始寫(xiě)入接口自動(dòng)化測(cè)試用例')
    @classmethod
    def tearDownClass(cls) -> None:
        cls.logs.debug('自動(dòng)化接口用例結(jié)束')
 
    def setUp(self) -> None:
        self.logs.debug('開(kāi)始本條接口用例')
 
    def tearDown(self) -> None:
        self.logs.debug('結(jié)束本條用例')
 
    @ddt.data(*r) #  引入ddt模塊,讀取拿到的數(shù)據(jù)
    def test_logins(self,pars):  # 用例方法名開(kāi)頭必須已test  pars參數(shù)為接收的表數(shù)據(jù)值
        import json  #導(dǎo)入json模塊
        dic = json.loads(pars['body參數(shù)值'])  # 將Excel數(shù)據(jù)中的參數(shù)值轉(zhuǎn)變?yōu)閖son格式
        url = pars['接口地址']  # 拿到請(qǐng)求url
        yuqi = pars['預(yù)期結(jié)果']  # 拿到預(yù)期結(jié)果
        fs = pars['請(qǐng)求方式'] # 拿到請(qǐng)求方式
        result = Base().requests_type(method = fs,url = url,data = dic)  # 填充base頁(yè)的請(qǐng)求api
        self.assertEqual(result.text,yuqi)  # 進(jìn)行斷言 看用例是否通過(guò)

<4> 執(zhí)行用例后生成測(cè)試報(bào)告:

if __name__ == '__main__':
    load = unittest.TestLoader().loadTestsFromTestCase(TestLogin)  #使用loader加載方式 來(lái)找尋所有已test開(kāi)頭的用例
    suite = unittest.TestSuite([load,])
    common.Common().GetHtmlResult(suite,'登錄測(cè)試用例')

<5> copy當(dāng)前要執(zhí)行的腳本路徑,添加到運(yùn)行方式為python里

最后我們r(jià)un一下

控制臺(tái)是這樣的

為什么會(huì)有400呢?因?yàn)橛幸恍┙涌谑钱惓5?,比如url錯(cuò)誤的,少傳入?yún)?shù)、空參,所以會(huì)出錯(cuò),常理之中

<6> 看下生成的測(cè)試報(bào)告

在pycharm中是這樣的

然后我們copy下他的路徑到瀏覽器中查看

根據(jù)我追蹤的信息,第一條失敗是因?yàn)閟essionId是可以變的,每一次的值都是不一樣,在這里也希望大家能夠找到BUG,并妥善處理好每一個(gè)問(wèn)題。

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

相關(guān)文章

  • Pycharm 2to3配置,python2轉(zhuǎn)python3方式

    Pycharm 2to3配置,python2轉(zhuǎn)python3方式

    這篇文章主要介紹了Pycharm 2to3配置,python2轉(zhuǎn)python3方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python+matplotlib實(shí)現(xiàn)鼠標(biāo)移動(dòng)三角形高亮及索引顯示

    python+matplotlib實(shí)現(xiàn)鼠標(biāo)移動(dòng)三角形高亮及索引顯示

    這篇文章主要介紹了Python+matplotlib實(shí)現(xiàn)鼠標(biāo)移動(dòng)三角形高亮及索引顯示,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 詳解Python判定IP地址合法性的三種方法

    詳解Python判定IP地址合法性的三種方法

    這篇文章主要介紹了詳解Python判定IP地址合法性的三種方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 淺析python函數(shù)式編程

    淺析python函數(shù)式編程

    這篇文章主要介紹了python函數(shù)式編程的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python的數(shù)據(jù)類(lèi)型與標(biāo)識(shí)符和判斷語(yǔ)句詳解

    Python的數(shù)據(jù)類(lèi)型與標(biāo)識(shí)符和判斷語(yǔ)句詳解

    在本篇文章里小編給大家整理了一篇關(guān)于python數(shù)據(jù)類(lèi)型與標(biāo)識(shí)符和判斷語(yǔ)句的介紹,有需要的朋友們可以學(xué)習(xí)下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • 在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程

    在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程

    這篇文章主要介紹了在Python中進(jìn)行自動(dòng)化單元測(cè)試的教程,本文來(lái)自于IBM官方文檔,需要的朋友可以參考下
    2015-04-04
  • Python機(jī)器學(xué)習(xí)之決策樹(shù)算法實(shí)例詳解

    Python機(jī)器學(xué)習(xí)之決策樹(shù)算法實(shí)例詳解

    這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之決策樹(shù)算法,較為詳細(xì)的分析了實(shí)例詳解機(jī)器學(xué)習(xí)中決策樹(shù)算法的概念、原理及相關(guān)Python實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • Pipenv一鍵搭建python虛擬環(huán)境的方法

    Pipenv一鍵搭建python虛擬環(huán)境的方法

    這篇文章主要介紹了Pipenv一鍵搭建python虛擬環(huán)境的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究

    Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究

    這篇文章主要為大家介紹了Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python中import機(jī)制詳解

    Python中import機(jī)制詳解

    在剛剛接觸python時(shí),我們會(huì)被其優(yōu)美的格式、簡(jiǎn)潔的語(yǔ)法和無(wú)窮無(wú)盡的類(lèi)庫(kù)所震撼。在真正的將python應(yīng)用到實(shí)際的項(xiàng)目中,你會(huì)遇到一些無(wú)法避免的問(wèn)題。最讓人困惑不解的問(wèn)題有二類(lèi),一個(gè)編碼問(wèn)題,另一個(gè)則是引用問(wèn)題。本文主要討論關(guān)于Python中import的機(jī)制與實(shí)現(xiàn)
    2017-11-11

最新評(píng)論