python+unittest+requests實現介面自動化的方法
阿新 • • 發佈:2020-09-28
前言:
Requests簡介
Requests 是使用Apache2 Licensed許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。
Python 標準庫中的 urllib2 模組提供了你所需要的大多數 HTTP 功能,但是它的 API 有點落後了。它是為另一個時代、另一個網際網路所建立的。它需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡單的任務。
總之,大家建議大家用Requests吧。
通過下面方法安裝requests
1 |
pip install requests
|
例項實現步驟:
1.採用unittest把每個介面寫成一個個測試指令碼
2.一個測試指令碼中包含一個介面,但是可以包含多個測試用例(即每個介面需要進行多種情況的驗證,介面測試用例名稱已test開頭)
3.使用discover(),該方法會自動根據測試目錄匹配查詢測試用例檔案,並且將查詢到的測試組裝到測試套件中,因此可以直接通過run()方法執行discover,大大簡化了測試用例的查詢和執行
4.利用HTMLTestRunner生成測試報告
文件結構:project專案檔案下有以下三個檔案
1.report存放測試結果
2.test_case存放測試用例
3.run_test_case.py執行測試用例檔案
案例:
1.get介面測試用例原始碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# coding:utf-8
import requests
import unittest
class get_request(unittest.TestCase):
def setUp( self ):
self .get_url = 'https://www.baidu.com/'
def test_post_01( self ):
url = self .get_url
r = requests.get(url)
print r.text
def tearDown( self ):
pass
if __name__ = = "__main__" :
unittest.main()
|
2.post介面測試用例原始碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# coding:utf-8
import requests
import json
import unittest
class post_request(unittest.TestCase):
def setUp( self ):
self .post_url = '..........' #根據實際介面,自己填寫
self .header = { '.......' } #根據實際內容,自己填寫
def test_post_01( self ):
"""正常資料"""
url = self .post_url
header = self .header
data = {""} #根據實際內容,自己填寫
#將data序列化為json格式資料,傳遞給data引數
r = requests.post(url, data = json.dumps(data), headers = header)
print r.text
def test_post_02( self ):
"""異常資料"""
url = self .post_url
header = self .header
data = {""} #根據實際內容,自己填寫
r = requests.post(url, data = json.dumps(data), headers = header)
print r.text
def tearDown( self ):
pass
if __name__ = = "__main__" :
unittest.main()
|
3.執行測試用例原始碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# coding=utf-8
import unittest
import HTMLTestRunner
import time
# 相對路徑
test_dir = './test_case'
test_dir1 = './report'
discover = unittest.defaultTestLoader.discover(test_dir, pattern = 'test*.py' )
# 定義帶有當前測試時間的報告,防止前一次報告被覆蓋
now = time.strftime( "%Y-%m-%d %H_%M_%S" )
filename = test_dir1 + '/' + now + 'result.html'
# 二進位制開啟,準備寫入檔案
fp = file (filename, 'wb' )
# 定義測試報告
runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = u '測試報告' , description = u '用例執行情況' )
runner.run(discover)
|