2号python+requests接口自动化测试遇坑&报错&知识扩展(持续更新中)

问题类

问题1:用postman调正常,同样的参数再pycharm里运行就报这个错

  • 日志报错

:异常原因:org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token ‘pageNum’: was expecting (‘true’, ‘false’ or ‘null’); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token ‘pageNum’: was expecting (‘true’, ‘false’ or ‘null’)

  • 解决方法1:还是编码格式问题,适用data参数需要格式化下(更深入了解可以搜索 json.dumps方法)

jsonData = json.dumps(data, ensure_ascii=False)

案例:
data = {"pageNum": 1, "pageSize": 20}
jsonData = json.dumps(data, ensure_ascii=False)
res = requests.post(url, data=jsonData,headers=headers)
print(res.text)----ok了
  • 解决方法2:直接用json参数,不用data参数。更简单(更深入了解可以baidu下post请求的data和json的区别)
data = {"pageNum": 1, "pageSize": 20}
res = requests.post(url, json=data,headers=headers)
print(res.text)----ok了

问题2:登录的url,登录成功后跳转到指定业务页面,看不到登录接口

  • 解决方法:浏览器里-F12-网络tab,默认无限制下拉框更换成【脱机】,然后可以看到请求的登录接口了
  • 在这里插入图片描述

问题3:post返回res.json()值是字典类型,value 是字符串下字典下的值怎么取?

	说明:eval()函数很强大,str类型可以和其他数据类型转换,前提是‘ ’引号里是什么类型,结果就是什么类型(了解更多可以自己baidu函数详细用法)

在这里插入图片描述

问题4:pycharm里命令台输入pytest执行用例,collected 0 items

有其他文件里有命名复核用例的数据,需要检查,
执行main方法没有allure报告生成,因为pytest执行不能用mian,如果要执行如果再设置里改成unittests
if name == ‘main’:
pytest.main([‘test_try.py’,‘-s’,‘–alluredir=…/report/tmp’])
在这里插入图片描述

问题5:明明是post请求,却请求不通,数据不存在

背景:正常post请求在这里插入图片描述
在这里插入图片描述

调试结果:数据不存在
在这里插入图片描述

继续使用postman调下接口验证下,同样是不存在

在这里插入图片描述
解决办法:
把单个入参拼接url上,请求体输入空,或不输入内容,请求成功。
第一次看功能接口发现参数就是拼接url上,但是我还是按照常规的方式 把post请求的参数放到body里,正常应该能达到一样的效果,结果却不是。
在这里插入图片描述

二、知识拓展类

1.json和字典的区别

python: None
java/javascript: null(python不认识。如果响应结果当中有null, 需要转换成None)

字典:数据类型。
json: 数据格式。 json格式的字符串

内置库:json
json.loads() 把json串,转换成python字典
json.dumps() 把python字典,转换成json串

req_data = '{"mobile_phone": "18610100022","pwd": "123456789","reg_name": "小咸鱼", "test": 3}'
req_dict = json.loads(req_data)
print(type(req_dict))
print(req_dict)

req_dict_eval = eval(req_data) # eval无法自动处理null
print(type(req_dict_eval))
print(req_dict_eval)

import ast
check_list2 = ast.literal_eval(req_data)  # 比eval安全一点。转成列表。
print(type(check_list2))
print(check_list2)
====打印:
<class 'dict'>
{'mobile_phone': '18610100022', 'pwd': '123456789', 'reg_name': '小咸鱼', 'test': 11}
<class 'dict'>
{'mobile_phone': '18610100022', 'pwd': '123456789', 'reg_name': '小咸鱼', 'test': 11}
<class 'dict'>
{'mobile_phone': '18610100022', 'pwd': '123456789', 'reg_name': '小咸鱼', 'test': 11}

2.zip的用法

a = ("class", "teacher", "student")
b = ("研究生1班", "小咸鱼", "many", "hello")
c = [1, 2, 3]
#zip只能组合2个类
res = dict(zip(a,b))
print(res)

res = list(zip(a,b,c))
print(res)
=====打印:
{'class': '研究生1班', 'teacher': '小咸鱼', 'student': 'many'}
[('class', '研究生1班', 1), ('teacher', '小咸鱼', 2), ('student', 'many', 3)]

3.faker造数据

参考:测试派文章:http://testingpai.com/article/1615615023407
Faker 已经提供了足够丰富的信息生成,包括名字、手机号、邮箱地址、邮编、国家。省份、个人信息、随机时间等等。尽管如此,可能还是没有办法满足你的需求。

1、安装:
pip install faker
2、使用:
   1) 导入:from faker import Faker
   2) 语言支持:
        简体中文:zh_CN
        繁体中文:zh_TW
        美国英文:en_US
        英国英文:en_GB
        .......
from faker import Faker
fk = Faker("zh_CN")
i=0
while i <=3:
    # 姓名
    name = fk.name()
    # 身份证
    id_card = fk.ssn()
    # 手机号
    phone = fk.phone_number()
    # 银行卡(信用卡)
    card = fk.credit_card_number()
 #   随机数
    num = fk.random_int(min=1000, max=9999)
    print('姓名:{}, 身份证号:{}, 手机号{},银行卡{}'.format(name, id_card, phone, card))
    print('随机数:{}'.format(num))
    i=i+1  
 打印  :
姓名:赵俊, 身份证号:513226193708306066, 手机号13938887325,银行卡180008192554058
随机数:9682
姓名:刘婷婷, 身份证号:653001197312063601, 手机号15770895412,银行卡588507757478
随机数:7152
姓名:郭丹, 身份证号:211302196404020558, 手机号13984632468,银行卡180021559911589
随机数:3266
姓名:章春梅, 身份证号:440222194908167716, 手机号13008737612,银行卡4781166976432
随机数:2323
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值