介面自動化測試框架搭建

2022-07-09 13:45:16 字數 4406 閱讀 5314

##########################不喜勿噴

#

#########################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檔案的封裝

import

requests

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)

print

(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)

print

(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)

print

(res.text)

return res

思想:該檔案下主要封裝的是fixtures方法,即為了簡化用例層步驟,可以將操作前提步驟和過程步驟在此檔案下完成,在該檔案下

有乙個base_url,這個是安裝的外掛程式,安裝方法為pip install pytest-base-url

import

pytest

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...