汇总方式,可以省去api.py /api_util.py 但不建议,不方便后续维护
# project > core > rest_client.py
import requests
import json
from utils.read_test import base_data
from utils.log_util import logger
api_root_url = base_data.read_ini()['host']['api_sit_url']
class RestClient:
def __init__(self):
self.api_root_url = api_root_url
self.session = requests.Session()
def get(self, url, **kwargs):
return self.request(url, "GET", **kwargs)
def post(self, url, **kwargs):
return self.request(url, "POST", **kwargs)
def put(self, url, **kwargs):
return self.request(url, "PUT", **kwargs)
def delete(self, url, **kwargs):
return self.request(url, "DELETE", **kwargs)
def request(self, url, method, **kwargs):
self.request_log(url, method, **kwargs)
if method == "GET":
return self.session.get(self.api_root_url + url, **kwargs)
if method == "POST":
return self.session.post(self.api_root_url + url, **kwargs)
if method == "PUT":
return self.session.put(self.api_root_url + url, **kwargs)
if method == "DELETE":
return self.session.delete(self.api_root_url + url, **kwargs)
def request_log(self, url, method, **kwargs):
data = dict(**kwargs).get("data")
json_data = dict(**kwargs).get("json")
params = dict(**kwargs).get("params")
headers = dict(**kwargs).get("headers")
logger.info("接口请求的地址>>>{}".format(self.api_root_url + url))
logger.info("接口请求的方法>>>{}".format(method))
if data is not None:
logger.info("接口请求的data参数>>>\n{}".format(json.dumps(data, ensure_ascii=False, indent=2)))
if json_data is not None:
logger.info("接口请求的json参数>>>\n{}".format(json.dumps(json_data, ensure_ascii=False, indent=2)))
if params is not None:
logger.info("接口请求的params参数>>>\n{}".format(json.dumps(params, ensure_ascii=False, indent=2)))
if headers is not None:
logger.info("接口请求的headers参数>>>\n{}".format(json.dumps(headers, ensure_ascii=False, indent=2)))
Api = RestClient()
# project > test_cases > test_case_optimize > test_case_optimize.py
import pytest
from core.rest_client import Api
from utils.response_util import process_response
from api.api import mobile_query
from utils.read_test import base_data
url = base_data.read_ini()['host']['api_sit_url']
def test_mobile():
param = base_data.read_data()["mobile"]
# 只需要下面传入url即可。
response = Api.get("/shouji/query",params=param)
result = process_response(response)
# result = mobile_query(param)
assert result.success is True
assert result.body['status'] == 0
assert result.body['msg'] == "ok"
assert result.body['result']["province"] == "浙江"
assert result.body['result']["city"] == "杭州"
assert result.body['result']["company"] == "中国移动"
assert result.body['result']["cardtype"] is None
assert result.body['result']["areacode"] == "0571"
#
if __name__ == '__main__':
pytest.main()
网友评论