python 接口测试怎么校验json数据(python接口自动化十七--Json 数据处理---一次爬坑记详解)
python 接口测试怎么校验json数据
python接口自动化十七--Json 数据处理---一次爬坑记详解简介
有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 json 格式的,我们在做判断时候,往往只需要提取其中
几个关键的参数就行,这时候我们就需要 json 来解析返回的数据了。首先来说一下笔者为何要单独写这么一篇,原因是:python 里面 bool 值是 true 和 false,json 里面 bool 值是 true和 false,并且区分大小写,这就尴尬了,明明都是 bool 值。
在python里面写的代码,传到json里,不用说肯定识别不了,所以需要把python的代码经过encode后成为 json 可识别的数据类型,反之json数据就需要decode后成为python代码可识别的数据类型。这个也是需要初学者注意,也算是个细微差和
一个坑人的地方吧,如果不注意很容易掉坑里啊。笔者就掉进去过,还好自救能力强,爬出来了,所以为了警醒后来者,就有了这篇随笔。
json 模块简介
1、json 简介:json,全名 javascript object notation,json(javascript object notation(记号、标记))是一种轻量级的数据交换格式。它基于javascript(standard ecma-262 3rd edition - december 1999)的一个子集。json采用完全独立
于语言的文本格式,但是也使用了类似于c语言家族的习惯(包括c, c++, c#, java, javascript, perl, python等)。这些特性使json成为理想的数据交换语言。json易于人阅读和编写,同时也易于机器解析和生成。常用于 http 请求中,接口
返回的数据中。
2、可以用 help(json),查看对应的源码注释内容
编码encode(python->json)
1、为什么要 encode,笔者在开头就给各位小伙伴开门见山的说出来了,让各位带着问题来探索、来学习、来思考
2、举个简单例子,下图的实例中 dict 类型经过 json.dumps()后变成 str,true 变成了 true,false变成了 fasle
3、从json模块的对应源码中可以查看到,python 数据转化成 json可识别的数据,对应的表关系如下
解码 decode(json->python)
1、以博客园的登录成功结果:{"success":true}为例,我们其实最想知道的是 success 这个字段返回的是 true 还是 false,以便于我们对接口进行断言,以下是fiddler抓包博客园登录成功的结果
2、如果以 content 字节输出,返回的是一个字符串:{"success":true},这样获取后面那个结果就不方便了,导致断言也不方便
3、如果经过 json 解码后,返回的就是一个字典:{u'success': true},这样获取后面那个结果,就用字典的方式去取值:result2["success"],这样不言而喻断言也就简单方便了
4、由于博客园的登录机制的改变,我们这里接着上一篇的删除随笔的返回结果,给小伙伴们实战演练一下
5、用fiddler抓包,抓到删除新建随笔的请求,从抓包结果可以看出,返回结果是一个字符串:{"issuccess":true},按照上边的步骤用代码实现
6、代码及结果(看到了吧,就是这么轻松被我们取到其value了,接下来就可以进行断言了)
7、从json模块的对应源码中可以查看到, json 数据转化成 python 可识别的数据,对应的表关系如下
8、参考代码
|
# coding:utf-8 import requests # 先打开登录首页,获取部分cookie url = "https://passport.cnblogs.com/user/signin" headers = { "user-agent" : "mozilla/5.0 (windows nt 10.0; wow64; rv:44.0) gecko/20100101 firefox/44.0" } # get方法其它加个ser-agent就可以了 s = requests.session() r = s.get(url, headers = headers,verify = false) print (s.cookies) # 添加登录需要的两个cookie c = requests.cookies.requestscookiejar() c. set ( '.cnblogscookie' , 'xxx' ) # 填上面抓包内容 c. set ( '.cnblogs.aspnetcore.cookies' , 'xxx' ) # 填上面抓包内容 c. set ( 'alwayscreateitemsasactive' , "true" ) c. set ( 'admincookiealwaysexpandadvanced' , "true" ) s.cookies.update(c) print (s.cookies) result = r.content print (result.decode( 'utf-8' )) # 登录成功后保存编辑内容 url2 = "https://i.cnblogs.com/editposts.aspx?opt=1" body = { "__viewstate" : "", "__viewstategenerator" : "fe27d343" , "editor$edit$txbtitle" : "这是绕过登录的标题:北京-宏哥" , "editor$edit$editorbody" : "<p>这里是中文内容:http://www.cnblogs.com/duhong/</p>" , "editor$edit$advanced$ckbpublished" : "on" , "editor$edit$advanced$chkdisplayhomepage" : "on" , "editor$edit$advanced$chkcomments" : "on" , "editor$edit$advanced$chkmainsyndication" : "on" , "editor$edit$lkbdraft" : "存为草稿" , } r2 = s.post(url2, data = body, verify = false) print (r.content.decode( 'utf-8' )) # 第三步:正则提取需要的参数值 import re postid = re.findall(r "postid=(.+?)&" , r2.url) print ( type (postid)) print (postid) # 这里是 list # 提取为字符串 print (postid[ 0 ]) # 第四步:删除草稿箱 url3 = "https://i.cnblogs.com/post/delete" json3 = { "postid" : postid[ 0 ]} r3 = s.post(url3, json = json3, verify = false) result = r3.content #content数据是字节输出 print ( type (result)) print (result) #json是经过加码encode成对应python的数据类型 result1 = r3.json() print ( type (result1)) print (result1[ 'issuccess' ]) |
小结
在实际工作中遇到问题要学会查资料,看其对应的官方文档以及源码,不仅可以起到事半功倍的作用,也可以锻炼自己解决问题的能力。这一点笔者深有体会!!!
以上所述是小编给大家介绍的python json 数据处理详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://www.cnblogs.com/du-hong/p/10688197.html
- python怎么判断对象属性(判断python对象是否可调用的三种方式及其区别详解)
- python字符串相似度匹配(Python实现字符串匹配的KMP算法)
- python将字符串转换为时间格式(Python时间和字符串转换操作实例分析)
- python 绕过密码(一小段Python代码,破解加密zip文件的密码)
- 用python实现atm银行系统(Python实现的银行系统模拟程序完整案例)
- pythonredis列表(Python redis操作实例分析连接、管道、发布和订阅等)
- python 怎么解析中文(Python中一般处理中文的几种方法)
- python模块化打包(python使用Paramiko模块实现远程文件拷贝)
- python函数使用方法高级用法(Python骚操作之动态定义函数)
- python语言提供的3种基本数据类型(详解Python3 基本数据类型)
- python远程下发shell指令(Python实现堡垒机模式下远程命令执行操作示例)
- python如何新建虚拟环境(详解如何管理多个Python版本和虚拟环境)
- python3目录操作(Python3 pip3 list 出现 DEPRECATION 警告的解决方法)
- python线程池如何实现同步(Python mutiprocessing多线程池pool操作示例)
- python怎么做图像识别(Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例)
- python字符串之基本操作小练习(Python数据类型之String字符串实例详解)
- 智能手表兼容Windows和Android 无需充电挑战苹果(智能手表兼容Windows和Android)
- 一天一冲也算表 麦步,一款待机 21 天的智能手表体验评测(一天一冲也算表)
- 魅族智能手表充电座曝光 Type-C 接口,线座分离设计(魅族智能手表充电座曝光)
- 华为 Watch GT2 Pro 智能手表曝光,新增支持无线充电(华为WatchGT2)
- vivo首款智能手表来了 也有血氧饱和度监测,一次充电18天续航(vivo首款智能手表来了)
- 你知道 七夕 的真正含义吗(你知道七夕的真正含义吗)
热门推荐
- laravel新增数据表(laravel 多图上传及图片的存储例子)
- js解除网页屏蔽(js检测标题与描述中的关键词发现就替换或跳转到别的页面)
- mysqltruncate分区自定义参数(MySQL truncate table语句的使用)
- spring boot 如何启动tomcat(传统tomcat启动服务与springboot启动内置tomcat服务的区别推荐)
- 阿里云服务器总被攻击怎么办(香港云服务器遭遇恶意攻击怎么处理?)
- jquery中find()与filter()的区别
- sql语言怎么删除某列(SQL删除多列语句的写法)
- python改变字体颜色指令(使用Python自动化破解自定义字体混淆信息的方法实例)
- python实现删除列表重复元素功能(Python实现删除排序数组中重复项的两种方法示例)
- laravel数据库切换(实现laravel 插入操作日志到数据库的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9