Python接口自動化測試之UnitTest詳解

?基本概念

UnitTest單元測試框架是受到JUnit的啟發,與其他語言中的主流單元測試框架有著相似的風格。其支持測試自動化,配置共享和關機代碼測試。支持將測試樣例聚合到測試集中,并將測試與報告框架獨立。

它分為四個部分test fixture、TestCase、test suite、test runner,分別是:

測試腳手架:為了開展項測試所需要進行的準備工作,以及所有相關的清理操作;

測試用例:一個測試用例是一個獨立的測試單元。它檢查輸入特定的數據時的響應;

測試套件:它用于歸檔需要一起執行的測試用例;

測試運行器:是一個用于執行和輸出測試結果的組件。

TestCase詳解

類TestCase為測試用例提供了支持。通過繼承TestCase來設置一個新的測試類,和設置測試方法,每個測試方法通過實際響應結果與預期結果對比來實現單元測試。

測試用例包括的方法:setUp()、tearDown()、setUpClass()、tearDownClass()。注意類名要以Test開頭,測試用例的名稱要以test開頭

下面一個示例來展示:


import unittest
class Test_unittest(unittest.TestCase):def setUp(self) -> None:print('setup')def test(self):print('test')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在這里插入圖片描述
可以看到運行結果打印了三條測試用例里的內容,setup和teatdown方法,在每次執行測試用例前后都會執行,如果再增加一條測試用例,setup和teardown也會再執行一次,如下圖所示:
在這里插入圖片描述

所以如果想初始化和結束方法只想執行一次的話,可以使用setUpClass()、tearDownClass(),但是注意得在方法前面添加注解@classmethod,看下面示例和結果:

import unittest
class Test_unittest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print('setup')def testcase1(self):print('testcase1')def testcase2(self):print('testcase2')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在這里插入圖片描述
可以看到,使用了setUpClass()方法就只初始化了一次,teardown沒使用就每條用例都會執行一次。

常用方法

斷言

測試用例中還有常用的斷言和skip跳過測試用例。在UniTtest框架中也提供了一個自帶的斷言方式,主要有以下幾種:在這里插入圖片描述

skip跳過

在實際測試中,如有功能缺陷的功能點對應的自動化測試用例執行不了,或者不執行的用例,可以用skip()方法來操作,使用方法為:

1.unittest.skip(‘輸入理由’)——無條件執行跳過操作

2.unittest.skipif(2>1,’理由’)——判斷條件為true的時候執行

3.unittest.skipUnless(1>2’理由’)—判斷條件為false的時候執行

4.unittest.expectedFailure—執行錯誤不計入不通過用例中

下面查看示例,testcase1方法被跳過,testcase2方法使用了斷言,但是斷言結果不對,于是有報錯信息:

import unittest
class Test_unittest(unittest.TestCase):@classmethoddef setUpClass(cls) -> None:print('setup')@unittest.skipdef testcase1(self):print('testcase1')def testcase2(self):a = 1self.assertEqual(a,2,msg='error')print('testcase2')def tearDown(self) -> None:print('teardown')
if __name__ == '__main__':unittest.main()

在這里插入圖片描述

測試套件

當一個類里有多個測試用例又不會同時運行的時候,可以選擇把測試用例添加到suite中,中suite運行(pycharm中直接在文件中寫不行,要重新新建一個py文件)。

1.直接一個一個添加到suite中:

在這里插入圖片描述

解釋:導入該文件中的類,定義一個套件名稱,使用testsuite方法,對該套件添加測試用例,定義一個運行名稱,使用運行方法,添加測試套件,即可運行(得一個個的添加測試用例)。

2.定義一個列表【】把用例都存進去,然后運行:在這里插入圖片描述

3.直接讀取類名的形式來運行(最簡單,最方便,不能使用‘’):在這里插入圖片描述
4.也是讀取名字,不過容易找不到類,需要在前面加一個文件名。

TestRunner

1.編寫完腳本之后重新新建一個文件然后添加用例到suite,即可全部執行。

2.在網上下載htmlTestrunner源碼,復制到python/lib目錄即可import導入:在這里插入圖片描述

Python之request

主要方法解析

requests是Python實現的最簡單易用的HTTP庫,requests庫7個主要方法:在這里插入圖片描述

舉例:普通接口測試的接口之間沒有關聯性,所以直接定義變量去發起get、post請求即可。在這里插入圖片描述?

其中post的請求常用的分為json和formdata,兩種方式請求的參數方式如截圖所示。需要鑒權的,需要導入auth包,然后跟在請求方法后面。

requests方法詳解

具體方法查看可以直接按住ctrl+左鍵點擊requests方法查看源碼。

在這里插入圖片描述

1.url: 請求地址

2.data:字典,字節序列或文件對象,作為Request的內容

3.json: JSON格式的數據,作為Request的內容

4.headers: 字典, HTTP定制頭

5.cookie: 字典或CooKiJar, Request中的cookie

6.auth: 元祖,支持HTTP認證功能

7.files: 字典類型,傳輸文件

8.timeout: 設定超時時間,秒為單位

9.proxies: 字典類型,設定訪問代理服務器,可以增加登錄認證

10.allow_redirects: True/False,默認為True,重定向開關

11.stream: True/False,默認為True,獲取內容立即下載開關

12.verity: True/False默認Ture,認證ssl證書開關

13.cert: 本地ssl證書路徑

Response返回方法詳解

1.response.status_code #返回的http響應狀態碼

2.response.content #返回的是bytes型也就是二進制的數據

3.response.headers # 返回的http請求頭

4.response.json() # 返回響應中的Json數據

5.response.url # 返回url

6.response.encoding # 返回響應的編碼格式

7.response.cookies # 返回響應中的cookie

8.response.text #返回的是Unicode型的數據。—文本

Session詳解

對于需要前后接口依賴的接口測試,比如從上一個請求中獲取token用作下一個接口請求的參數去提交的話,用上面一種方法明顯不合適,按照上面的方法需要定義很多變量,然后根據依賴去添加到對應的請求參數里。

下面這種方法,使用session會話的方式,貫穿前后,只要添加了一次,所有請求都能用到。在這里插入圖片描述

解釋:

1.這個是cynthia缺陷管理系統,登錄的時候需要拿到響應里的cookie作為下一個請求的cookie,不然登錄不上。

2.所以在UniTtest結構中,可以把登錄操作放到setup里面,類似UI自動化一樣,登錄放在初始化中。

3.在setup中把響應的cookie值,加入到請求的里面去了,同時添加了瀏覽器UA。

4.參數可以復用,從頭到尾請求的變量都是rsp,body里的參數都是dict,編寫簡單方便。在這里插入圖片描述

定義一個變量s等于requests的session會話,后面都用這個s的會話去發起請求。

定義一個變量等于rsp等于s去發起請求的結果。

s會話請求的頭文件中cookie需要添加tokenid,不然登錄不上,這個id在rsp響應信息里。

因為響應信息是json字典格式,所以要添加到請求頭里需要按照截圖格式。

如果需要在字典中添加字段或者內容,按照截圖的格式s.headers[‘xxx’]=“xxx”,如果字典中有這個key:value,那么value值會直接更新,沒有這個key那么則會添加這個key:value到字典。

接口實戰

添加token到頭文件中

在公司實際項目中,調接口首先需要獲取token,要先調用獲取token的請求,然后拿到token值之后,在后面接口中添加到頭文件中。

在這里插入圖片描述

self.session.headers.update({“token”:rsp.json()[‘data’][‘token’]})
(左右滑動查看完整代碼)

通過在setup初始化方法中調用獲取token,來拿到token的值,然后添加到整個session的head中去,后續請求中都不需要額外添加head了。

使用ddt做參數化

ddt數據驅動測試,首先pip list ddt,安裝第三方庫,在代碼最上方導入庫中的data

from ddt import ddt,data,在測試類前面聲明ddt,用@ddt:

在這里插入圖片描述

1、在測試用例前聲明使用data,用@data:

@data('test1','test2')
def test_ddt1(self,value):print(value)`在這里插入代碼片`
(左右滑動查看完整代碼)

運行結果中該用例執行了兩次,分別輸出的test1和test2。

2、data用法讀取文件

此方法需要解包,故需要用到unpack方法,在測試用例前聲明@unpack即可。

def readline(self):date = []file = open('D:\\base64\\keyid.txt','r',encoding='utf-8')for line in file:date.append(line.split())return date
@data(*readline(""))
@unpack
def test_ddt2(self,vars):print(vars)

