国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

簡單實現(xiàn)接口自動化測試(基于python+unittest)

這篇具有很好參考價值的文章主要介紹了簡單實現(xiàn)接口自動化測試(基于python+unittest)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

簡介

本文通過從Postman獲取基本的接口測試Code簡單的接口測試入手,一步步調(diào)整優(yōu)化接口調(diào)用,以及增加基本的結(jié)果判斷,講解Python自帶的Unittest框架調(diào)用,期望各位可以通過本文對接口自動化測試有一個大致的了解。

引言

為什么要做接口自動化測試?

在當(dāng)前互聯(lián)網(wǎng)產(chǎn)品迭代頻繁的背景下,回歸測試的時間越來越少,很難在每個迭代都對所有功能做完整回歸。但接口自動化測試因其實現(xiàn)簡單、維護(hù)成本低,容易提高覆蓋率等特點,越來越受重視。

為什么要自己寫框架呢?

使用Postman調(diào)試通過過直接可以獲取接口測試的基本代碼,結(jié)合使用requets + unittest很容易實現(xiàn)接口自動化測試的封裝,而且requests的api已經(jīng)非常人性化,非常簡單,但通過封裝以后(特別是針對公司內(nèi)特定接口),可以進(jìn)一步提高腳本編寫效率。

一個現(xiàn)有的簡單接口例子

下面使用requests + unittest測試一個查詢接口

接口信息如下

請求信息:

Method:POST

URL:api/match/image/getjson

Request:

{
"category": "image",
"offset": "0",
"limit": "30",
"sourceId": "0",
"metaTitle": "",
"metaId": "0",
"classify": "unclassify",
"startTime": "",
"endTime": "",
"createStart": "",
"createEnd": "",
"sourceType": "",
"isTracking": "true",
"metaGroup": "",
"companyId": "0",
"lastDays": "1",
"author": ""
}

Response示例:

{
"timestamp" : xxx,
"errorMsg" : "",
"data" : {
"config" : xxx
}

Postman測試方法見

測試思路

1.獲取Postman原始腳本

2.使用requests庫模擬發(fā)送HTTP請求**

3.對原始腳本進(jìn)行基礎(chǔ)改造**

4.使用python標(biāo)準(zhǔn)庫里unittest寫測試case**

原始腳本實現(xiàn)

未優(yōu)化

該代碼只是簡單的一次調(diào)用,而且返回的結(jié)果太多,很多返回信息暫時沒用,示例代碼如下

import requests

url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = {"category":"image","offset":"0","limit":"30","sourceId":"0","metaTitle":"","metaId":"0","classify":"unclassify","startTime":"","endTime":"","createStart":"","createEnd":"","sourceType":"","isTracking":"true","metaGroup":"","companyId":"0","lastDays":"1","author":""}

headers = {
    'cache-control': "no-cache",
    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
    }

response = requests.request("POST", url, headers=headers, params=querystring)

print(response.text)
優(yōu)化 第一版

調(diào)整代碼結(jié)構(gòu),輸出結(jié)果Json出來,獲取需要驗證的response.status_code,以及獲取結(jié)果校驗需要用到的results['total']

#!/usr/bin/env python
#coding: utf-8
'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''

import unittest
import json
import traceback
import requests


url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = {
    "category": "image",
    "offset": "0",
    "limit": "30",
    "sourceId": "0",
    "metaTitle": "",
    "metaId": "0",
    "classify": "unclassify",
    "startTime": "",
    "endTime": "",
    "createStart": "",
    "createEnd": "",
    "sourceType": "",
    "isTracking": "true",
    "metaGroup": "",
    "companyId": "0",
    "lastDays": "1",
    "author": ""
}

headers = {
    'cache-control': "no-cache",
    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
    }

#Post接口調(diào)用
response = requests.request("POST", url, headers=headers, params=querystring)

#對返回結(jié)果進(jìn)行轉(zhuǎn)義成json串
results = json.loads(response.text)

#獲取http請求的status_code
print "Http code:",response.status_code

#獲取結(jié)果中的total的值
print results['total']
#print(response.text)
優(yōu)化 第二版

接口調(diào)用異常處理,增加try,except處理,對于返回response.status_code,返回200進(jìn)行結(jié)果比對,不是200數(shù)據(jù)異常信息。

#!/usr/bin/env python
#coding: utf-8
'''
unittest merchant backgroud interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''

import json
import traceback
import requests


url = "http://cpright.xinhua-news.cn/api/match/image/getjson"

querystring = {
    "category": "image",
    "offset": "0",
    "limit": "30",
    "sourceId": "0",
    "metaTitle": "",
    "metaId": "0",
    "classify": "unclassify",
    "startTime": "",
    "endTime": "",
    "createStart": "",
    "createEnd": "",
    "sourceType": "",
    "isTracking": "true",
    "metaGroup": "",
    "companyId": "0",
    "lastDays": "1",
    "author": ""
}

headers = {
    'cache-control': "no-cache",
    'postman-token': "e97a99b0-424b-b2a5-7602-22cd50223c15"
    }


try:
    #Post接口調(diào)用
    response = requests.request("POST", url, headers=headers, params=querystring)

    #對http返回值進(jìn)行判斷,對于200做基本校驗
    if response.status_code == 200:
        results = json.loads(response.text)
        if results['total'] == 191:
            print "Success"
        else:
            print "Fail"
            print results['total']
    else:
        #對于http返回非200的code,輸出相應(yīng)的code
        raise Exception("http error info:%s" %response.status_code)
except:
    traceback.print_exc()
優(yōu)化 第三版

1.該版本改動較大,引入config文件,單獨封裝結(jié)果校驗?zāi)K,引入unittest模塊,實現(xiàn)接口自動調(diào)用,并增加log處理模塊;
2.對不同Post請求結(jié)果進(jìn)行封裝,不同接口分開調(diào)用;
3.測試用例的結(jié)果進(jìn)行統(tǒng)計并最終輸出

#!/usr/bin/env python
#coding: utf-8
'''
unittest interface
@author: zhang_jin
@version: 1.0
@see:http://www.python-requests.org/en/master/
'''

import unittest
import json
import traceback
import requests
import time
import result_statistics
import config as cf
from com_logger import  match_Logger


class MyTestSuite(unittest.TestCase):
    """docstring for MyTestSuite"""
    #@classmethod
    def sedUp(self):
        print "start..."
    #圖片匹配統(tǒng)計
    def test_image_match_001(self):
        url = cf.URL1

        querystring = {
            "category": "image",
            "offset": "0",
            "limit": "30",
          "sourceId": "0",
          "metaTitle": "",
          "metaId": "0",
          "classify": "unclassify",
          "startTime": "",
          "endTime": "",
          "createStart": "",
          "createEnd": "",
          "sourceType": "",
          "isTracking": "true",
          "metaGroup": "",
          "companyId": "0",
          "lastDays": "1",
          "author": ""
        }
        headers = {
            'cache-control': "no-cache",
            'postman-token': "545a2e40-b120-2096-960c-54875be347be"
            }


        response = requests.request("POST", url, headers=headers, params=querystring)
        if response.status_code == 200:
            response.encoding = response.apparent_encoding
            results = json.loads(response.text)
            #預(yù)期結(jié)果與實際結(jié)果校驗,調(diào)用result_statistics模塊
            result_statistics.test_result(results,196)
        else:
            print "http error info:%s" %response.status_code

        #match_Logger.info("start image_query22222")
        #self.assertEqual(results['total'], 888)

        '''
        try:
            self.assertEqual(results['total'], 888)
        except:
            match_Logger.error(traceback.format_exc())
        #print results['total']
        '''

    #文字匹配數(shù)據(jù)統(tǒng)計
    def test_text_match_001(self):

        text_url = cf.URL2

        querystring = {
            "category": "text",
            "offset": "0",
            "limit": "30",
            "sourceId": "0",
            "metaTitle": "",
            "metaId": "0",
            "startTime": "2017-04-14",
            "endTime": "2017-04-15",
            "createStart": "",
            "createEnd": "",
            "sourceType": "",
            "isTracking": "true",
            "metaGroup": "",
            "companyId": "0",
            "lastDays": "0",
            "author": "",
            "content": ""
        }
        headers = {
            'cache-control': "no-cache",
            'postman-token': "ef3c29d8-1c88-062a-76d9-f2fbebf2536c"
            }

        response = requests.request("POST", text_url, headers=headers, params=querystring)

        if response.status_code == 200:
            response.encoding = response.apparent_encoding
            results = json.loads(response.text)
            #預(yù)期結(jié)果與實際結(jié)果校驗,調(diào)用result_statistics模塊
            result_statistics.test_result(results,190)
        else:
            print "http error info:%s" %response.status_code

        #print(response.text)

    def tearDown(self): 
        pass

if __name__ == '__main__':
    #image_match_Logger = ALogger('image_match', log_level='INFO')

    #構(gòu)造測試集合
    suite=unittest.TestSuite()
    suite.addTest(MyTestSuite("test_image_match_001"))
    suite.addTest(MyTestSuite("test_text_match_001"))

    #執(zhí)行測試
    runner = unittest.TextTestRunner()
    runner.run(suite)
    print "success case:",result_statistics.num_success
    print "fail case:",result_statistics.num_fail
    #unittest.main()
最終輸出日志信息
Zj-Mac:unittest lazybone$ python image_test_3.py 
測試結(jié)果:通過

.測試結(jié)果:不通過 
錯誤信息: 期望返回值:190 實際返回值:4522

.
----------------------------------------------------------------------
Ran 2 tests in 0.889s

OK
success case: 1
fail case: 1

后續(xù)改進(jìn)建議

1.unittest輸出報告也可以推薦使用HTMLTestRunner(我目前是對結(jié)果統(tǒng)計進(jìn)行了封裝)

2.接口的繼續(xù)封裝,參數(shù)化,模塊化

3.unittest單元測試框架實現(xiàn)參數(shù)化調(diào)用第三方模塊引用(nose-parameterized)

4.持續(xù)集成運(yùn)行環(huán)境、定時任務(wù)、觸發(fā)運(yùn)行、郵件發(fā)送等一系列功能均可以在Jenkins上實現(xiàn)。

簡單實現(xiàn)接口自動化測試(基于python+unittest),接口自動化測試,自動化測試,軟件測試,lua,開發(fā)語言,自動化測試框架,python文章來源地址http://www.zghlxwxcb.cn/news/detail-727133.html

到了這里,關(guān)于簡單實現(xiàn)接口自動化測試(基于python+unittest)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python實現(xiàn)基于RPC協(xié)議的接口自動化測試

    python實現(xiàn)基于RPC協(xié)議的接口自動化測試

    RPC(Remote Procedure Call)遠(yuǎn)程過程調(diào)用協(xié)議是一個用于建立適當(dāng)框架的協(xié)議。從本質(zhì)上講,它使一臺機(jī)器上的程序能夠調(diào)用另一臺機(jī)器上的子程序,而不會意識到它是遠(yuǎn)程的。 RPC 是一種軟件通信協(xié)議,一個程序可以用來向位于網(wǎng)絡(luò)上另一臺計算機(jī)的程序請求服務(wù),而不必了解

    2024年02月04日
    瀏覽(26)
  • 基于RPC協(xié)議的接口自動化測試可以用Python語言實現(xiàn)

    基于RPC協(xié)議的接口自動化測試可以用Python語言實現(xiàn)。下面是實現(xiàn)步驟: 1、安裝依賴庫,如protobuf、grpc。 2、編寫.proto文件定義接口參數(shù)和返回值。 3、使用protoc編譯.proto文件生成Python代碼。 4、編寫客戶端代碼調(diào)用遠(yuǎn)程接口進(jìn)行測試。 具體實現(xiàn)步驟如下: 1、安裝依賴庫 在終

    2024年02月08日
    瀏覽(25)
  • python pytest 最簡單的接口自動化測試框架

    最近由于工作的原因,需要開發(fā)一個接口自動化測試框架,使用pytest框架、數(shù)據(jù)驅(qū)動,并展示直觀的測試報告。 具體的開發(fā)過程如下: 安裝必要的庫: pytest:用于編寫和運(yùn)行測試用例。 requests:用于發(fā)送 HTTP 請求。 pytest-html:用于生成 HTML 格式的測試報告。 可以使用以下命

    2024年03月19日
    瀏覽(46)
  • 基于 python 的接口自動化測試,讓你輕松掌握接口自動化

    基于 python 的接口自動化測試,讓你輕松掌握接口自動化

    目錄 目錄 一、簡介 ? ? ? ? ? ? ? ??編輯二、引言 三、環(huán)境準(zhǔn)備 四、測試接口準(zhǔn)備 接口信息 五、編寫接口測試 六、優(yōu)化 封裝接口調(diào)用 ? 本文從一個簡單的登錄接口測試入手,一步步調(diào)整優(yōu)化接口調(diào)用姿勢; 然后簡單討論了一下接口測試框架的要點; 最后介紹了一下

    2023年04月19日
    瀏覽(30)
  • 一個簡單的接口自動化測試框架:Python+Requests+Pytest+Allure

    一個簡單的接口自動化測試框架:Python+Requests+Pytest+Allure

    project:api_test ——api_keyword ————api_key.py:接口驅(qū)動類 ——case ————test_cases.py:測試套件和測試用例 ——report_allure( 無需創(chuàng)建 ):allure報告 ——result( 無需創(chuàng)建 ):測試用例運(yùn)行結(jié)果 ——VAR ————VAR.py:常量類 conftest.py:項目級別fixture main.py:主函數(shù)

    2024年02月03日
    瀏覽(95)
  • 基于 Junit 的接口自動化測試框架實現(xiàn)

    基于 Junit 的接口自動化測試框架實現(xiàn)

    目錄 前言: 分層的自動化測試 接口測試的意義 接口測試框架選型 我們封裝的接口測試框架 接口測試關(guān)鍵實踐 測試代碼規(guī)范 (僅供參考) 前言: 基于JUnit的接口自動化測試框架可以實現(xiàn)對接口進(jìn)行自動化測試,并提供了豐富的斷言和報告功能。JUnit是一個流行的Java單元測試

    2024年02月16日
    瀏覽(28)
  • 基于Python接口自動化測試框架(初級篇)附源碼

    基于Python接口自動化測試框架(初級篇)附源碼

    目錄 引言 框架設(shè)計思路 框架結(jié)構(gòu) 運(yùn)行程序 總結(jié) 總結(jié): ? 很多人都知道,目前市場上很多自動化測試工具,比如:Jmeter,Postman,TestLink等,還有一些自動化測試平臺,那為啥還要開發(fā)接口自動化測試框架呢? 相同之處就不說了,先說一下工具的局限性: 1.測試數(shù)據(jù)不可控

    2024年02月11日
    瀏覽(21)
  • 如何實現(xiàn)基于場景的接口自動化測試用例?

    如何實現(xiàn)基于場景的接口自動化測試用例?

    自動化本身是為了提高工作效率,不論選擇何種框架,何種開發(fā)語言,我們最終想實現(xiàn)的效果,就是讓大家用最少的代碼,最小的投入,完成自動化測試的工作。 基于這個想法,我們的接口自動化測試思路如下: 1.不變的內(nèi)容全部通過配置化來實現(xiàn),比如:腳本執(zhí)行的環(huán)境、

    2024年02月14日
    瀏覽(22)
  • Python+Requests實現(xiàn)接口自動化測試

    Python+Requests實現(xiàn)接口自動化測試

    一般對于自動化的理解,有兩種方式的自動化。 第一,不需要寫代碼,完全由工具實現(xiàn),這種方式的工具一般是公司自己研發(fā)的,方便黑盒測試人員使用。這種工具的特點是學(xué)習(xí)成本低,方便使用,但是通用性不強(qiáng),也就是換了一家公司,就很有可能無法使用之前的工具。

    2024年01月16日
    瀏覽(22)
  • 用Python搞定接口自動化測試:輕松實現(xiàn)RPC協(xié)議接口測試

    用Python搞定接口自動化測試:輕松實現(xiàn)RPC協(xié)議接口測試

    每天進(jìn)步一點點,關(guān)注我哦,每天分享測試技術(shù)文章,文末有福利! 目錄:導(dǎo)讀 前言 一、什么是RPC 二、RPC框架 三、基于grpc框架服務(wù)的接口測試 01創(chuàng)建一個grpc服務(wù)接口 02調(diào)用grpc接口客戶端 03接口框架中適配grpc封裝 四、基于dubbo框架服務(wù)的接口測試 01、dubbo服務(wù)管理簡單使

    2024年02月01日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包