mock在接口测试中可以发挥很大的作用,其中之一便是实现自定义接口服务。
python中可以使用flask库实现mock,
写一个简单的登录接口,以及调用,直接上代码:
第一部分:实现登录接口
import json import flask import hashlib from sql_util import SqlUtil server = flask.Flask(__name__) # 创建一个服务,把当前这个python文件当做一个服务 @server.route('/login', methods=['get', 'post']) def login_server(): """实现一个登录功能的接口,自定义接口响应头、响应body、响应状态码""" if flask.request.is_json: name = flask.request.json.get('name') # 获取json请求的参数值name password = flask.request.json.get('password') # 获取json请求的参数值password if name in SqlUtil().user() and SqlUtil().user()[name] == password: data = {'name': name, 'password': hashlib.sha256(password.encode('utf-8')).hexdigest(), 'access_token': hashlib.md5('12345678'.encode('utf-8')).hexdigest() } res = flask.make_response(json.dumps(data, ensure_ascii=False)) # 构造接口响应体 res.headers = {'content-length': res.content_length} # 构造接口响应头 res.status_code = '200' # 构造接口状态码 else: data = {'msg': '用户名或密码错误!'} res = server.make_response(json.dumps(data, ensure_ascii=False)) res.status_code = '400' return res else: return json.dumps({"msg": '请传json格式参数!'}, ensure_ascii=False) if __name__ == '__main__': server.run(host='127.0.0.1', port=8888, debug=True) # 运行服务
第二部分:调用接口
import hashlib import pytest from common.request_util import AllRequestMethod as aqm from common.extract_util import ExtractUtil @pytest.fixture() def login(self, request): # request.param是pytest内request传参固定用法,用于接收传入的值并调用 method = request.param[0] url = request.param[1] data = request.param[2] res = aqm().request_method(method=method, url=url, json=data) return res, data @pytest.mark.smoke @pytest.mark.parametrize('login', [("post", "http://127.0.0.1:8888/login", {'name': 'Millie', 'password': '123456'})], ids=['用户名和密码正确登录成功'], indirect=True) # 'login'是fixture名称,若多个fixture,使用字符串+逗号隔开的形式,同argnames=的写法 # [("post", "http://127.0.0.1:8888/login", {'name': 'Millie', 'password': '123456'})同argvalues=的写法 # ids设置用例名称, indirect=True调用fixture def test_0_login(self, login): # excute_sql res = login[0] data = login[1] # 获取access_token access_token = res.json().get("access_token") # 将access_token写入yaml文件 ExtractUtil().write_yaml({"access_token": access_token}) assert res.status_code == 200 assert res.json().get("name") == data['name'] assert res.json().get("password") == hashlib.sha256(data['password'].encode('utf-8')).hexdigest()
啊哈,失业使我爱上思考。
标签:库写,name,自定义,python,res,request,json,login,password From: https://www.cnblogs.com/chxtdbk/p/16743633.html