- Python服務端測試開發實戰
- 無涯編著
- 1794字
- 2024-12-31 18:36:54
1.5.1 參數化實戰
在pytest測試框架中,可以通過parametrize來實現參數化的測試。例如,被測函數的邏輯是兩個數相加,下面以該函數為例演示參數化案例的實戰。依據參數化的核心思想,不管是什么數據類型,只要存儲在列表中就循環對象進行賦值。下面詳細演示不同的數據形式并將測試數據分離到不同的文件形式。
1.列表數據形式
列表數據形式是指測試的數據存儲在列表中的元素數據類型是列表,代碼如下。

備注:
如上代碼中,測試數據被分離到函數data()中,分離的數據是列表的數據類型。在測試函數test_add_list()中,測試函數的形式參數需要與@pytest.mark.parametrize中的一致,這樣函數data()在每次循環時,都會依據列表中的元素信息進行賦值。第一次循環時形式參數a賦予的值是1,第二次循環時a賦予的值是字符串wuya,第三次循環時a賦予的值是1.0,測試函數中形式參數b在循時賦予的值分別是1、Share、1.0。執行如上代碼后,執行結果如圖1-15所示。

圖1-15 列表數據形式的執行結果
2.元組數據形式
元組數據形式是指分離出來的測試數據在列表中的數據類型是元組,具體分離的測試數據和代碼如下。

備注:
如上源代碼中,從data()函數中分離的測試數據是元組的數據類型,列表循環時會對元組中的值一一進行賦值,執行代碼后的輸出結果如圖1-16所示。

圖1-16 元組數據形式執行結果
3.字典數據形式
字典數據形式是指分離的測試數據的數據類型是字典,其測試數據以及測試代碼如下。

備注:
如上代碼中,從data()函數中分離出來的測試數據的數據類型都是字典,字典數據類型的特點是key-value的數據形式。在測試函數執行的過程中,依據字典的key值可以循環獲取value的值。執行代碼后的輸出結果如圖1-17所示。

圖1-17 字典數據形式執行結果
4.JSON文件形式
在測試的過程中,也可以把測試數據分離到JSON等文件中,這個過程叫數據驅動。這里以JSON文件為案例,把測試數據分離到JSON文件中,JSON文件的內容如下。

備注:
如上是分離到JSON文件的測試數據。在JSON文件中,特別需要注意的是,JSON文件中的字符串必須用雙引號并且是key-value的數據形式。
如上已將數據分離到JSON文件中,下面詳細演示從JSON文件中讀取數據并與pytest測試框架的參數化整合起來,代碼如下。

備注:
如上代碼中,readJson()函數是從JSON文件中讀取測試數據并且發現數據是列表的數據形式。執行如上的代碼后輸出的結果如圖1-18所示。

圖1-18 JSON文件形式執行結果
5.YAML文件形式
在數據驅動中,YAML文件也是被廣泛使用的文件之一,下面介紹如何把測試數據分離到YAML文件中,YAML文件的內容如下。

在Python中,操作YAML文件需要單獨安裝第三方庫,安裝命令如下。
pip3 install pyyaml
安裝成功后,下面詳細介紹從YAML文件中讀取數據,并與pytest測試框架整合起來應用于參數化,代碼如下。

備注:
如上代碼中,函數readYaml()讀取YAML文件后以列表的形式返回數據。執行如上代碼后,輸出的結果如圖1-19所示。

圖1-19 YAML文件形式執行結果
6.PostMan智能化轉為pytest測試代碼
在API自動化測試中,很多測試人員使用的是測試工具PostMan,但是后期代碼遷移過程的成本又很高。結合參數化的本質,其實可以很智能化地實現把PostMan中的API測試用例轉為pytest測試代碼。被測試的登錄服務源碼如下。

針對如上的登錄微服務代碼,PostMan中的接口測試用例如圖1-20所示。

圖1-20 PostMan中接口測試用例
把login集合導出為JSON文件,分析JSON文件后,發現請求的信息都在request中,那么可以手動把響應數據添加到response中,完善后的JSON文件內容如下。





下面讀取JSON文件,結合參數化的思想智能化地把PostMan的測試用例轉為pytest代碼,代碼如下。

備注:
如上代碼中,在函數readPostMan()中,將JSON文件中的數據解析出來后處理成了列表的數據類型。下面再和pytest的參數化整合起來,就可以實現把PostMan的測試用例智能化地轉為pytest測試代碼,代碼執行后的結果如圖1-21所示。

圖1-21 PostMan的測試用例智能化地轉為pytest測試代碼的執行結果
7.單接口批量執行
在微服務架構下,有眾多的服務需要進行單接口測試,以保障服務在參數為空以及請求參數錯誤的情況下后端服務的處理邏輯正常。如果使用常規編寫API測試用例的方式,那么只會編寫很多重復性的代碼。結合參數化的思想,可以把請求地址、請求參數、響應數據分離出來,這樣做的優勢是編寫一個測試用例的代碼就能批量執行以及覆蓋所有的測試場景。以本節的“6.PostMan智能化轉為pytest測試代碼”的登錄微服務為案例,下面使用參數化的特性實現登錄微服務批量化的驗證和測試場景的覆蓋,實現代碼如下。

如上代碼中,把測試數據分離到data()函數,分離出的測試數據主要是請求地址、請求參數、響應數據,執行如上代碼后,輸出結果如下。

通過以上結果發現,批量化驗證微服務的執行結果都成功了。這樣可以使用更少的代碼實現最大的覆蓋率。
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- Oracle Database In-Memory(架構與實踐)
- 零基礎玩轉區塊鏈
- INSTANT Sencha Touch
- Clojure Reactive Programming
- C語言程序設計
- D3.js By Example
- Qt 4開發實踐
- HTML5移動前端開發基礎與實戰(微課版)
- Learning Image Processing with OpenCV
- Spring Boot 2+Thymeleaf企業應用實戰
- 深入理解MySQL主從原理
- Building Microservices with .NET Core 2.0(Second Edition)
- ArcGIS Blueprints
- SFML Essentials