请选择 进入手机版 | 继续访问电脑版

robotest 接口自动化测试之POST接口请求

[复制链接]
二次方先生 发表于 2021-1-1 10:31:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 

  实际测试中,我们很难避免登录系统,接口同样我们也需要通过登录获取认证信息之后才可以操纵其他接口。原来还想找一个使用实际的网站来演示
  但是为了方便照旧自己创建一个服务吧。
post接口请求实在跟get差不多,参考:https://www.cnblogs.com/du-hong/p/10559603.html
  1. import requestspayload = dict(key1='value1', key2='value2')r = requests.post('https://httpbin.org/post', data=payload)print(r.text)
复制代码
检察输出 
  1. C:\Python\python.exe G:/软件测试/接口测试/Robotest/common/test.py{  "args": {},   "data": "",   "files": {},   "form": {    "key1": "value1",     "key2": "value2"  },   "headers": {    "Accept": "*/*",     "Accept-Encoding": "gzip, deflate",     "Content-Length": "23",     "Content-Type": "application/x-www-form-urlencoded",     "Host": "httpbin.org",     "User-Agent": "python-requests/2.25.1",     "X-Amzn-Trace-Id": "Root=1-5feb62cd-344be2d804fbb8d773295b0a"  },   "json": null,   "origin": "36.155.117.25",   "url": "https://httpbin.org/post"}Process finished with exit code 0
复制代码
创建服务的是百度来的,加了一个userinfo接口
思路:登录乐成后拿到token然后作为userinfo的token入参
  1. import flaskimport jsonfrom flask import requestimport random'''flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服务'''# 创建一个服务,把当前这个python文件当做一个服务server = flask.Flask(__name__)# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式seed = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-"sa = []for i in range(10):    sa.append(random.choice(seed))result = ''.join(sa)@server.route('/login', methods=['get', 'post'])def login():    # 获取通过url请求传参的数据    username = request.values.get('name')    # 获取url请求传的暗码,明文    pwd = request.values.get('pwd')    # 判定用户名、暗码都不为空    if username and pwd:        if username == 'xiaoming' and pwd == '111':            resu = {'code': 200, 'message': '登录乐成', 'token': result}            return json.dumps(resu, ensure_ascii=False)  # 将字典转换字符串        else:            resu = {'code': -1, 'message': '账号暗码错误'}            return json.dumps(resu, ensure_ascii=False)    else:        resu = {'code': 10001, 'message': '参数不能为空!'}        return json.dumps(resu, ensure_ascii=False)@server.route('/userinfo', methods=['get', 'post'])def userinfo():    # 获取通过url请求传参的数据    username = request.values.get('name')    # 获取url请求传的暗码,明文    token = request.values.get('token')    # 判定用户名、暗码都不为空    if username and token:        if username == 'xiaoming' and token ==result :            resu = {'code': 200, 'name': username, 'info': '我长得可美了', 'message': '获取乐成'}            return json.dumps(resu, ensure_ascii=False)  # 将字典转换字符串        else:            resu = {'code': 401, 'message': '认证错误'}            return json.dumps(resu, ensure_ascii=False)    else:        resu = {'code': 10001, 'message': '参数不能为空!'}        return json.dumps(resu, ensure_ascii=False)if __name__ == '__main__':    server.run(debug=True, port=8888, host='127.0.0.1')
复制代码
写两个数据文件分别写上
  1. - url : http://127.0.0.1:8888/login  name : xiaoming  pwd : 111
复制代码
  1. - url : http://127.0.0.1:8888/userinfo  name : xiaoming  token : LDhEMW%fI_
复制代码
新建一个postdemo
  1. import unittestimport requestsimport osfrom ddt import ddt, file_data, unpackfrom common.getpath import data_pathimport randomtest_post_demo_path = os.path.join(data_path, 'post_data.yaml')test_post_demo_path2 = os.path.join(data_path, 'post_data2.yaml')@ddtclass post_demo(unittest.TestCase):    @file_data(test_post_demo_path)    @unpack  # 二次分解元组    def test_testcase1(self, **kwargs):        url = kwargs['url']        headers = {            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \            AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}        data = {"name": kwargs['name'],                "pwd": kwargs['pwd']                }        response = requests.post(url=url, headers=headers, data=data)        # res = json.loads(response.text)        print(url)        print(response.text)        # print(response.headers)    @file_data(test_post_demo_path2)    @unpack  # 二次分解元组    def test_testcase2(self, **kwargs):        url = kwargs['url']        data = {"name": kwargs['name'],                "token": kwargs['token']                }        response = requests.post(url=url, data=data)        # res = json.loads(response.text)        print(url)        print(response.text)        # print(response.headers)if __name__ == '__main__':    unittest.main()
复制代码
执行效果如下,然后各人发现第二个接口并没有获取乐成而是提示错误了,那是因为我们文件中存入的token是【LDhEMW%fI_】,跟登录获取到的不一样,请求错误

  实在我们真正项目中我们测试一个接口首先就需要获取token、cookie认证信息,然后放到需要请求的接口的healers,
  另有就是请求一个接口有大概需要其他接口的一些数据,好比删除一个数据,你需要获取这个数据的ID,
  获取这个数据你需要创建一个数据生成一个ID。然后你才可以去删除。
所以我们这里token不能从yaml文件中取值,需要从登录接口中获取然后传递到userinfo接口作为入参。那么我们怎么实现呢
................
................
................
................
................
................
下回见
如果你看懂了,就支持一下多少随意

 

来源:https://blog.csdn.net/u011640418/article/details/111873320
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )