问题类
问题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