监利县建设局网站,网站技术的解决方案,html5网站多少钱,贵阳市城乡建设局网站目录#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结#xff08;尾部小惊喜#xff09; 前言
场景说明
在面试… 目录导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结尾部小惊喜 前言
场景说明
在面试接口自动化时经常会问其他接口调用的前提条件是当前用户必须是登录状态如何处理接口依赖
在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token那么又如果处理呢
未登录状态下直接请求充值接口的异常场景
import unittest
import requests
class TestRecharge(unittest.TestCase):def setUp(self):passdef tearDown(self):passdef test_recharge(self):url http://127.0.0.1:8888/rechargepayload {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
思路如下 抽取登录接口返回值中的token 使用全局变量存储token。token可以存到yaml或者json或者ini的配置文件里以下介绍将token作为类属性 其他接口将token值放入请求头发送请求
JsonPath基本用法
我们需要从登录接口中提取出token这里介绍JsonPath基本用法。
JsonPath介绍 JsonPath为Json文档提供了解析能力通过使用JsonPath你可以方便的查找节点、获取想要的数据JsonPath是Json版的XPath。
JsonPath语法
JsonPath说明$文档根元素当前元素.或[]匹配下级元素…递归匹配所有子元素*通配符匹配下级元素[]下标运算符根据索引获取元素JsonPath索引从0开始[,]连接操作符将多个结果拼接成数组返回可以使用索引或别名[start:end:step]数据切片操作?()过滤表达式
这么多语法规范大家会觉得一脸懵逼吧细心的小伙伴会发现语法中 … 表示递归匹配所有子元素简单粗暴用…获取所有匹配的子元素通过索引拿到想要的值。
JsonPath源码
def jsonpath(obj, expr, result_typeVALUE, debug0, use_evalTrue):traverse JSON object using jsonpath expr, returning values or pathsobj需要解析的对象比如接口的返回值。expr: 匹配的表达式。
JsonPath实战 以下编写代码进行演示。
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-eUM5seCb48SWtoken 依赖实例
①在config/setting.py配置文件中配置全局的域名或IP。
class DevConfig():# 项目的域名或IPhosthttp://127.0.0.1:8888
config DevConfig()②在config/config.yaml文件中存入登录账号。 config.yaml
user:mobile_phone: 155********pwd: 12345678③在项目根目录下新建文件夹middleware文件夹下新建文件helper.py用于处理token。 ④首先编写登录接口返回接口数据。 helper.py
from common.requests_handler import RequestsHandler
from config.setting import config
from common.yaml_handler import yaml_datadef login():登录接口返回tokenreq 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
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())运行结果如下
Bearer eyJhbGciOJIPzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwN⑥最后定义类将token作为类属性整体代码如下helper.py
from common.requests_handler import RequestsHandler
from config.setting import config
from common.yaml_handler import yaml_data
from jsonpath import jsonpathdef 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 tokenreturn token
class Context:将token作为类属性token if __name__ __main__:print(save_token())运行结果如下
Bearer eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjEwMDA1MTMxNSwiZXhwIjoxNTkwNDcz⑦充值接口携带token请求。
import unittest
import requestsfrom middleware.helper import Context, save_token
class TestRecharge(unittest.TestCase):def setUp(self):passdef tearDown(self):passdef test_recharge(self):save_token()token Context.tokenurl http://127.0.0.1:88888/rechargepayload {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********,}
}下面是我整理的2023年最全的软件测试工程师学习知识架构体系图
一、Python编程入门到精通 二、接口自动化项目实战 三、Web自动化项目实战 四、App自动化项目实战 五、一线大厂简历 六、测试开发DevOps体系 七、常用自动化测试工具 八、JMeter性能测试 九、总结尾部小惊喜
不畏风雨砥砺前行奋斗是实现梦想的道路。坚持不懈追逐远方用毅力创造辉煌的人生。相信自己的力量燃烧热情每一次努力都是迈向成功的跳板只要心怀勇气必将绽放属于自己的壮丽华章。
拥抱挑战绽放光芒奋斗是成就辉煌的征程。砥砺前行脚踏实地用汗水铸就成功的坚固基石。相信自己的能力不屈不挠每一次努力都是逼近目标的勇敢迈步。
心怀梦想勇往直前奋斗是砥砺前行的旅程。追逐辉煌披荆斩棘用汗水浇灌成就的花朵。相信自我价值不畏困难每一次努力都是向成功逼近的坚实步伐。