對運行結果解釋:定義一個讀取文件的方法,定義一個list數組,使用file函數的open方法,讀取文件名為“txt1”的文件,以read的形式,編碼格式為utf-8,以for循環的方式一直循環讀取每一行,以\n換行符為一行結尾,以逗號分隔每一個參數,最后返回data值以便下方直接調用。

上面寫了讀取方法之后,在測試用例前,直接使用該方法即可,@data(*readfile())這種形式,接著使用@unpack解包的方法即可。在這里插入圖片描述

生成測試報告

按照上述的方法編寫好測試用例后,結合UniTtest框架生成報告的HTMLTestRunner來生成接口測試報告。在這里插入圖片描述

從網上找的HTMLTestRunner庫文件,下載后放到Python安裝目錄的lib文件夾中就行,后續就可以直接調用了https://github.com/GoverSky/HTMLTestRunner_cn/issues在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/38315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38315.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦提示數據錯誤循環冗余檢查怎么辦?

有些時候,我們嘗試在磁盤上創建分區或清理硬盤時,還可能會遇到這個問題:數據錯誤循環冗余檢查。這是如何導致的呢?我們又該如何解決這個問題呢?下面我們就來了解一下。 導致冗余檢查錯誤的原因有哪些? 數據…

應急響應-釣魚郵件的處理思路溯源及其反制

0x00 釣魚郵件的危害 1.竊取用戶敏感信息,制作虛假網址,誘導用戶輸入敏感的賬戶信息后記錄 2.攜帶病毒木馬程序,誘導安裝,使電腦中病毒木馬等 3.挖礦病毒的傳輸,勒索病毒的傳輸等等 0x01 有指紋的釣魚郵件的溯源處理…

nodejs+vue+elementui社區流浪貓狗救助救援網站_4a4i2

基于此背景,本研究結合管理員即時發布流浪貓狗救助救援信息與用戶的需求,設計并實現了流浪貓狗救助救援網站。系統采用B/S架構,java語言作為主要開發語言,MySQL技術創建和管理數據庫。系統主要分為管理員和用戶兩大功能模塊。通過…

vue 控件的四個角設置 父視圖position:relative

父視圖relative&#xff0c;子視圖 absolute <div class"bg1"> <i class"topL"></i> <i class"topR"></i> <i class"bottomL"></i> <i class"bottomR"></i> <di…

網絡編程555

上傳代碼 #include <stdio.h>//客戶端 #include <string.h> #include <stdlib.h> #include<sys/types.h> #include<sys/socket.h> #include<arpa/inet.h> #include<head.h> #define PORT 69 #define IP "192.168.124.57"…

python之列表推導式

列表推導式是一種簡潔的方式來創建列表。它允許您通過在單個表達式中定義循環和條件邏輯&#xff0c;以一種更緊湊的方式生成新的列表。使用列表推導式可以使代碼更簡潔&#xff0c;易于閱讀&#xff0c;并且通常比傳統的迭代方法更快。 列表推導式的一般語法形式為&#xff1a…

excel填數據轉json格式

定制化比較嚴重&#xff0c;按需更改 excel文件如下 代碼 # -*- coding: utf-8 -*- import oss2 import shutil import sys import xlwt import xlrd import json from datetime import datetime, timedeltafile1 "C:\\Users\\cxy\\Desktop\\generate.xls" #打開表…

使用phpunit進行單元測試

使用phpunit進行單元測試 本教程假定您使用 PHP 8.1 或 PHP 8.2。您將學習如何編寫簡單的單元測試以及如何下載和運行 PHPUnit. PHPUnit 10 的文檔 在這。 下載&#xff1a;可以用以下2種方法之一&#xff1a; 1.PHP 存檔 (PHAR) 我們分發了一個 PHP存檔&#xff08;PHAR&…

MySQL8的下載與安裝-MySQL8知識詳解

本文的內容是mysql8的下載與安裝。主要講的是兩點&#xff1a;從官方網站下載MySQL8安裝和從集成環境安裝MySQL8。 一、從官方網站下載MySQL8.0安裝 MySQL8.0官方下載地址是&#xff1a;&#xff08;見圖&#xff09; 官方正式版的最新版本是8.0.34&#xff0c;也推出了創新版…

Kafka第三課

Flume 由三部分 Source Channel Sink 可以通過配置攔截器和Channel選擇器,來實現對數據的分流, 可以通過對channel的2個存儲容量的的設置,來實現對流速的控制 Kafka 同樣由三大部分組成 生產者 服務器 消費者 生產者負責發送數據給服務器 服務器存儲數據 消費者通過從服務器取…

【C++11保姆級教程】auto和decltype

文章目錄 前言總結一、auto1.初識auto關鍵字 2.auto使用二、decltype1.初識decltype2.使用decltype 總結 前言 在C11中引入了一些新的關鍵字和特性&#xff0c;其中包括auto和decltype。這兩個關鍵字提供了更方便、更靈活的類型推斷機制&#xff0c;使得代碼編寫更加簡潔和可讀…

shell 命令 tee {..}定義循環體

tee & {..}定義循環體 tee{..} 循環體 tee 作用&#xff1a;將標準輸出流內容復制文件中&#xff0c;同時控制臺信息依然會顯示。 > 和 >> 直接將標準輸出流內容重定向&#xff0c;從而導致控制臺無法看到輸出內容。 可選參數 -a &#xff1a;追加內容&#xff1…

CSS3中的var()函數

目錄 定義&#xff1a; 語法&#xff1a; 用法&#xff1a; 定義&#xff1a; var()函數是一個 CSS 函數用于插入自定義屬性&#xff08;有時也被稱為“CSS 變量”&#xff09;的值 語法&#xff1a; var(custom-property-name, value) 函數的第一個參數是要替換的自定義屬性…

MATLAB | 繪圖復刻(十一) | 截斷的含散點及誤差棒的分組柱狀圖

hey大家好久不見&#xff0c;本期帶來一篇繪圖復刻&#xff0c;居然已經出到第11篇了&#xff0c;不知道有朝一日有沒有機會破百&#xff0c;本期繪制的是《PNAS》期刊中pnas.2200057120文章的figure03&#xff0c;文章題目為Intranasal delivery of full-length anti-Nogo-A a…

Debian/Ubuntu清理硬盤空間

Debian/Ubuntu清理硬盤空間_debian清理磁盤空間_weixin_43606319的博客-CSDN博客 1. 刪除殘余的配置文件 通常Debian/Ubuntu刪除軟件包可以用兩條命令 sudo apt-get remove <package-name> sudo apt-get purge <package-name> remove將會刪除軟件包&#xff0…

量化交易接口如何實現量化交易?(程序化交易接口)API

量化交易接口是通過連接投資者的交易賬戶和量化交易系統&#xff08;程序化交易系統&#xff09;&#xff0c;實現自動化的交易操作。以下是量化交易接口實現量化交易的一般步驟&#xff1a; 1. 數據獲取&#xff1a;量化交易接口首先需要通過與行情數據供應商或交易所的API接…

車載以太網物理層

車載以太網物理層 O S I 參考模型的第 1 層&#xff08; 最底層&#xff09;。負責邏輯信號&#xff08; 比特流&#xff09;與物理信號&#xff08;電信號、光信號&#xff09;之間的互相轉換&#xff0c;通過傳輸介質為數據鏈路層提供物理連接。 車載以太網與傳統以太網相比…

java實現docx,pdf文件動態填充數據

一&#xff0c;引入pom 根據需求引入自己所需pom org.apache.poi poi 4.1.1 org.apache.poi poi-ooxml 4.1.1 org.jxls jxls 2.6.0 ch.qos.logback logback-core org.jxls jxls-poi 1.2.0 fr.opensagres.xdocreport fr.opensagres.xdocreport.core 2.0.2 fr.opensagres.xdocrep…

QT筆記——QProcess學習

我們常常想通過某一個類&#xff0c;來啟動一個外部進程 本文將講解如何通過QProcess來進行啟動外部進程 一&#xff1a;了解QProcess QProcess是Qt框架提供的一個類&#xff0c;用于在應用程序中執行外部進程。它提供了一系列函數來啟動、控制和與外部進程進行交互 1.啟動進程…

C++入門基礎(萬字詳解!!!)

文章目錄 前言1.C關鍵字2.命名空間3.C的輸入輸出4.缺省參數4.1 全缺省4.2 半缺省 5.函數重載6. 引用6.1 引用的特性6.2 引用的使用場景6.3 引用和指針 7.內聯函數7.1 特性 8.auto關鍵字8.1 注意事項 9. 基于范圍的for循環9.1 使用條件 10.指針控制nullptr10.1 注意事項 11.總結…