iis搭建网站教程win7,图片制作视频软件,网站服务类型是什么意思,网站定位包括哪些内容一、场景说明
在面试接口自动化时#xff0c;经常会问#xff0c;其他接口调用的前提条件是当前用户必须是登录状态#xff0c;如何处理接口依赖#xff1f;
在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token#xff0c;那么又如果处理呢#…一、场景说明
在面试接口自动化时经常会问其他接口调用的前提条件是当前用户必须是登录状态如何处理接口依赖
在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token那么又如果处理呢以下详细介绍。
未登录状态下直接请求充值接口的异常场景 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import unittest import requests class TestRecharge(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_recharge(self): url http://127.0.0.1:8888/recharge payload { member_id: 100004312, amount: 80 } res requests.post(url,jsonpayload) print(res.json()) if __name__ __main__: unittest.main()
运行结果如下 {code: 1003, msg: 未授权或token已过期} 二、token处理思路
在处理之前token灵魂三连问
如何获取token获取的token如何管理其他接口如何携带token
思路如下
1.抽取登录接口返回值中的token
2.使用全局变量存储token。token可以存到yaml或者json或者ini的配置文件里以下介绍将token作为类属性
3.其他接口将token值放入请求头发送请求 三、JsonPath基本用法
我们需要从登录接口中提取出token这里介绍JsonPath基本用法。 1、JsonPath介绍
JsonPath为Json文档提供了解析能力通过使用JsonPath你可以方便的查找节点、获取想要的数据JsonPath是Json版的XPath。 2、JsonPath语法
JsonPath说明$文档根元素当前元素.或[]匹配下级元素..递归匹配所有子元素*通配符匹配下级元素[]下标运算符根据索引获取元素JsonPath索引从0开始[,]连接操作符将多个结果拼接成数组返回可以使用索引或别名[start:end:step]数据切片操作?()过滤表达式
这么多语法规范大家会觉得一脸懵逼吧细心的小伙伴会发现语法中 .. 表示递归匹配所有子元素简单粗暴用..获取所有匹配的子元素通过索引拿到想要的值以下以实战进行演练。 3、JsonPath源码 1 2 def jsonpath(obj, expr, result_typeVALUE, debug0, use_evalTrue): traverse JSON object using jsonpath expr, returning values or paths
obj: 需要解析的对象比如接口的返回值。
expr: 匹配的表达式。 4、JsonPath实战
以下编写代码进行演示。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from jsonpath import jsonpath # json格式结果 res { code: 0, msg: OK, data: { token_info: { token_type: Bearer, expires_in: 2020-05-28 13:07:29, token: eyJhbGciOiJIUzUxAiJ9.eyJtZW1iZZJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwNjQyNDQ5fQ.s6A7pzLILf9tqpEDAU9wIPGGLGkgKEQ6EBHq26l-eUM5seCb48DWalkE7u16iRZv3uzD5hIDFbw41Jmi9V0T_Q } } } # 获取res中的token token jsonpath(res,$..token)[0] print(token)
响应结果为 eyJhbGciOiJIUzUxBiJ9.eyJtZW1iZZJfaWQiOpEwMDA1MTMxNSwiZXhwIjoxNTkwNjQyNDQ5fQ.s6A7pzLILf9tqpEDAU9wIPGGLGkgKEQ6EBHq26l-eUM5seCb48SWalkE8u16iRZv3uzD5hIDFbw41Jmi9V0T_Q 四、token依赖实例
①在config/setting.py配置文件中配置全局的域名或IP。 1 2 3 4 class DevConfig(): # 项目的域名或IP hosthttp://127.0.0.1:8888 config DevConfig()
②在config/config.yaml文件中存入登录账号。
config.yaml 1 2 3 user: mobile_phone: 155******** pwd: 12345678
③在项目根目录下新建文件夹middleware文件夹下新建文件helper.py用于处理token。 ④首先编写登录接口返回接口数据。
helper.py 1 2 3 4 5 6 7 8 9 from common.requests_handler import RequestsHandler from config.setting import config from common.yaml_handler import yaml_data def login(): 登录接口返回token req RequestsHandler() res req.visit(post, config.host/login, jsonyaml_data[user]) return res print(login())
运行结果如下 { code: 0, msg: OK, data: { token_info: { token_type: Bearer, expires_in: 2020-05-26 13:31:41, token: eyJhbGciOiJIUpUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwNDcxMTAxfQ.4QDNdQ-Wyecvpv7yRnMlCx1ZXpAlb8vpohxHht5OfNcjGn_yTaISyhmn7OMzjMGlz68sJ_uFbCh2NhIaO2p_Lg } } } ⑤接下来编写函数获取登录接口返回值并提取token和token_type进行拼接 。这里要使用jsonpath模块提取返回的token和token_type。
helper.py 1 2 3 4 5 6 7 8 def save_token(): 保存token信息 res login() token jsonpath(res,$..token)[0] token_type jsonpath(res,$..token_type)[0] token .join([token_type, token]) return token print(save_token())
运行结果如下 1 Bearer eyJhbGciOJIPzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwN ⑥最后定义类将token作为类属性整体代码如下
helper.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from common.requests_handler import RequestsHandler from config.setting import config from common.yaml_handler import yaml_data from jsonpath import jsonpath def login(): 登录返回token信息 req RequestsHandler() res req.visit(post, config.host/login, jsonyaml_data[user]) return res def save_token(): 保存token信息 res login() token jsonpath(res,$..token)[0] token_type jsonpath(res,$..token_type)[0] token .join([token_type, token]) Context.token token return token class Context: 将token作为类属性 token if __name__ __main__: print(save_token())
运行结果如下 Bearer eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwNDcz ⑦充值接口携带token请求。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import unittest import requests from middleware.helper import Context, save_token class TestRecharge(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_recharge(self): save_token() token Context.token url http://127.0.0.1:88888/recharge payload { member_id: 100051315, amount: 80 } res requests.post(url,jsonpayload) print(res.json()) if __name__ __main__: unittest.main()
运行结果为 { code: 0, msg: OK, data: { leave_amount: 240.0, mobile_phone: 155********, } } 现在我也找了很多测试的朋友做了一个分享技术的交流群共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源没人解答问题坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化性能安全测试开发等等方面有一定建树的技术大牛
分享他们的经验还会分享很多直播讲座和技术沙龙
可以免费学习划重点开源的
qq群号485187702【暗号csdn11】
最后感谢每一个认真阅读我文章的人看着粉丝一路的上涨和关注礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 希望能帮助到你【100%无套路免费领取】