接口自動化框架搭建:python+yaml+request+pytest+allure

測試店小二 發佈 2022-05-20T09:29:06.382352+00:00

總的來說,接口測試是保證高複雜性系統的質量和低成本的經濟利益的最佳方案,它主要體現在如下三個方面:1、節省了測試成本。

前言

接口測試天生是為高複雜性的平台帶來高效的缺陷檢測和質量監督能力,平台越複雜,系統越龐大,接口測試的效果越明顯。

總的來說,接口測試是保證高複雜性系統的質量和低成本的經濟利益的最佳方案,它主要體現在如下三個方面:

1、節省了測試成本

2、接口測試是站在用戶的角度對系統接口進行全面高效持續的檢測。

3、當系統複雜度和體積越大,接口測試的成本就越低,相對應的,效益產出就越高。

接下來就來帶你實現接口自動化測試的教程!

基於:python+requests+pytest+allure實現

一、數據驅動

什麼是數據驅動?

在接口測試中,測試用例可能有上百條,如果將用例全部寫在代碼中,一旦需要修改,將會消耗大量的時間,不容易維護。所以,我們就要測試數據,或者測試用例存儲到文件中,用代碼讀取文件獲取數據,實現數據驅動。

數據驅動分為兩種:

1、參數的數據驅動

2、用例的數據驅動

數據格式的選擇:

excel

生成數據方便,但是是二進位文件,不利於版本管理

Yaml

格式完備,格式簡單

CSV

可以使用Excel編程,文本格式方便管理

yaml

格式完備,格式簡單,可注釋

xml

格式完備,冗長複雜

Json

格式完備,格式死板,不能寫注釋

經以上總結,選擇yaml 管理測試用例。

二、yaml語法

YAML 是一種較為人性化的數據序列化語言,可以配合目前大多數程式語言使用。

YAML 的語法比較簡潔直觀,特點是使用空格來表達層次結構,其最大優勢在於數據結構方面的表達,所以 YAML 更多應用於編寫配置文件,其文件一般以 .yaml 為後綴。

它的基本語法規則如下:

  • 大小寫敏感
  • 使用縮進表示層級關係
  • 縮進時不允許使用Tab鍵,只允許使用空格
  • 縮進的空格數目不重要,只要相同層級的元素左側對齊即可

YAML 支持的數據結構有三種:

  • 對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值

對象:animal:pets ,也可以寫成:hash:{name:Steve, foo: bar}

數組:

- Cat
- Dog
- Goldfish

也可寫成:列表嵌套列表

-
 - Cat
 - Dog
 - Goldfish

字典與列表嵌套:

-
  id:login_02

三、讀取yaml

yaml.load和safe_load()

兩者區別:

safe_load()可以解析簡單的數據結構,而且比較安全,load可以解析比較複雜的數據結構,通常一般使用的最多的還是load()

四、測試用例數據驅動

-
  id: login_01
  title: 登錄成功
  url: member/login
  method: POST
  request_data: {"mobile_phone": "17866554324","pwd":"188888"}
  expect: {"code":0,"msg":"OK"}

讀取yaml

    def read_yaml(self):
        with open(self.filename, encoding='utf-8') as fs:
            # 避免報警告:yaml.FullLoader
            data = yaml.load(fs, Loader=yaml.FullLoader)
            return data

五、接口自動化測試框架搭建。基於:python+requests+pytest+allure實現

眾所周知,目前市面上大部分的企業實施接口自動化最常用的有兩種方式:

1.基於工具類的接口自動化,如:

Postman+Newman+Jenkins+Git/svn
Jmeter+Ant+Jenkins+Git/svn

2.基於代碼類的接口自動化,如:

Python+Requests+Pytest+Allure報告定製

經上面介紹,可以看出來是要實現基於代碼類的接口自動化測試。那具體怎麼實現呢。請接著往下看。

接口自動化離不開接口自動化框架的搭建,在大部分測試人員眼中只要沾上「框架」,就感覺非常神秘,非常遙遠。

主要是因為大部分的測試人員代碼能力比較薄弱;廢話不多說:看效果:

(1)接口自動化測試框架需要解決的問題

1.接口的基本信息使用Yaml來保存,Yaml比Excel更方面,格式更清晰。

2.不同的傳參方式(get,post,put,delete),以及不同的參數傳遞(傳鍵值對,傳Json數據,傳文件)等。

3.接口關聯如何處理。(即上一個接口的返回值作為下一個接口的參數)

4.斷言(判斷預期結果和實際結果是否一致)

5.數據驅動(本框架使用CSV文件實現)

6.日誌監控,異常處理以及基礎路徑的配置。(框架的鍵全性)

7.框架的擴展性,這個至關重要,比如:有些接口參數必須加隨機數的情況。(本框架使用的熱加載的方式。)

接口自動化測試框架目錄結構

(1)Common文件夾是公共封裝文件:如:日誌模塊,分析Yaml模塊,請求封裝模塊,Yaml操作模塊等。

(2)Data文件夾用於存放數據驅動的CSV文件;

(3)Logs文件夾用於存放日誌文件;

(4)Reports用於存放報告文件(基於Allure生產的定製化的報告)

(5)Temp用於存放臨時文件

(6)TestCases用於存放測試用例文件

(7)all.py總執行文件,config.yaml配置文件…

日誌監控文件的信息

日誌監控是每個框架必備的,用於監控每個接口的數據以及返回接口以及報錯信息。

這個日誌有點詳細啊,包括了接口名稱,請求方式,請求路徑,請求頭,請求參數,文件上傳,預期結果,實際結果以及接口是否請求成功和失敗。

(4)、搭建具有企業Logo的定製化報告。

報告還可以定製的嗎?第一次聽說,哈哈,除了Logo定製外,還搭建了,項目名稱定製,模塊定製,接口名稱定製,用例標題定製…N中定製。如下圖:

關鍵字: