程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python自動化測試22】接口自動化測試實戰二_接口框架修改及用例優化

編輯:Python

文章目錄

  • 一、前言
  • 二、實戰演練
    • 2.1 接口介紹
    • 2.2 接口excel測試用例
    • 2.3 框架common目錄
    • 2.4 測試用例設計
    • 2.5 用例設計優化

一、前言

本文章主要講解Python接口自動化測試的框架搭建修改,自動化測試用例設計等內容,本文章會跳過部分框架搭建內容,詳細的框架搭建教學跳轉:接口自動化測試框架模型搭建

除此之外下方有系列文章的傳送門,還在持續更新中,感興趣的小伙伴也可以前往查看,話不多說,讓我們一起看看吧~

系列文章:
系列文章1:【Python自動化測試1】遇見Python之美
系列文章2:【Python自動化測試2】Python安裝配置及PyCharm基本使用
系列文章3:【Python自動化測試3】初識數據類型與基礎語法
系列文章4:【Python自動化測試4】字符串知識總結
系列文章5:【Python自動化測試5】列表與元組知識總結
系列文章6:【Python自動化測試6】字典與集合知識總結
系列文章7:【Python自動化測試7】數據運算符知識合集
系列文章8:【Python自動化測試8】流程控制語句講解
系列文章9:【Python自動化測試9】函數知識合集
系列文章10:【Python自動化測試10】文件基礎操作
系列文章11:【Python自動化測試11】模塊、包與路徑知識合集
系列文章12:【Python自動化測試12】異常處理機制知識合集
系列文章13:【Python自動化測試13】類、對象、屬性與方法知識合集
系列文章14:【Python自動化測試14】Python自動化測試基礎與進階練習題
系列文章15:【Python自動化測試15】unittest測試框架的核心概念與作用
系列文章16:【Python自動化測試16】測試用例數據分離
系列文章17:【Python自動化測試17】openpyxl二次封裝與數據驅動
系列文章18:【Python自動化測試18】配置文件解析與實際應用
系列文章19:【Python自動化測試19】日志系統logging講解
系列文章20:【Python自動化測試20】接口自動化測試框架模型搭建
系列文章21:【Python自動化測試21】接口自動化測試實戰一_接口概念、項目簡介及測試流程問答

二、實戰演練

2.1 接口介紹

我們先用一個接口為出發點,該接口為登錄接口,請求方式為POST,登錄後才可以進行各式各樣的操作,基本信息如下所示:

2.2 接口excel測試用例

按照登錄接口文檔,進行測試用例的設計:

2.3 框架common目錄

測試用例屬於數據,那麼我們必定要讀取excel,我們也有配置文件,還有日志系統,這些都屬於通用內容,我們可以先將對應的代碼模塊添加到common中:

"""讀取excel,有更簡便的方法,該方法適合新手進行學習了解"""
import openpyxl
def read_excel(file_path, sheet_name):
"""讀取excel中的數據"""
workbook = openpyxl.load_workbook(file_path)
sheet = workbook[sheet_name]
values = list(sheet.values)
workbook.close()
title = values[0]
rows = values[1:]
new_rows = [dict(zip(title, rows)) for rows in rows]
return new_rows
"""日志系統"""
import logging
def get_logger(logging_name="收集器",
logger_level="DEBUG",
stream_level="DEBUG",
file=None,
file_level="INFO",
fmt="%(asctime)s--%(levelname)s--%(filename)s--%(lineno)d--%(message)s"):
"""獲取logger收集器"""
logger = logging.getLogger(logging_name)
logger.setLevel(logger_level)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(stream_level)
logger.addHandler(stream_handler)
fmt_obj = logging.Formatter(fmt)
stream_handler.setFormatter(fmt_obj)
# 判斷是否有文件,如果有,初始化file_handler,如果沒有文件則不執行
if file:
file_handler = logging.FileHandler(file, encoding="utf-8")
file_handler.setLevel("INFO")
logger.addHandler(file_handler)
file_handler.setFormatter(fmt_obj)
return logger
log = get_logger()
"""yaml讀取結果"""
import yaml
def read_yaml(file, encoding="utf-8"):
with open(file, encoding="utf-8") as f:
data = yaml.safe_load(f)
return data

2.4 測試用例設計

testcase目錄下新建test_login用於測試登錄並實現好excel的讀取以及數據驅動,獲取用例數據後我們先打印看下數據:

import unittest
import requests
from common.excel import read_excel
from config import path_config
from unittestreport import ddt, list_data
# 獲取數據
data = read_excel(path_config.case_path, "login")
@ddt
class TestLogin(unittest.TestCase):
@list_data(data)
def test_login_success(self, case_data):
print(case_data)

補充的完整代碼如下所示:

import unittest
import requests
import json
from common.excel import read_excel
from config import path_config
from unittestreport import ddt, list_data
# 獲取數據
data = read_excel(path_config.case_path, "login")
@ddt
class TestLogin(unittest.TestCase):
@list_data(data)
def test_login_success(self, case_data):
print(case_data
""" 1、第一步得到響應數據 2、獲取預期結果 3、預期結果與實際結果的對比 """
# 把json格式的字符串轉換成字典,避免在讀取的時候讀取的是字符串而非字典格式
json_data = json.loads(case_data["data"])
headers = json.loads(case_data["headers"])
expect = json.loads(case_data["expected"])
respon = requests.request(
method=case_data["method"],
url=case_data["Api_Url"],
json=json_data,
headers=headers
)
actual = respon.json()
self.assertEqual(actual["code"], expect["code"])

2.5 用例設計優化

config目錄下創建setting.py,添加好對應的host域名,而後可以進行url的拼接:

# 域名
host = "http://IP:端口"
"""片段代碼"""
respon = requests.request(
method=case_data["method"],
# 進行拼接,拼接前導入setting
url=setting.host + case_data["Api_Url"],
json=json_data,
headers=headers
)

除此以外我們還需要進行斷言的異常捕獲,再次修改後的完整代碼:

import logging
import unittest
import requests
import json
from common.excel import read_excel
from config import path_config
from unittestreport import ddt, list_data
from config import setting
# 獲取數據
data = read_excel(path_config.case_path, "login")
@ddt
class TestLogin(unittest.TestCase):
@list_data(data)
def test_login_success(self, case_data):
print(case_data)
""" 1、第一步得到響應數據 2、獲取預期結果 3、預期結果與實際結果的對比 """
# 把json格式的字符串轉換成字典,避免在讀取的時候讀取的是字符串而非字典格式
json_data = json.loads(case_data["data"])
headers = json.loads(case_data["headers"])
expect = json.loads(case_data["expected"])
respon = requests.request(
method=case_data["method"],
url=setting.host + case_data["Api_Url"],
json=json_data,
headers=headers
)
actual = respon.json()
try:
self.assertEqual(actual["code"], expect["code"])
log.info(f"測試用例通過:{
case_data}")
except AssertionError as err:
log.error(f"測試用例失敗:{
case_data},錯誤信息為:{
err}")
# 測試用例失敗捕獲後,使用raise拋出
raise err


好啦~以上就是本次文章分享的全部內容啦,你學會了嗎?希望能給大家帶來幫助哦!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved