python接口自動化測試 ( 第五章)

在上一篇文章內,咱們也將把表格測試數據,轉換成自己想要的內容,給做到了

已經跟著做到這一步的同學,是不是感覺略有小成呢?

數據轉換的工作咱們已經做的差不多了

接下來,咱們開始封裝requests

import requests? 引用包,沒有安裝的同學可以使用 pip install??requests 進行安裝,工具內也可以直接安裝

在control包下增加log.py和httpcaps.py文件

python接口自動化測試 ( 第五章)

咱們在utils.py下增加一個函數,用來創建文件工具函數

# 判斷當前目錄是否存在

def mkdir(p):

path = Path(p)

# 如果文件不存在 則創建

if not path.is_dir():

path.mkdir()


log.py代碼如下:

import logging

import datetime

from pathlib import Path

import sys

from control.utils import mkdir

# 獲得當前的時間

def today():

now = datetime.datetime.now()

return now.strftime('%Y%m%d')

# 獲取logger實例,如果參數為空則返回root logger

logger = logging.getLogger("seautotest")

# 指定logger輸出格式

formatter = logging.Formatter(

'%(asctime)s [%(levelname)s] %(filename)s line:%(lineno)d: %(message)s')

# 創建log文件夾

mkdir('log')

# 文件日誌

log_file = str(Path('log') / '{}.log'.format(today()))

file_handler=logging.FileHandler(log_file, mode='a', encoding='utf-8', delay=False)

# file_handler = logging.FileHandler(filename=log_file, encoding="utf-8")

file_handler.setFormatter(formatter) # 可以通過setFormatter指定輸出格式

# 控制檯日誌

console_handler = logging.StreamHandler(sys.stdout)

console_handler.formatter = formatter # 也可以直接給formatter賦值

# 為logger添加的日誌處理器

logger.addHandler(file_handler)

logger.addHandler(console_handler)

# 指定日誌的最低輸出級別,默認為WARN級別

# DEBUG,INFO,WARNING,ERROR,CRITICAL

logger.setLevel(logging.INFO)


開始封裝httpcaps.py

import requests

from control.log import logger

from control.utils import iscompare_json, writetoken

def htpp_requests(step, junit, sort='get'):

data = step['data'].replace("\\n", "")

http_type, parmars = datatating(data)

# 記錄為何不通過

content = ''

# 記錄是否通過

list_record = []

if http_type == 'headers':

httrequst = getattr(requests, sort)(step['element'], headers=eval(parmars))

else:

httrequst = getattr(requests, sort)(step['element'], eval(parmars))

status = httrequst.status_code

# 1.接口不等於200,不進行驗證和斷言

if status != 200:

logger.error('接口出錯了%s' % status)

return

# 獲得接口的返回值

response = httrequst.json()

expected = step['expected']

testdot = step['testdot']

# 如果是登錄的接口,將登錄的token寫入文本

if testdot in ('登錄接口驗證'):

logger.info(response['data']['token'])

writetoken(response['data']['token'])

# 2.驗證斷言內容 斷言只有在預期結果寫了#('xxx','xxx')這種才會進行

if '#' in step['expected']:

# 1預期結果 2需要斷言的內容 是元祖類型 ,返回:斷言通過 返回'' ,反之返回不通過的字段

is_as_pass = asset_content(expected, response)

# 通過

if is_as_pass == '':

content += '斷言通過'

pass

# 不通過

else:

list_record.append(1)

content += '斷言不通過%s' % is_as_pass

# 3.驗證返回值json格式

result = iscompare_json(eval(expected), response)

if result == 'Pass':

content += '對比格式通過'

else:

list_record.append(1)

content += 'json對比格式不通過'

if len(list_record) >= 1:

step['score'] = 'Fail'

junit.failure('testdot:' + step['testdot'] + '-' + 'step:' + step['no'] + '-' + 'element:' + step[

'element'] + '-' + ', %s' % content)

else:

step['score'] = 'Pass'

step['_resultinfo'] = content

step['output'] = response

logger.info(step['element'])

logger.info(response)

return step

# 處理json類型和參數

def datatating(data):

if data.strip():

http_info = data.split('=', 1)

# 獲得類型

http_type = http_info[0]

# 獲得請求的參數

parmars = http_info[1]

else:

# 獲得類型

http_type = 'parmars'

# 獲得請求的參數

parmars = "{' ': ' '}"

return http_type, parmars

# 如果有#號將進行處理,沒有不處理

def affirm(expected):

# 返回的是list

ex_list = expected.split('#')

# 0代表是預期結果,1是代表是斷言的內容

# eval處理是元祖類型

return ex_list[0], eval(ex_list[1])

def asset_content(expected, response):

# 處理預期結果的內容,切割出來斷言

# 1.是預期結果 2.是需要斷言的內容 元祖類型

expected, astent = affirm(expected)

fail_tent = ''

for t in astent:

if t not in str(response):

fail_tent += '接口沒有此值:%s,' % t

return fail_tent


封裝完成後,咱們調用試一下看看如何,因為公司的接口不方便開放,所以只能自己動手寫一個了,目錄下增加這個py文件

python接口自動化測試 ( 第五章)

httptunn.py代碼如下

import flask, json

server = flask.Flask(__name__) # __name__代表當前的python文件。把當前的python文件當做一個服務啟動

@server.route('/index', methods=['get', 'post']) # 第一個參數就是路徑,第二個參數支持的請求方式,不寫的話默認是get

def index():

res = {'msg': '這是我開發的第一個接口', 'msg_code': 0}

return json.dumps(res, ensure_ascii=False)

server.run(port=8888, debug=True, host='127.0.0.1')


先運行httptunn.py文件

開始調試httpcaps.py代碼增加如下

if __name__ == '__main__':

step = {'no': '1', 'testdot': '獲取驗證碼功能驗證', 'keyword': 'API', 'page': '',

'element': 'http://127.0.0.1:8888/index',

'data': "parmars={'phone': '17547817934', 'type': '1'}",

'expected': "{'msg': '這是我開發的第一個接口', 'msg_code': 0}", 'output': {'msg': '這是我開發的第一個接口', 'msg_code': 0},

'score': 'Pass', 'remark': '', '_keyword': 'API', '_element': '獲取短信驗證碼',

'_expected': "{'msg': '這是我開發的第一個接口', 'msg_code': 0}", '_output': ''}

print(htpp_requests(step, 'get'))


運行截圖如下:

python接口自動化測試 ( 第五章)

小夥伴如果你運行失敗了,出現了錯誤,將下一章節進行解決你現在的問題哦

遇到報錯不要慌,總是會有解決辦法的~

原文鏈接:https://blog.csdn.net/weixin_45344334/java/article/details/94495117


分享到:


相關文章: