robotest 接口自动化测试之POST接口请求
程序员文章站
2022-06-19 15:13:43
实际测试中,我们很难避免登录系统,接口同样我们也需要通过登录获取认证信息之后才可以操作其他接口。今天通过登录CSDN认识下post接口使用Python怎么实现登录。步骤1、通过F12抓取登录接口2、通过工具jmeter、postman、浏览器插件等等验证接口可以通3、使用我们的Python进行请求......
实际测试中,我们很难避免登录系统,接口同样我们也需要通过登录获取认证信息之后才可以操作其他接口。本来还想找一个使用实际的网站来演示
但是为了方便还是自己创建一个服务吧。
post接口请求其实跟get差不多,参考:https://www.cnblogs.com/du-hong/p/10559603.html
import requests
payload = dict(key1='value1', key2='value2')
r = requests.post('https://httpbin.org/post', data=payload)
print(r.text)
查看输出
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入参
import flask
import json
from flask import request
import 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')
写两个数据文件分别写上
- url : http://127.0.0.1:8888/login
name : xiaoming
pwd : 111
- url : http://127.0.0.1:8888/userinfo
name : xiaoming
token : LDhEMW%fI_
新建一个postdemo
import unittest
import requests
import os
from ddt import ddt, file_data, unpack
from common.getpath import data_path
import random
test_post_demo_path = os.path.join(data_path, 'post_data.yaml')
test_post_demo_path2 = os.path.join(data_path, 'post_data2.yaml')
@ddt
class 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
推荐阅读
-
python接口自动化测试之接口数据依赖的实现方法
-
python接口自动化测试之接口数据依赖的实现方法
-
Python post请求的接口测试示例
-
Python接口自动化测试教程 -- 2. 用Django开发一个简单的POST | GET接口
-
软件测试的那些事之接口自动化测试(四):Helloworld入门
-
接口测试之Jmeter接口测试自动化
-
Python接口自动化之浅析requests模块post请求
-
体悟与总结之虫师作品《Web接口开发与自动化测试...Python..》问题处理(持续更新。。。)
-
接口并发测试之:我不信WebSocket的原理,请求,并发编码真有这么简单?
-
robotest 接口自动化测试之POST接口请求