##########################不喜勿噴
##########################utils中的db.py的封裝
import
pymysql##
# 1. 連線資料庫
#conn = pymysql.connect(
#host='伺服器位址',
#port=3306,
#user='使用者名稱',
#password='密碼',
#db='資料庫名'#)
## 2. 建立游標
#cur = conn.cursor(pymysql.cursors.dictcursor) # 沒有s 有括號##
# 3. 執行sql
## 3.1 執行查詢
#cur.execute("select * from cardinfo where cardnumber='hzc_00011';")
#conn.commit()
## 獲取結果
#result = cur.fetchall()
## result = cur.fetchone() # 取一條少一條
## cur.fetchmany(3)
#print(result)##
# 3.2 執行修改
## cur.execute("delete from cardinfo where cardnumber='hzc_00011';")
## conn.commit()##
# 4. 關閉
#cur.close()
#conn.close()
class
db(object):
def__init__
(self):
self.conn =pymysql.connect(
host='
伺服器位址',
port=3306,
user='
使用者名稱'
, password='密碼'
, db='
資料庫名',
autocommit=true
)self.cur = self.conn.cursor(pymysql.cursors.dictcursor) #
新增此配置項,預設commit了,即建立游標
defdo_sql(self, sql):
print('
執行sql
', sql)
self.cur.execute(sql)
#執行sql語句
#self.conn.commit()
return self.cur.fetchall() #
返回查詢到的所有結果
class fuelcarddb(db): #
繼承db
"""執行具體的sql語句
"""def
del_card(self, card_number):
"""執行刪除語句
"""self.do_sql(f
"delete from cardinfo where cardnumber=''")
defcheck_card(self, card_number):
"""執行查詢語句
"""result = self.do_sql(f"
select * from cardinfo where cardnumber='';")
ifresult:
return
true
return
false
defadd_card(self, card_number):
"""執行新增語句
"""result =self.check_card(card_number)
ifnot
result:
self.do_sql(f
"insert into cardinfo (cardnumber) values ('');
")
#######################api檔案的封裝
importrequests
data_source_id = "
bhrz
"class
api(object):
def__init__
(self, base_url):
self.url = base_url + '
/gasstation/process
'self.session =requests.session()
defadd_fuelcard(self, card_number):
json_data = }
res = self.session.post(self.url, json=json_data)
(res.text)
return
res
defbind_card(self, user_name, id_type, id_number, card_number):
json_data =,
"cardinfo":
}res = self.session.post(self.url, json=json_data)
(res.text)
return
res
defquery_card(self, user_id, card_number):
#datasourceid=bhrjczex&userid=1039&cardnumber=1111111111&methodid=02a
params =
res = self.session.get(self.url, params=params)
(res.text)
return res
思想:該檔案下主要封裝的是fixtures方法,即為了簡化用例層步驟,可以將操作前提步驟和過程步驟在此檔案下完成,在該檔案下
有乙個base_url,這個是安裝的外掛程式,安裝方法為pip install pytest-base-url
importpytest
from utils.db import
fuelcarddb
from apis.fuelcard_api import
[email protected](scope='
session')
defdb():
#例項化乙個物件
return
fuelcarddb()
@pytest.fixture(scope='
session')
defapi(base_url):
#例項化乙個物件,並將配置檔案中的base_url傳給api層的方法
return
api(base_url)
@pytest.fixture
defdel_card(db):
def_del_card(card_number):
db.del_card(card_number)
yield
db.del_card(card_number)
return _del_card
#######################pytest.ini檔案的封裝
思想:上述已說明,該檔案為pytest框架的配置檔案,即執行用例時會預設執行該檔案操縱,注意表達格式,conftest檔案和api檔案中
都用到了base_url,就是這裡的base_url,目的是當伺服器位址變了之後,不用去介面層去一一修改伺服器位址,只需要修改這裡的位址就行,但是
如果介面的請求位址變了,就要去一一修改了,畢竟針對不同的請求位址封裝了不同的方法
#######################總結
①介面的主要框架基本已經出來了,當我們需要其他方法時,可以再去相對應的新增,例如讀取excel**資料的方法,可以再封裝到utils目錄下
③如果涉及到自己的業務模組,就要自己去封裝了,例如上面所說的,api檔案,conftest檔案,都是和業務相關的
④對於初級的自動化測試人員,最主要的不是去寫框架,而是去運用好別人寫好的框架,來設計用例,寫用例
⑤一條用例的基本流程:測試環境準備、測試資料準備、傳送資料、獲取資料響應結果、設定斷言、環境清理
自動化測試框架搭建思路
可以完美和unittest結合實現資料驅動 ddt安裝 pip insatll ddt ddt全稱為data driver test ddt的使用方式 ddt裝飾類,作用於申明當前類使用ddt資料驅動 data裝飾函式,作用是給函式傳值 unpack裝飾函式,作用是數解包 file data裝飾函式...
介面測試自動化框架彙總
前兩篇文章我們介紹了如何使用postman和curl手工執行介面測試用例,不過如果專案需要長期開發和維護的話,我們就需要開始考慮自動化測試了。自動化測試第一步就是框架選型。所以本篇將介紹目前主流的介面測試框架,以及它們各自的優缺點。名稱優點 缺點官網 postman newman 介面操作,容易上手...
介面自動化測試框架python requests
介面封裝 將介面封裝成物件,類似pageobject封裝 資料封裝 資料與 分離,資料存放在yaml檔案中 配置檔案 實現全域性配置 utils 其他功能封裝 測試用例 呼叫介面物件實現業務並斷言 requests pytest allure等 base api.py import requests...