python自动化其他常规操作

本文介绍了Python接口自动化中的一些常规操作,包括使用jsonpath进行数据提取,json的序列化和反序列化,以及多值断言的运用。通过实战操作,帮助提升接口测试的效率。
摘要由CSDN通过智能技术生成

前言

        之前已经介绍过很多关于接口自动化的一些相关知识,但是不可忽略,在我们的实战过程中,还有有很多的小细节需要我们去关注和留意的,是都会使用到的,那么接下来,我们就再介绍一些实战会运动到的一些常规操作。

一、数据提取器(jsonpath)

       在我们做接口自动化过程中,很难避免,需要接口依赖,就是通过需从上一接口中,提取接口返回结果,然后传递到下一个接口中,通过什么方式比较快呢 ?或者你会想到通过字典一层层的获取,也可通过正则表达式提取数据,还有一种更简单的方法,那就是———— jsonpath数据提取器 ;

1、简单语法介绍:

2、使用说明

1)JSONPath是xpath在json的应用;
2)JSONPath 是参照xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素;
3)JSONPath 用一个抽象的名字$来表示最外层对象;
4)JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引;

3、常用操作

1)安装:pip install jsonpath 

2)导入模块: from jsonpath import jsonpath

3)其他说明:

jsonpath ,提取json里面的某部分数据,
登录前置,帮助我们快速点位到json数据中的某字段(key:value形式)
1、$ ==> 表根目录对象,表示提取所有
2、. ==> 表子字节(返回的主层级)
3、.. ==> 表子孙字节(表主层级及其以下层级)
注意:
== :匹配的结果会放到一列表中,可获取多个
== :无匹配成功的,返回False

4)数据提取实战操作

from jsonpath import jsonpath

data = {
	'code': 0,
	'msg': 'OK',
	'data': {
		'id': 31,
		'leave_amount': 600.0,
		'mobile_phone': '18211112222',
		'reg_name': '小拉拉',
		'reg_time': '2021-01-28 15:27:07.0',
		'type': 1,
		'token_info': {
			'token_type': 'Bearer',
			'expires_in': '2021-01-29 20:40:00',
			'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjMxLCJleHAiOjE2MTE5MjQwMDB9.I20fFTVt5i8lK86GR7HOwCMMYPeaiTqSLVEiCJbxuXYvGtefg7JzFmK-fP6eOtTJyvSoSrMPaugwmFpaoIWSCA'
		}
	},
}

# 匹配的结果放在列表,如果没有匹配,False
resp = jsonpath(data, '$..token')
resp1 = jsonpath(data,'$.msg')
resp2 = jsonpath(data,'$.kjk')
print(resp)
print(resp1)
print(resp2)

运行结果:
['eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjMxLCJleHAiOjE2MTE5MjQwMDB9.I20fFTVt5i8lK86GR7HOwCMMYPeaiTqSLVEiCJbxuXYvGtefg7JzFmK-fP6eOtTJyvSoSrMPaugwmFpaoIWSCA']
['OK']
False

二、json序列化和反序列化  

        当我们在自动化测试过程中,有时候需要转化数据才能执行代码,比如说,正则表达式,是需要通过字符串格式才能进行提取,但恰好我们的数据又不是字符串时;再比如说,我们在excel中提取json或headers数据时,需要传递python数据,但我们提取到的又不是python数据时,我们就需要转化数据了.

ps:我的理解不太深,只能做简单的记录了... ~~~

1、反序列化(  json.loads( )  )

== :将json格式字符串,转化为Python格式字典

2、序列化  (  json.dumps( )  )

== : 将Python格式的字典,转化为json格式的字符串

import json

# 将json格式字符串,转化为Python格式字典===> 反序列化
name = '{"name":"lala","age":19}'
print(json.loads(name))

# 将Python格式的字典,转化为json格式的字符串===> 序列化
new_name = {"name":"lana","age":18}
print(json.dumps(new_name))


运行结果:
{'name': 'lala', 'age': 19}
{"name": "lana", "age": 18}

 三、多值断言(asseert)

       断言,是作为预期结果和实际结果的比对,是我们验证接口运行结果的一个重要方法。那么如果我们在做接口自动化过程中,得到的返回结果,我们应该断言哪个呢?

单断言返回码吗?好像又不够准确,全量断言?好像也没有必要,那么这是,我们可以考虑一下多值断言。

在接口自动化测试中,我们一样把预期结果也放置在excel表格中,通过字典的格式存储,

例如:expect     ==>     {"code":0,"msg":"ok"}

expect  ==>   {"code":0,"msg":"ok"}


import json


# 方法一:

expect = json.loads(info['expect'])

assert resp.json['code'] == expect['code']
assert resp.json['msg'] == expect['msg']


# 方法二:

for key , value in expect.items():
    assert resp.json()[key] == value


# 方法三:

将excel中的expect,改为:{"$..code":0,"$..msg":"ok"}

for key , value in expect.items():
    assert jsonpath(resp.json,key) == value


# 方法四:

如果需判断expect中,code不为0,才需再断言msg,可写为:

assert resp_body['code'] == expect['code']
        if resp_body['code'] != 0:
            assert expect['msg'] in resp_body['msg']

总结

        以上都是在接口自动化过程中,会遇到或者说可以优化的一些小操作,了解的不够深入,只能做点小记录了,方便以后查看。

最后鸡汤一波:

        说句老套的话,付出不一定有收获,但是真的不付出就一定不会有收获,所以谁知道呢,还是先付出的,做了,不管结果如何,其实还是收获了点东西的,就看自己怎么衡量把,该努力还是得努力的,加油,fighting!!!!!

wanjie,撒花花花花花花花`~~~``~`!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值