前面,已經學習了如何用SpringBoot寫接口以及與Mysql數據庫進行交互,具體可查閱下面的這篇博客,今天學習一下基于Python的接口自動化測試框架的搭建,主要包括以下內容:利用request庫發(fā)送請求,請求數據參數化處理,還涉及到數據庫(Mysql+MongDB)方面的交互,包括如何取數據、如何查數據,最后利用Allure框架,輸出完整的接口自動化測試報告!
(MVC架構)SprintBoot+html/css/js+mybatis的demo_MRJJ_9的博客-CSDN博客
目錄
搭建流程圖?
搭建前的準備工作
request庫發(fā)送請求?
數據驅動
Python與數據庫的交互
Python+Mysql
Python+MongDB
輸出Allure報告
項目結構
Gitee倉庫地址
總結
搭建流程圖
接口自動化測試搭建流程?
搭建前的準備工作
先用SpringBoot寫個登錄接口,相當于mock,啟動項目,使用Python開始搭建整個測試框架。
在搭建整套接口自動化測試流程前,要有開端提到的接口測試的范圍,與數據庫的交互,明白業(yè)務的邏輯,接口請求類型是什么,傳參是什么,預期返回是什么
本博主簡單寫了一個登錄的接口,傳入的郵箱手機號,密碼必須符合一定的限制條件,否則不能登錄成功
關于正則表達式,參考了下面的文章
什么是正則表達式,怎么寫,使用場景等都在這里了 - 知乎 (zhihu.com)
正則表達式(常用的)_/^1[3456789]\d{9}$/_Oxygen_liu的博客-CSDN博客
JAVA 手機號碼格式驗證,使用正則表達式_java 正則手機號195_Steven Jon的博客-CSDN博客
JAVA 電子郵箱格式驗證,使用正則表達式_java郵箱正則表達式_Steven Jon的博客-CSDN博客
JAVA正則表達式校驗密碼必須是包含大小寫字母、數字、特殊符號的8位以上組合____NULL的博客-CSDN博客
package com.example.interfaceautotest.controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class Login {
@PostMapping(value = "/login", produces = "application/json")
public String Login(String usr, String pw) {
//加入業(yè)務判斷規(guī)則,用戶名只能輸入手機號和注冊的郵箱
//usr可以輸入手機號 也可以輸入郵箱
//大寫字母、小寫字母、數字、特殊符號(不是字母,數字,下劃線,漢字的字符)的8位以上組合
//手機號 第一位數字是1 第二位數字只能是3或4或5或6或7或8或9 剩下的九位數字可以是0-9之間任意一位數字
//郵箱判斷
if ((usr.matches("^1[3-9]\\d{9}") || usr.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$"))
&& pw.matches("^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$")) {
return "登錄成功";
} else {
return "登錄失敗";
}
}
}
request庫發(fā)送請求?
這部分可參考接口測試基礎那篇博客,最常用到get、post兩種請求,傳遞參數類型有params、json、data,請求參數也可參考下面的這篇博客
接口測試基礎_MRJJ_9的博客-CSDN博客
請求參類型params,json,data 含義理解_params和data、json傳參的區(qū)別_默金……的博客-CSDN博客
這里舉post接口傳params的例子,(以開發(fā)文檔為主,依賴于接口的定義)
import requests
class Login:
def login(self,usr,pw):
data = {"usr":usr,"pw":pw}
res = requests.post("http://localhost:8080/test/login",data=data) #也可以用params
return res.text
if __name__ == '__main__':
res = Login().login("18988888888","ABCabc012!@#")
print(res)
數據驅動
讀取excle里的數據,用到xlrd庫讀取數據,并將字符串格式的參數轉成json格式,用于傳遞參數
import xlrd
import json
def is_json(str_data):
try:
json.loads(str_data)
except ValueError:
return False
return True
class Argument:
def excel_control(self, tablePath, sheetName, caseName, *args):
workBook = xlrd.open_workbook(tablePath) # 打開表格
workSheet = workBook.sheet_by_name(sheetName) # 取第特定sheet頁的表格
# 取列標 不確定要取哪列的數據 表頭字段 對應的列標
index = []
for i in args:
index.append(workSheet.row_values(0).index(i))
case_index = 0
list_case = []
for one in workSheet.col_values(0): # 第一列數據遍歷
if caseName in one: # 如果第一列中包含“l(fā)ogin” 取出特定列
getdata = []
for num in index: # 要取出的第多少列的數據
res = workSheet.cell(case_index, num).value # 取出第多少行第多少列的數據
# 字典轉為字符串
if is_json(res):
res = json.loads(res)
getdata.append(res)
list_case.append(getdata)
case_index += 1
return list_case
if __name__ == '__main__':
res = Argument().excel_control("../data/test_data.xls", "登錄", "login", "請求參數")
Python與數據庫的交互
在做接口自動化時,對返回結果進行斷言時,需要對數據準確性進行判斷,就需要用到查詢數據庫的操作,下面介紹兩種數據庫,主要涉及Python如何連接和操作數據庫
Python+Mysql
mysql數據庫是一種關系型數據庫,表內表間具有一定的依賴關系,比如用戶登錄賬號、用戶的基本信息等一般存儲在mysql數據庫中
連接myslq,處理數據,可以從mysql中插入、取出數據
import pymysql
class GetUserInfo(object):
def query_mysql(self):
#連接數據庫 ip 用戶名 密碼 數據庫名
db = pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
database='auto_test_data',
charset='utf8')
print("數據庫連接成功!")
try:
#獲得執(zhí)行mysql命令的方法
cursor = db.cursor()
#sql查詢語句
sql_query_usr = 'SELECT phone,email,pw FROM user WHERE usr = "test003"'
cursor.execute(sql_query_usr)#執(zhí)行Mysql語句
user_info = cursor.fetchall()#接收全部的返回結果行
print(user_info)
print(type(user_info)) #查出的數據 存到一個元組里
except Exception:
print("查詢失敗")
db.close() #關閉數據庫
if __name__ == '__main__':
usr_info = GetUserInfo().query_mysql()
Python+MongDB
MongDB數據庫中可以包含多個文檔,是一個集合的物理容器,相當于就是關系數據庫中的表,以json格式存儲數據
import pymongo
client = pymongo.MongoClient(host = 'localhost', port = 27017)
print(client.list_database_names())
#讀取哪個數據庫
db = client['my_test_data'] #也可以寫成client.my_test_data
#讀取哪個數據表
collection = db['test_data'] #也可以寫成db.test_data
#查詢集合下有多少個文檔
print(collection.count_documents({}))
#篩選出'name'的值是'test002'的文檔
print(collection.find_one({'name':'test002'}))
輸出Allure報告
根據excel里的數據,傳入參數,調用接口,最終會得到每一條case的結果,可以使用allure庫,?展示出整個的完整接口自動化測試報告
import pytest, os, allure
from data_driven_tools.excel_control import Argument
from libs.login import Login
@allure.epic("Test") #史詩級 大的模塊 對應allure報告的第一層
@allure.feature("登錄模塊") #功能點描述 XX模塊 對應第二層
#類名必須以Test開頭
class Test_login():
# 在xls表里取出傳入的參數
@pytest.mark.parametrize("caseTitle,data,expdata",
Argument().excel_control("../data/test_data.xls", "登錄", "login", "用例名稱", "請求參數",
"返回結果"))
@allure.story("登錄接口") #更為具體一層 具體場景 對應第三層
@allure.title("{caseTitle}") #對應每一條測試用例的名稱 (在excel里維護)
#調用接口層 傳入excel的參數
#方法名必須以test_開頭
def test_login(self, caseTitle, data, expdata):
data = Login().login(data["usr"], data["pw"])
#進行斷言
assert data == expdata
if __name__ == '__main__':
#pytest框架程序運行入口
pytest.main(['test_login.py', '-s', '--clean-alluredir','--alluredir','../report/tmp'])
#打開報告
os.system("allure serve ../report/tmp")
main()函數命令行里的參數使用介紹:
'test_login.py':執(zhí)行的函數 如果為空,就運行當前項目下所有test_*.py或_test*.py這樣的文件
也可以進行指定運行的路徑,例如:'../test_case/test_login.py',表示執(zhí)行回到上層目錄,進入test_case文件夾,執(zhí)行test_login.py文件
執(zhí)行py文件里指定的類,指定的方法,'../test_case/test_login.py::Test_login::test_login'
-k:可以使用and、or、not等邏輯運算符,區(qū)分匹配的范圍,文件,類,函數名
-s:可以在控制臺輸出print信息(需要去掉-v參數)
-v:顯示詳細的用例執(zhí)行信息
-q:不輸出用例執(zhí)行的情況?
-x:出現一條失敗的測試用例就退出測試
--alluredir:清除上次執(zhí)行的舊報告
--alluredir? ../report/tmp:生成新報告,后面是新報告數據的生成路徑
項目結構
整個項目結構是比較清晰的,分為接口層,數據驅動層,測試用例層
configs:可用來存放配置文件
data:excel:測試用例的數據
data_driven_tools:數據驅動工具,讀取excel里的數據,傳給接口
libs:使用request庫調用接口
report:用于存放生成allure報告的原始數據,格式是json
test_case:存放測試用例,pytest框架執(zhí)行程序的入口
requirements.txt文件,其他人配置環(huán)境需要添加的第三方庫,可自動生成和下載
生成命令:pip freeze > requirements.txt
下載命令:pip install -r requirements.txt
Gitee倉庫地址
interface_auto_test: Rquests+Pytest+Allure (gitee.com)文章來源:http://www.zghlxwxcb.cn/news/detail-638145.html
總結
本篇博客總結了接口自動化項目的整個流程,用到了Pytest庫、Allure庫,xlrd讀取excel里的測試用例,以及python操作數據庫對數據準確性做驗證,實現了接口自動化測試,對重要接口進行測試和數據驗證,可用于冒煙測試,緊急發(fā)版前進行自動化測試,在企業(yè)落地后可以提升工作效率,節(jié)省手工測試的時間文章來源地址http://www.zghlxwxcb.cn/news/detail-638145.html
到了這里,關于(Python)Requests+Pytest+Allure接口自動化測試框架從0到1搭建的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!