Python+Unittest+Requests 接口自動化框架


整體框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport  多線程並發模式

  • 主要依賴模塊 Unittest、Requests、PyMysql、HTMLReport
  • 主要包含以下幾個模塊:

   1. Business:與業務相關的公共模塊

  •  get_login_token:接口自動化過程中需要實時獲取token,並將實時獲取的token傳給下個接口作為請求參數
from Business.url import url_login
import requests, json


def login_token(username=11111, password=123456):
"""獲取登錄后的token"""

headers = {'Content-Type': 'application/json;charset=UTF-8'}

request_param = {
"username": username,
"password": password
}
response = requests.post(url_login, data=json.dumps(request_param), headers=headers)

# 返回JSON中data數據的token
print(response.json()['data']['token'])
return response.json()['data']['token']


if __name__ == '__main__':
login_token()
  •  headers:頭部信息
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'X-Requested-With': "XMLHttpRequest",
'Content-Length': "124",
'Connection': "keep-alive"
}
  • url:對應的URL地址
erp_url = 'https://www.baidu.com'

 2. Common:與業務無關公共模塊

  •  connect_db:連接數據庫,並操作數據庫
import pymysql


# python3用的是pymysql,python2用的是MySQLdb

class OperationMysql:
"""
數據庫SQL相關操作
"""

def __init__(self):
self.conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='test',
passwd='111111',
db='test',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
self.cur = self.conn.cursor()

# 查詢一條數據
def search_one(self, sql):
self.cur.execute(sql)
result = self.cur.fetchone() # 只顯示一行結果
# result = self.cur.fetchall() # 顯示所有結果
return result

# 更新SQL
def updata_one(self, sql):
self.cur.execute(sql)
self.conn.commit()
self.conn.close()


if __name__ == '__main__':
op_mysql = OperationMysql()
res = op_mysql.search_one("SELECT * from odi_order WHERE order_no='12222'")
print(res)

 3.TestCase:測試用例層

  • test_case:用例數據
import unittest
from HTMLReport import logger
import requests

from Business.url import erp_url


class Category(unittest.TestCase):
"""ERP屬性接口"""

def setUp(self):
self.session = requests.Session()
logger().info("獲取會話")

def tearDown(self):
self.session.close()
logger().info("關閉會話")

def test_type_list(self):
"""get請求方式"""
s = self.session
querystry = {}
r = s.get(erp_url + '/xxx.list', params=querystry)
logger().info(f"返回數據{r.json()}")
self.assertEqual("success", r.json().get("msg"))
def test_pay_success_recommend(self):
"""Post請求方式"""
s = self.session
payload = {
"token": login_token,
"p": "ios",
"v": "5.6.0",
"order_no": "111111"
}
r = s.post(erp_url + '/xxxxx/aaa', data=payload)
logger().info(f"返回數據:{r.json()}")
self.assertEqual('success', r.json().get('msg'))

 4.TestSuite:測試套件封裝

  • suite_api:測試套件
import unittest
from Test_Case.refactor import test_order


def get_suite():
suite = unittest.TestSuite()
loader = unittest.TestLoader()

suite.addTests(loader.loadTestsFromTestCase(test_order.Apitests))

return suite

 5.Run:主運行文件

import unittest
from Test_Suite import suite_api
import HTMLReport
import time
suite = unittest.TestSuite()
suite.addTests(suite_api.get_suite())
HTMLReport.TestRunner(
title="XXX項目測試報告",
description="測試人員:CesareCheung",
report_file_name=f"testreport",
thread_count=50
).run(suite)

6.框架整體結構圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM